Paperless MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FASTMCP_LOG_LEVEL | No | Log level for FastMCP internals and app loggers. | INFO |
| PAPERLESS_MCP_HOST | No | Bind host for HTTP/SSE transport. | 127.0.0.1 |
| PAPERLESS_MCP_PORT | No | Bind port for HTTP/SSE transport. | 8000 |
| PAPERLESS_MCP_OIDC_* | No | OIDC provider settings when OIDC auth is enabled. | |
| PAPERLESS_MCP_BASE_URL | No | Public base URL for artifact download links. | |
| PAPERLESS_MCP_API_TOKEN | Yes | Paperless service-account token. | |
| PAPERLESS_MCP_HTTP_PATH | No | URL path prefix for HTTP transport. | /mcp |
| PAPERLESS_MCP_LOG_LEVEL | No | Log level: DEBUG, INFO, WARNING, ERROR. | INFO |
| PAPERLESS_MCP_READ_ONLY | No | When true, disables every writable tool. | false |
| PAPERLESS_MCP_TRANSPORT | No | Server transport: stdio, http, or sse. | stdio |
| PAPERLESS_MCP_LOG_FORMAT | No | Log format: rich or json. | rich |
| PAPERLESS_MCP_BEARER_TOKEN | No | Static bearer token for simple token auth. | |
| PAPERLESS_MCP_HTTP_RETRIES | No | Retries on 5xx/network errors. | 2 |
| PAPERLESS_MCP_INSTRUCTIONS | No | Operator-supplied description appended to MCP instructions. | built-in |
| FASTMCP_ENABLE_RICH_LOGGING | No | Set to false for plain/structured JSON log output. | true |
| PAPERLESS_MCP_PAPERLESS_URL | Yes | Base URL of the Paperless-NGX REST API (no trailing slash). | |
| PAPERLESS_MCP_EVENT_STORE_URL | No | Event store backend for HTTP session persistence. | memory:// |
| PAPERLESS_MCP_DEFAULT_PAGE_SIZE | No | Default page_size for list tools. Clamped [1, 100]. | 25 |
| PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS | No | Per-request HTTP timeout (seconds). | 30 |
| PAPERLESS_MCP_PAPERLESS_PUBLIC_URL | No | Public-facing Paperless UI URL used to construct user-visible links. Defaults to PAPERLESS_MCP_PAPERLESS_URL when unset. | same as PAPERLESS_MCP_PAPERLESS_URL |
| PAPERLESS_MCP_DOWNLOAD_LINK_TTL_SECONDS | No | TTL of URLs issued by create_download_link. Clamped [30, 3600]. | 300 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_documentsA | List documents with optional filters. Returns one page. By default, per-document OCR
|
| search_documentsA | Full-text search documents. By default per-hit OCR
|
| get_documentA | Fetch one document by ID. By default, the OCR |
| get_document_contentA | Return the OCR'd text content of a document. |
| get_document_thumbnailA | Return the document's thumbnail as inline image content. |
| get_document_metadataA | Return technical metadata for a document (checksums, filenames, etc.). |
| get_document_notesA | Return notes attached to a document. |
| get_document_historyA | Return the audit history for a document. |
| get_document_suggestionsA | Return Paperless's classifier suggestions for a document. |
| update_documentA | Patch selected fields on a document. The response strips OCR |
| delete_documentC | Delete a document. |
| upload_documentA | Upload a document. Returns the task UUID for polling via |
| bulk_edit_documentsC | Apply a bulk operation to a set of documents. |
| add_document_noteB | Append a note to a document. |
| delete_document_noteC | Remove a note from a document. |
| list_tagsC | List tags. |
| get_tagA | Fetch a tag by ID. |
| create_tagC | Create a new tag. |
| update_tagC | Patch selected fields on a tag. |
| delete_tagC | Delete a tag. |
| bulk_edit_tagsC | Apply a bulk operation to a set of tags. |
| list_correspondentsC | List correspondents. |
| get_correspondentA | Fetch a correspondent by ID. |
| create_correspondentC | Create a new correspondent. |
| update_correspondentC | Patch selected fields on a correspondent. |
| delete_correspondentC | Delete a correspondent. |
| bulk_edit_correspondentsC | Apply a bulk operation to a set of correspondents. |
| list_document_typesC | List document types. |
| get_document_typeA | Fetch a document type by ID. |
| create_document_typeC | Create a new document type. |
| update_document_typeB | Patch selected fields on a document type. |
| delete_document_typeC | Delete a document type. |
| bulk_edit_document_typesC | Apply a bulk operation to a set of document types. |
| list_custom_fieldsC | List custom fields. |
| get_custom_fieldB | Fetch a custom field by ID. |
| create_custom_fieldA | Create a new custom field.
Unknown shapes are rejected by Paperless with a 400. |
| update_custom_fieldA | Patch selected fields on a custom field definition.
See |
| delete_custom_fieldC | Delete a custom field. |
| list_storage_pathsC | List storage paths. |
| get_storage_pathB | Fetch a storage path by ID. |
| list_saved_viewsC | List saved views. |
| get_saved_viewA | Fetch a saved view by ID. |
| list_share_linksA | List share links (optionally filtered by document). |
| get_share_linkA | Fetch a share link by ID. |
| list_tasksA | List Paperless Celery tasks. Defaults to unacknowledged tasks only (set |
| get_taskA | Fetch a task by UUID. Returns |
| wait_for_taskA | Poll until the task reaches a terminal state or times out. |
| get_statisticsA | Fetch collection-level statistics. |
| get_remote_versionA | Fetch Paperless version info. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| config_resource | Return server configuration as JSON. |
| stats_resource | Return Paperless-NGX document statistics as JSON. |
| remote_version_resource | Return the remote Paperless-NGX version as JSON. |
| tags_resource | Return all tags as a JSON array. |
| correspondents_resource | Return all correspondents as a JSON array. |
| document_types_resource | Return all document types as a JSON array. |
| custom_fields_resource | Return all custom fields as a JSON array. |
| storage_paths_resource | Return all storage paths as a JSON array. |
| saved_views_resource | Return all saved views as a JSON array. |
| tasks_resource | Return Paperless-NGX tasks (first page, unacknowledged) as a JSON array. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pvliesdonk/paperless-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server