Skip to main content
Glama
tobee89

mcp-paperless-ngx

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PAPERLESS_URLNoBase URL the server talks to.
PAPERLESS_TOKENNoAPI token. PAPERLESS_API_KEY also works.
PAPERLESS_API_KEYNoAlternative to PAPERLESS_TOKEN: API token.
PAPERLESS_HEADERSNoExtra request headers, as JSON ({"X-Auth":"…"}) or 'Name: value, Name: value'. Needed behind forward-auth proxies such as Authentik or Authelia.
PAPERLESS_TOOLSETSNoComma-separated toolsets, or 'all'. Defaults to documents,metadata,customfields,views,sharing,workflows,system.
PAPERLESS_READ_ONLYNoExpose only tools that cannot change anything. Default false.false
PAPERLESS_PUBLIC_URLNoURL used when building links for the user, if the instance is reachable under a different name from outside. Defaults to PAPERLESS_URL.
PAPERLESS_TIMEOUT_MSNoRequest timeout. Default 60000.60000
PAPERLESS_API_VERSIONNoREST API version sent in the Accept header. Default 10.10
PAPERLESS_DOWNLOAD_DIRNoWhere downloaded files are written. Defaults to system temp.
PAPERLESS_MAX_PAGE_SIZENoHard ceiling on list page sizes, whatever the model asks for. Default 100.100

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
search_documentsA

Find documents by full-text search, metadata filters, or both. This is the main entry point for every 'which documents ...' question. Returns a compact summary per document (id, title, IDs of correspondent/type/tags, dates) — NOT the OCR text, which would flood the context. Use get_document_content for the text of a specific document.

get_documentA

Fetch one document's metadata by ID: title, correspondent, type, tags, dates, custom fields, notes and available versions. Does not include the OCR text unless include_content is set.

get_document_contentA

Return the OCR/extracted text of one document. Deliberately a separate tool: this is the most expensive thing you can pull from Paperless, so fetch it only for documents you have already narrowed down. Supports offset/limit for long documents.

update_documentA

Change metadata on a single document. Only the fields you pass are modified. Pass numeric IDs for correspondent, document_type and storage_path — resolve names via get_metadata_overview first. Setting tags replaces the whole tag list; to add or remove individual tags across documents use bulk_edit_documents.

delete_documentA

Move a document to the trash. It stays recoverable until the trash is emptied or the retention period expires. Always confirm with the user before deleting anything.

get_document_metadataA

Technical file metadata for a document: checksums, byte sizes, MIME type, stored filename, whether an archived PDF/A version exists, and embedded PDF metadata. Not the Paperless tags/correspondent — use get_document for those.

get_document_historyA

Audit trail of changes to a document — who changed which field, and when. Requires audit logging to be enabled on the instance. Returns the most recent entries first; raise limit to see further back.

get_document_suggestionsA

Paperless' own suggestions for a document — correspondents, tags, document types and dates its classifier considers likely. Useful as a starting point when triaging, but the suggestions are only as good as the trained model; verify before applying.

get_document_ai_suggestionsA

Suggestions from the instance's configured LLM backend (Paperless-ngx 3.x, only if AI features are enabled server-side). Returns 404 or an error when AI is disabled — that is expected, not a bug.

get_next_asnA

The next free archive serial number, for filing a physical document alongside its scan.

get_selection_dataA

For a set of document IDs, return how many of them carry each tag, correspondent, document type and storage path. Answers 'what is in this pile?' in one call instead of fetching every document.

bulk_edit_documentsA

Apply one operation to many documents at once. Far cheaper than looping update_document, and the only way to add or remove individual tags without replacing the whole tag list. Methods: set_correspondent, set_document_type, set_storage_path, add_tag, remove_tag, modify_tags, modify_custom_fields, set_permissions, reprocess, delete, rotate, merge, split, delete_pages, edit_pdf, remove_password. The destructive methods (delete, delete_pages, split/merge with delete_originals) need explicit user confirmation first.

merge_documentsA

Merge several documents into one new PDF, in the order given. The originals stay unless delete_originals is set. Runs asynchronously — poll the returned task with get_task.

rotate_documentsA

Rotate every page of the given documents clockwise by 90, 180 or 270 degrees.

edit_pdfA

Reorder, rotate, remove or split out pages of a single document, producing a new document. operations is a list of page instructions; each entry names a source page and what to do with it. Consult the Paperless API docs for the exact operation shape before using this.

remove_pdf_passwordA

Decrypt password-protected PDFs so Paperless can OCR them. The password is sent to your Paperless instance over its API; only use it against an instance you control.

reprocess_documentsA

Re-run OCR and the archive generation for the given documents, e.g. after changing OCR settings. Queued asynchronously; the documents keep their metadata.

delete_documentsA

Move several documents to the trash at once. Recoverable until the trash is emptied. Requires explicit user confirmation — list what will be deleted before calling this.

download_documentA

Save a document's file to disk on the machine running this MCP server and return the path. Files are written to PAPERLESS_DOWNLOAD_DIR (defaults to the system temp directory). The bytes are deliberately not returned inline — a PDF as base64 would consume the entire context.

get_document_thumbnailA

Return the document's thumbnail image inline so it can actually be looked at. Useful for confirming what a document is without reading its whole OCR text.

bulk_download_documentsA

Download several documents as one zip archive, written to the download directory. Returns the archive path, not its contents.

upload_documentA

Hand a file to Paperless for consumption. Provide either path (a file on the machine running this server — the cheap option) or content_base64 (works for remote deployments but costs context proportional to the file size; avoid for anything over a few hundred kilobytes). Consumption is asynchronous: the returned task ID can be polled with get_task.

email_documentsA

Send one or more documents by email from the Paperless instance. This sends real mail to real people — only call it after the user has confirmed the recipients, subject and body.

list_document_notesA

Notes attached to a document, with authors and timestamps. Notes hold context the OCR text does not contain — worth reading before drawing conclusions about a document.

create_document_noteA

Attach a free-text note to a document. Use this to record context that belongs with the document rather than in the conversation — why it was kept, what was agreed, what to do next.

delete_document_noteA

Remove a note from a document. Not recoverable.

list_tagsA

List tags. Tags are the primary way documents are categorised, and can be nested via parent. Returns id, name and document_count for each. Call this before creating anything — reusing an existing tag is almost always correct.

get_tagA

Fetch a single tag by ID, with all fields.

create_tagA

Create a new tag. Check list_tags first: near-duplicate entries are hard to merge later.

update_tagA

Partially update a tag. Only the fields you pass are changed; omitted fields keep their current value.

delete_tagA

Permanently delete a tag. Documents are not deleted, but they lose this assignment and it cannot be restored. Confirm with the user first.

list_correspondentsA

List correspondents. A correspondent is the sender or counterparty a document came from. Returns id, name and document_count for each. Call this before creating anything — reusing an existing correspondent is almost always correct.

get_correspondentA

Fetch a single correspondent by ID, with all fields.

create_correspondentA

Create a new correspondent. Check list_correspondents first: near-duplicate entries are hard to merge later.

update_correspondentA

Partially update a correspondent. Only the fields you pass are changed; omitted fields keep their current value.

delete_correspondentA

Permanently delete a correspondent. Documents are not deleted, but they lose this assignment and it cannot be restored. Confirm with the user first.

list_document_typesA

List document types. A document type says what kind of document it is (invoice, contract, payslip). Returns id, name and document_count for each. Call this before creating anything — reusing an existing document type is almost always correct.

get_document_typeA

Fetch a single document type by ID, with all fields.

create_document_typeA

Create a new document type. Check list_document_types first: near-duplicate entries are hard to merge later.

update_document_typeA

Partially update a document type. Only the fields you pass are changed; omitted fields keep their current value.

delete_document_typeA

Permanently delete a document type. Documents are not deleted, but they lose this assignment and it cannot be restored. Confirm with the user first.

list_storage_pathsA

List storage paths. A storage path is a filename template controlling where Paperless stores the file on disk. Returns id, name and document_count for each. Call this before creating anything — reusing an existing storage path is almost always correct.

get_storage_pathA

Fetch a single storage path by ID, with all fields.

create_storage_pathA

Create a new storage path. Check list_storage_paths first: near-duplicate entries are hard to merge later.

update_storage_pathA

Partially update a storage path. Only the fields you pass are changed; omitted fields keep their current value.

delete_storage_pathA

Permanently delete a storage path. Documents are not deleted, but they lose this assignment and it cannot be restored. Confirm with the user first.

test_storage_pathA

Render a storage path template against an existing document to see the resulting file path. Use this to validate a template before saving it.

bulk_edit_metadata_objectsA

Delete or set permissions on many tags, correspondents, document types or storage paths at once. Deletion here is permanent — confirm with the user before calling it.

get_metadata_overviewA

One compact snapshot of all tags, correspondents, document types and storage paths with their IDs and document counts. Cheaper than four separate list calls and the right first step before filing or triaging documents.

list_custom_fieldsA

Custom fields defined on this instance, with their IDs, data types and how many documents use them. You need the IDs before you can read or write custom field values on a document.

get_custom_fieldB

One custom field definition including its select options, if any.

create_custom_fieldA

Define a new custom field. The data type cannot be changed afterwards, so pick it deliberately.

update_custom_fieldA

Rename a custom field or adjust its extra_data (e.g. add select options). Changing data_type is not supported by Paperless.

delete_custom_fieldA

Delete a custom field definition and every value stored in it, across all documents. This cannot be undone — confirm with the user, and check document_count first.

list_saved_viewsA

Saved views are the filter presets the user built in the Paperless web UI. Reading them is the fastest way to learn how this person actually organises their archive — check here before inventing your own filters.

get_saved_viewA

One saved view including its filter rules, so you can reproduce it as a search.

create_saved_viewA

Save a filter preset that shows up in the user's Paperless sidebar. filter_rules use the web UI's numeric rule types — copy the shape from an existing view via get_saved_view rather than guessing.

update_saved_viewA

Change a saved view's name, sorting, visibility or filter rules.

delete_saved_viewA

Remove a saved view. Documents are unaffected.

list_share_linksA

Every share link on the instance, with its slug, target document and expiry. Share links are publicly reachable without login — treat this list as security-relevant.

list_document_share_linksB

Existing share links for one document — check this before creating another.

create_share_linkA

Create a public, unauthenticated URL for a document. Anyone holding the link can read the document until it expires. Always confirm with the user before creating one, and set an expiration unless they explicitly asked for a permanent link.

delete_share_linkA

Revoke a share link immediately. Anyone still holding the URL loses access at once; the document itself is untouched.

list_share_link_bundlesB

Share link bundles (Paperless-ngx 3.x) expose several documents behind a single public link.

create_share_link_bundleA

Publish several documents behind one public link. Same warning as create_share_link: this is publicly reachable without authentication. Confirm first and prefer a finite expiration.

delete_share_link_bundleA

Revoke a share link bundle immediately. Every document in the bundle stops being publicly reachable; the documents themselves are untouched.

list_workflowsA

Automation rules on this instance, each with its triggers and actions inlined. Read these before changing filing behaviour — a workflow may already be doing what the user is asking you to do by hand.

get_workflowA

One workflow with its full trigger and action definitions.

create_workflowA

Create an automation rule. Workflows run automatically against future documents, so a mistake here silently mis-files everything that arrives afterwards. Read an existing workflow with get_workflow to copy the exact shape, and confirm the rule with the user before creating it. Trigger object. type: 1=consumption started, 2=document added, 3=document updated, 4=scheduled. Common fields: sources (1=consume folder, 2=API upload, 3=mail fetch), filter_filename, filter_path, filter_mailrule, match + matching_algorithm, filter_has_tags / filter_has_all_tags / filter_has_not_tags, filter_has_any_correspondents, filter_has_any_document_types, filter_custom_field_query, and for scheduled triggers schedule_offset_days, schedule_is_recurring, schedule_recurring_interval_days, schedule_date_field (added|created|modified|custom_field). Action object. type: 1=assignment, 2=removal, 3=email, 4=webhook, 5=..., 6=... Assignment actions use assign_title, assign_tags, assign_correspondent, assign_document_type, assign_storage_path, assign_owner, assign_view_users/groups, assign_custom_fields. Removal actions use the remove_* counterparts. Email and webhook actions nest their own config object.

update_workflowA

Update a workflow. Passing triggers or actions replaces the existing list wholesale — fetch the current definition with get_workflow, modify it, and send the complete list back. To simply switch a rule off, pass enabled:false and nothing else.

delete_workflowA

Delete an automation rule permanently. Consider update_workflow with enabled:false instead.

list_workflow_triggersB

Trigger definitions across all workflows. Useful for auditing what fires when.

list_workflow_actionsA

Action definitions across all workflows. Useful for auditing what gets assigned automatically.

global_searchA

Search across every object type at once — documents, tags, correspondents, document types, storage paths, saved views, users, groups, mail rules, custom fields and workflows. Returns at most three hits per type, so use it to locate things by name when you do not yet know which kind of object you are looking for. For document searches, search_documents is better.

search_autocompleteA

Completions for a partial search term, ranked by importance in the full-text index. Helpful when the user's spelling of a name or term may not match what is in the archive.

get_statisticsA

Totals for the archive: document count, inbox count, characters, file type breakdown. A cheap orientation call at the start of a session.

get_server_statusA

Instance health: Paperless version, database and index status, whether Redis and the task workers are reachable, and whether the search index is up to date.

list_tasksA

Background tasks — consumption, merges, reprocessing — with their state and result. This is where an upload's outcome shows up, including the ID of the document it created.

get_taskA

One background task by database ID, including its result. Use this to find out whether an upload or merge actually succeeded.

get_active_tasksA

Tasks executing right now. Tells you whether the instance is busy.

acknowledge_tasksA

Mark finished or failed tasks as acknowledged so they stop showing in the UI.

list_trashA

Documents in the trash, with the date each was deleted and when it will be purged for good.

restore_from_trashA

Bring deleted documents back. The safe counterpart to delete_document.

empty_trashA

Permanently destroy trashed documents. There is no recovery after this — the files are gone. Never call this without the user explicitly asking for it in the current conversation, and list what is in the trash first.

get_remote_versionA

The latest Paperless-ngx release, and whether an update is available.

Prompts

Interactive templates invoked by user choice

NameDescription
triage_inboxWork through untriaged documents: propose a title, correspondent, type and tags for each, then apply only what the user approves.
find_documentLocate a specific document from a vague description, without flooding the context.
audit_sharingReview every publicly reachable share link and flag the risky ones.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 85 tools

Disambiguation3/5

Most CRUD tool families are clearly separated by resource type, but bulk_edit_documents overlaps with rotate_documents, merge_documents, edit_pdf, reprocess_documents, and delete_documents by exposing the same operations as methods. get_document with include_content also partially duplicates get_document_content, so an agent must read descriptions carefully to pick the right tool.

Naming Consistency5/5

Nearly every tool follows the verb_noun snake_case pattern, with predictable list/get/create/update/delete families for each resource type. Minor exceptions like global_search and search_autocomplete still fit the general verb-first style and do not create confusion.

Tool Count1/5

85 tools is an extreme surface for an MCP server, far beyond the practical range for agent tool selection. Even for a broad domain like Paperless-ngx, this exceeds the 50+ threshold that constitutes an extreme mismatch.

Completeness4/5

The server covers nearly the entire Paperless lifecycle: document search, content retrieval, metadata editing, OCR reprocessing, merging, trash management, share links, workflows, tasks, and full CRUD for all metadata objects. Minor gaps remain, such as no note update tool, no share-link update tool, and no direct user or mail-rule management.

Maintenance

ActivityMaintained
ResponsivenessNo issues