The tools registered in this server are listed below.
| Tool |
Description |
list_documents |
List documents with optional filters; OCR content stripped by default (include_content=True to opt in). notes[].note and custom_fields[].value are always stripped. Fetch them via single-document endpoints. |
search_documents |
Full-text and filtered document search; OCR content stripped by default (include_content=True to opt in). notes[].note and custom_fields[].value are always stripped on hits. |
get_document |
Retrieve document metadata by ID; OCR content stripped by default (include_content=True to opt in) |
get_document_content |
Retrieve the plain-text content of a document |
create_document |
Upload a new document for ingestion |
update_document |
Patch document metadata (title, tags, correspondent, etc.) |
delete_document |
Permanently delete a document |
bulk_edit_documents |
Apply a bulk operation to multiple documents |
get_document_notes |
List notes attached to a document |
add_document_note |
Add a note to a document |
get_document_history |
Retrieve audit log for a document |
get_document, list_documents, search_documents, and update_document include a web_url field pointing to the document in the Paperless UI, such as https://paperless.example.com/documents/42/. Set PAPERLESS_MCP_PAPERLESS_PUBLIC_URL if the public URL differs from the API URL; otherwise the API URL is used.
All paginated tools return next/previous as bare page=N markers (or None). Upstream Paperless URLs are normalised away so the internal hostname never leaks into MCP responses. Both server-paginated (documents, tags, and similar endpoints) and client-paginated (tasks) endpoints now share a single shape. Callers pass page=N explicitly to fetch subsequent pages.
| Tool |
Description |
list_tags |
List all tags |
get_tag |
Get a tag by ID |
create_tag |
Create a new tag |
update_tag |
Update a tag |
delete_tag |
Delete a tag |
bulk_edit_tags |
Bulk-add or remove tags across documents |
| Tool |
Description |
list_correspondents |
List all correspondents |
get_correspondent |
Get a correspondent by ID |
create_correspondent |
Create a new correspondent |
update_correspondent |
Update a correspondent |
delete_correspondent |
Delete a correspondent |
| Tool |
Description |
list_document_types |
List all document types |
get_document_type |
Get a document type by ID |
create_document_type |
Create a new document type |
update_document_type |
Update a document type |
delete_document_type |
Delete a document type |
| Tool |
Description |
list_custom_fields |
List all custom fields |
get_custom_field |
Get a custom field by ID |
create_custom_field |
Create a new custom field |
update_custom_field |
Update a custom field |
delete_custom_field |
Delete a custom field |
Additional data by type
The additional-data field shape depends on the custom field type. Refer to these shapes when using create_custom_field and update_custom_field:
| Type |
Additional-data shape / example |
Notes |
string, longtext, integer, boolean, float, date, url, documentlink |
(unused) |
Omit or pass null |
monetary |
{"default_currency": "USD"} |
Optional ISO-4217 currency code; Paperless accepts null/absent |
select |
{"select_options": [{"label": "Low"}, {"label": "Medium"}]} |
Required on create. Paperless assigns each option a stable id on creation. On update, re-use existing id values to preserve document values. |
Unknown shapes are rejected by Paperless with a 400 error.
| Tool |
Description |
list_share_links |
List share links (optionally filtered by document) |
get_share_link |
Fetch a share link by ID |
Both tools include a share_url field of the form <PAPERLESS_MCP_PAPERLESS_PUBLIC_URL>/share/<slug>.
PAPERLESS_MCP_PAPERLESS_PUBLIC_URL is used when set; otherwise it defaults to
PAPERLESS_MCP_PAPERLESS_URL via the config layer (see PAPERLESS_MCP_PAPERLESS_PUBLIC_URL
in the README env-var table).
| Tool |
Description |
list_tasks |
List background Celery tasks. Paginates (page, page_size up to 100). Defaults to unacknowledged tasks only. Pass include_acknowledged=True to include acknowledged tasks, or acknowledged=True to return only acknowledged ones. |
get_task |
Get a task by UUID |
wait_for_task |
Poll until a task reaches a terminal state or times out |
| Tool |
Description |
get_statistics |
Retrieve Paperless system statistics |
get_remote_version |
Check the Paperless-NGX version and update status |