Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FASTMCP_LOG_LEVELNoLog level for FastMCP internals and app loggers.INFO
PAPERLESS_MCP_HOSTNoBind host for HTTP/SSE transport.127.0.0.1
PAPERLESS_MCP_PORTNoBind port for HTTP/SSE transport.8000
PAPERLESS_MCP_OIDC_*NoOIDC provider settings when OIDC auth is enabled.
PAPERLESS_MCP_BASE_URLNoPublic base URL for artifact download links.
PAPERLESS_MCP_API_TOKENYesPaperless service-account token.
PAPERLESS_MCP_HTTP_PATHNoURL path prefix for HTTP transport./mcp
PAPERLESS_MCP_LOG_LEVELNoLog level: DEBUG, INFO, WARNING, ERROR.INFO
PAPERLESS_MCP_READ_ONLYNoWhen true, disables every writable tool.false
PAPERLESS_MCP_TRANSPORTNoServer transport: stdio, http, or sse.stdio
PAPERLESS_MCP_LOG_FORMATNoLog format: rich or json.rich
PAPERLESS_MCP_BEARER_TOKENNoStatic bearer token for simple token auth.
PAPERLESS_MCP_HTTP_RETRIESNoRetries on 5xx/network errors.2
PAPERLESS_MCP_INSTRUCTIONSNoOperator-supplied description appended to MCP instructions.built-in
FASTMCP_ENABLE_RICH_LOGGINGNoSet to false for plain/structured JSON log output.true
PAPERLESS_MCP_PAPERLESS_URLYesBase URL of the Paperless-NGX REST API (no trailing slash).
PAPERLESS_MCP_EVENT_STORE_URLNoEvent store backend for HTTP session persistence.memory://
PAPERLESS_MCP_DEFAULT_PAGE_SIZENoDefault page_size for list tools. Clamped [1, 100].25
PAPERLESS_MCP_HTTP_TIMEOUT_SECONDSNoPer-request HTTP timeout (seconds).30
PAPERLESS_MCP_PAPERLESS_PUBLIC_URLNoPublic-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_SECONDSNoTTL of URLs issued by create_download_link. Clamped [30, 3600].300

Capabilities

Features and capabilities supported by this server

CapabilityDetails
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

NameDescription
list_documentsA

List documents with optional filters. Returns one page.

By default, per-document OCR content is stripped to keep results small. Pass include_content=True for the full text on each hit.

notes[].note and custom_fields[].value are always stripped from listings regardless of include_content — the metadata refs (note ids, timestamps, custom-field ids) are retained so callers can detect presence, but to read the actual text use get_document (with include_content=True if needed) or get_document_notes.

search_documentsA

Full-text search documents.

By default per-hit OCR content is stripped; pass include_content=True to get full OCR text per hit. Use more_like for similarity search.

notes[].note and custom_fields[].value are always stripped from search hits regardless of include_content — fetch them via get_document or get_document_notes when needed.

get_documentA

Fetch one document by ID.

By default, the OCR content is stripped to keep responses small. Pass include_content=True for the full text, or call get_document_content to retrieve just the text.

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 content by default; pass include_content=True to get the full text back.

delete_documentC

Delete a document.

upload_documentA

Upload a document. Returns the task UUID for polling via get_task.

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.

extra_data depends on data_type:

  • string, longtext, integer, boolean, float, date, url, documentlink — unused; omit or pass null.

  • monetary — optional {"default_currency": "USD"} (ISO-4217).

  • selectextra_data required: {"select_options": [{"label": "Low"}, {"label": "Medium"}]}. Paperless assigns each option a stable id on creation.

Unknown shapes are rejected by Paperless with a 400.

update_custom_fieldA

Patch selected fields on a custom field definition.

extra_data shape depends on data_type:

  • monetary — optional {"default_currency": "USD"} (ISO-4217).

  • selectextra_data.select_options replaces the current list wholesale. To preserve existing values, include each existing option with its server-assigned id: {"select_options": [{"id": "abc", "label": "Low"}, ...]}. Omitting an option's id creates a new option; dropping an option from the list deletes it and any document values referencing it.

See create_custom_field for the full extra_data shape table.

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 include_acknowledged=True or acknowledged=True to see acknowledged ones). Returns one page.

get_taskA

Fetch a task by UUID. Returns None if no such task exists.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
config_resourceReturn server configuration as JSON.
stats_resourceReturn Paperless-NGX document statistics as JSON.
remote_version_resourceReturn the remote Paperless-NGX version as JSON.
tags_resourceReturn all tags as a JSON array.
correspondents_resourceReturn all correspondents as a JSON array.
document_types_resourceReturn all document types as a JSON array.
custom_fields_resourceReturn all custom fields as a JSON array.
storage_paths_resourceReturn all storage paths as a JSON array.
saved_views_resourceReturn all saved views as a JSON array.
tasks_resourceReturn Paperless-NGX tasks (first page, unacknowledged) as a JSON array.

Latest Blog Posts

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