Skip to main content
Glama
pvliesdonk
by pvliesdonk

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

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
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_documentsA

List documents with optional filters. Returns one page.

Per-document OCR content is stripped to keep results small. Use get_document_content for a bounded preview of one result.

notes[].note and custom_fields[].value are always stripped from listings. The metadata refs (note ids, timestamps, custom-field ids) are retained so callers can detect presence; use get_document or get_document_notes to read those values.

search_documentsA

Full-text search documents.

Per-hit OCR content is stripped. Use get_document_content for a bounded preview of one hit. Use more_like for similarity search.

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

get_documentA

Fetch one document by ID.

OCR content is stripped to keep responses small. Call get_document_content for a bounded preview, or use create_download_link with the content variant when available.

get_document_contentA

Return the OCR'd text content of a document.

Documents such as books and technical standards can run to millions of characters, so each call is capped at 20,000. A partial result opens with a marker naming the character range returned, the document's full length, and the offset to pass to read the next section; text that fits under the cap is returned whole with no marker.

get_document_thumbnailB

Return the document's thumbnail as inline image content.

get_document_metadataB

Return technical metadata for a document (checksums, filenames, etc.).

get_document_notesB

Return notes attached to a document.

get_document_historyB

Return the audit history for a document.

get_document_suggestionsB

Return Paperless's classifier suggestions for a document.

update_documentA

Patch selected fields on a document.

The response strips OCR content. Use get_document_content or a transfer link when the updated text is needed.

delete_documentD

Delete a document.

upload_documentB

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

bulk_edit_documentsA

Apply a bulk operation to a set of documents.

Paperless writes the change before answering OK, then queues the search-index rebuild as a background task. A following search_documents call can therefore miss the edited documents for seconds to minutes, while list_documents and get_document reflect the change at once. Metadata operations queue a bulk_update task: find it with list_tasks(task_type="bulk_update") and wait_for_task on its task_id to wait for full-text search to catch up.

add_document_noteC

Append a note to a document.

delete_document_noteB

Remove a note from a document.

list_tagsD

List tags.

get_tagA

Fetch a tag by ID.

create_tagC

Create a new tag.

update_tagB

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.

Each row's last_correspondence is the date of the correspondent's newest document, or null when it has none; ordering accepts it.

get_correspondentA

Fetch a correspondent by ID.

create_correspondentD

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_typeB

Fetch a document type by ID.

create_document_typeC

Create a new document type.

update_document_typeC

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_fieldA

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).

  • select — extra_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).

  • select — extra_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. A patch without extra_data, such as a rename, keeps the current options: the server reads them and sends them back with their ids.

See create_custom_field for the full extra_data shape table.

delete_custom_fieldC

Delete a custom field.

list_storage_pathsD

List storage paths.

get_storage_pathA

Fetch a storage path by ID.

list_saved_viewsB

List saved views.

Visibility flags are null when payload v10 omits those preferences.

get_saved_viewA

Fetch a saved view by ID.

Visibility flags are null when payload v10 omits those preferences.

list_share_linksB

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, newest first.

Pass task_type to filter by the kind of work — "bulk_update" is the search-index rebuild that bulk_edit_documents queues, so that tool's deferred indexing can be waited on with wait_for_task. Version 10 adds task_type, trigger_source, structured result_data, related_document_ids and timing fields. Statuses retain their uppercase spelling. Legacy task_name, type, result and related_document remain compatibility projections; use the v10 fields for full detail.

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

Check whether a newer release of Paperless-NGX exists upstream.

Answers the newest release published on GitHub, and whether it is newer than the connected instance -- not the version installed on that instance. The two coincide only while the instance is up to date. Call get_server_info for the installed version.

get_server_infoA

Report wrapper and upstream version info for paperless-mcp. Returns server_name, server_version, core_version (fastmcp-pvl-core), and (when configured) an upstream version block. Useful for verifying a deployment matches the expected build.

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 newest release of Paperless-NGX published upstream. An update check, not an identity one: the newest release Paperless read from GitHub and whether it is newer than the connected instance -- not the version installed on that instance, which ``get_server_info`` reports.
tags_resourceReturn all tags as a JSON array.
correspondents_resourceReturn all correspondents as a JSON array. Each entry carries ``last_correspondence``, the date of the newest document, or null when it has none.
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.

TDQS

C2.8/5.0

Scored across 50 tools

Disambiguation4/5

Tools are grouped clearly by resource and action, so get_document, get_document_content, get_document_metadata, and get_document_notes are easy to distinguish despite all targeting a document by ID. The only mild overlap is list_documents versus search_documents, though their descriptions explain the metadata-filter vs full-text distinction.

Naming Consistency4/5

The set overwhelmingly follows a snake_case verb_noun pattern with predictable singular/plural forms: list_*, get_*, create_*, update_*, delete_*, bulk_edit_*. Minor deviations like add_document_note versus get_document_notes and upload_document instead of create_document are understandable but break the otherwise consistent pattern.

Tool Count2/5

50 tools is a very large surface for an agent to select from, even though Paperless has many resource types. Several resource groups are only read-only (storage paths, saved views, share links), which makes the high count feel heavier than necessary.

Completeness3/5

Documents, correspondents, tags, document types, and custom fields have solid CRUD coverage, and document retrieval/search is thorough. However, storage paths, saved views, and share links expose only list/get operations, and share-link creation is referenced but not present as a tool, leaving notable lifecycle gaps.

Maintenance

ActivityActive
ResponsivenessResponsive