mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-01-28 22:59:03 -06:00
130 lines
3.8 KiB
Python
130 lines
3.8 KiB
Python
from mcp_server import ModelQueryToolset
|
|
from mcp_server import drf_publish_create_mcp_tool
|
|
from mcp_server import drf_publish_destroy_mcp_tool
|
|
from mcp_server import drf_publish_list_mcp_tool
|
|
from mcp_server import drf_publish_update_mcp_tool
|
|
|
|
from documents.permissions import get_objects_for_user_owner_aware
|
|
from paperless_mail.models import MailAccount
|
|
from paperless_mail.models import MailRule
|
|
from paperless_mail.models import ProcessedMail
|
|
from paperless_mail.views import MailAccountViewSet
|
|
from paperless_mail.views import MailRuleViewSet
|
|
from paperless_mail.views import ProcessedMailViewSet
|
|
|
|
VIEWSET_ACTIONS = {
|
|
"create": {"post": "create"},
|
|
"list": {"get": "list"},
|
|
"update": {"put": "update"},
|
|
"destroy": {"delete": "destroy"},
|
|
}
|
|
|
|
BODY_SCHEMA = {"type": "object", "additionalProperties": True}
|
|
|
|
VIEWSET_INSTRUCTIONS = {
|
|
MailAccountViewSet: "Manage mail accounts.",
|
|
MailRuleViewSet: "Manage mail rules.",
|
|
ProcessedMailViewSet: "List processed mail.",
|
|
}
|
|
|
|
|
|
class MailAccountQueryToolset(ModelQueryToolset):
|
|
model = MailAccount
|
|
|
|
def get_queryset(self):
|
|
user = getattr(self.request, "user", None)
|
|
if not user or not user.is_authenticated:
|
|
return MailAccount.objects.none()
|
|
if user.is_superuser:
|
|
return MailAccount.objects.all()
|
|
return get_objects_for_user_owner_aware(
|
|
user,
|
|
"paperless_mail.view_mailaccount",
|
|
MailAccount,
|
|
)
|
|
|
|
|
|
class MailRuleQueryToolset(ModelQueryToolset):
|
|
model = MailRule
|
|
|
|
def get_queryset(self):
|
|
user = getattr(self.request, "user", None)
|
|
if not user or not user.is_authenticated:
|
|
return MailRule.objects.none()
|
|
if user.is_superuser:
|
|
return MailRule.objects.all()
|
|
return get_objects_for_user_owner_aware(
|
|
user,
|
|
"paperless_mail.view_mailrule",
|
|
MailRule,
|
|
)
|
|
|
|
|
|
class ProcessedMailQueryToolset(ModelQueryToolset):
|
|
model = ProcessedMail
|
|
|
|
def get_queryset(self):
|
|
user = getattr(self.request, "user", None)
|
|
if not user or not user.is_authenticated:
|
|
return ProcessedMail.objects.none()
|
|
if user.is_superuser:
|
|
return ProcessedMail.objects.all()
|
|
return get_objects_for_user_owner_aware(
|
|
user,
|
|
"paperless_mail.view_processedmail",
|
|
ProcessedMail,
|
|
)
|
|
|
|
|
|
drf_publish_create_mcp_tool(
|
|
MailAccountViewSet,
|
|
actions=VIEWSET_ACTIONS["create"],
|
|
instructions=VIEWSET_INSTRUCTIONS[MailAccountViewSet],
|
|
body_schema=BODY_SCHEMA,
|
|
)
|
|
drf_publish_list_mcp_tool(
|
|
MailAccountViewSet,
|
|
actions=VIEWSET_ACTIONS["list"],
|
|
instructions=VIEWSET_INSTRUCTIONS[MailAccountViewSet],
|
|
)
|
|
drf_publish_update_mcp_tool(
|
|
MailAccountViewSet,
|
|
actions=VIEWSET_ACTIONS["update"],
|
|
instructions=VIEWSET_INSTRUCTIONS[MailAccountViewSet],
|
|
body_schema=BODY_SCHEMA,
|
|
)
|
|
drf_publish_destroy_mcp_tool(
|
|
MailAccountViewSet,
|
|
actions=VIEWSET_ACTIONS["destroy"],
|
|
instructions=VIEWSET_INSTRUCTIONS[MailAccountViewSet],
|
|
)
|
|
|
|
drf_publish_create_mcp_tool(
|
|
MailRuleViewSet,
|
|
actions=VIEWSET_ACTIONS["create"],
|
|
instructions=VIEWSET_INSTRUCTIONS[MailRuleViewSet],
|
|
body_schema=BODY_SCHEMA,
|
|
)
|
|
drf_publish_list_mcp_tool(
|
|
MailRuleViewSet,
|
|
actions=VIEWSET_ACTIONS["list"],
|
|
instructions=VIEWSET_INSTRUCTIONS[MailRuleViewSet],
|
|
)
|
|
drf_publish_update_mcp_tool(
|
|
MailRuleViewSet,
|
|
actions=VIEWSET_ACTIONS["update"],
|
|
instructions=VIEWSET_INSTRUCTIONS[MailRuleViewSet],
|
|
body_schema=BODY_SCHEMA,
|
|
)
|
|
drf_publish_destroy_mcp_tool(
|
|
MailRuleViewSet,
|
|
actions=VIEWSET_ACTIONS["destroy"],
|
|
instructions=VIEWSET_INSTRUCTIONS[MailRuleViewSet],
|
|
)
|
|
|
|
drf_publish_list_mcp_tool(
|
|
ProcessedMailViewSet,
|
|
actions=VIEWSET_ACTIONS["list"],
|
|
instructions=VIEWSET_INSTRUCTIONS[ProcessedMailViewSet],
|
|
)
|