Paperless-ngx MCP Server
Allows interaction with a Paperless-ngx document archive, providing tools for searching documents by OCR text and metadata, reading OCR content and notes, downloading original or archived PDFs, updating document metadata and tags, uploading new documents, listing tags/correspondents/document types, and retrieving archive statistics.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Paperless-ngx MCP Serversearch for invoices from Acme Corp received last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Paperless-ngx MCP Server
A Model Context Protocol (MCP) server that connects AI assistants (such as Claude Desktop, Cursor, and other MCP clients) to a Paperless-ngx document archive.
Features
Full-Text & Metadata Search: Search through documents using OCR text, tags, correspondents, document types, and date ranges.
OCR Content Inspection: Read full OCR text, metadata, and custom notes for any document.
Document Download: Save original or archived PDF versions to local storage.
Metadata Management: View reference collections (tags, correspondents, document types) and update document properties.
Document Upload: Upload local files into Paperless with automatic background OCR processing.
Archive Statistics: Retrieve instant counts of documents, tags, correspondents, and types.
Related MCP server: Paperless-NGX MCP Server
Tools Reference
Tool | Parameters | Description |
|
| Search documents with filters and text query |
|
| Get document metadata and OCR content |
|
| Download original file or archive PDF to disk |
| — | List all tags with item counts |
| — | List all correspondents with item counts |
| — | List all document types with item counts |
| — | Summary of counts across the archive |
|
| Update metadata and assign/remove tags |
|
| Upload a new file with metadata |
Configuration
The server requires the following environment variables:
Variable | Description | Example |
| Base URL of the Paperless-ngx instance |
|
| Paperless API authentication token |
|
| (Optional) Path where downloaded documents will be saved |
|
Installation & Setup
For detailed installation instructions, see SETUP.md.
Quick Start (Claude Desktop Config)
Add the server to your claude_desktop_config.json:
{
"mcpServers": {
"paperless": {
"command": "python",
"args": ["/path/to/src/server.py"],
"env": {
"PAPERLESS_URL": "http://localhost:8000",
"PAPERLESS_TOKEN": "your_api_token_here",
"PAPERLESS_DOWNLOAD_DIR": "/path/to/downloads"
}
}
}
}Or run via uv:
{
"mcpServers": {
"paperless": {
"command": "uv",
"args": ["run", "--directory", "/path/to/mcp-paperless", "src/server.py"],
"env": {
"PAPERLESS_URL": "http://localhost:8000",
"PAPERLESS_TOKEN": "your_api_token_here",
"PAPERLESS_DOWNLOAD_DIR": "/path/to/downloads"
}
}
}
}Helper Script
A PowerShell helper script paperless-api.ps1 is provided for quick CLI interaction and testing:
# Get archive summary
.\paperless-api.ps1 -Token "your_token"
# Query documents
.\paperless-api.ps1 -Token "your_token" -Endpoint "documents/?page_size=5"
# Export all tags to JSON
.\paperless-api.ps1 -Token "your_token" -Endpoint "tags/" -All -OutFile tags.jsonPackaging as MCP Bundle (.mcpb)
To build the desktop bundle:
Compress-Archive -Path manifest.json,pyproject.toml,src -DestinationPath paperless-ngx.zip -Force
Move-Item paperless-ngx.zip paperless-ngx.mcpb -ForceLicense
This project is licensed under the MIT License - see the LICENSE file for details.
Available Tools
9 toolsdownload_documentB
Download document file to local disk.
original True for original uploaded file, False for archived PDF version save_as Full target path; defaults to PAPERLESS_DOWNLOAD_DIR
| Name | Required | Description | Default |
|---|---|---|---|
| save_as | No | ||
| original | No | ||
| document_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full behavioral burden, but it only states the action and destination. It does not disclose side effects, file overwrite behavior, directory creation, authentication requirements, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the main action, and the parameter notes are formatted clearly without redundancy. Every line adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple download tool, the description covers the essential parameters and destination behavior, but it lacks usage guidance, return/output expectations, and behavioral notes beyond the basic action. It is adequate for straightforward invocation but leaves gaps for an agent navigating sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description compensates by explaining 'original' as the choice between original upload and archived PDF, and 'save_as' as a full path defaulting to PAPERLESS_DOWNLOAD_DIR. document_id is not described, but its meaning is self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action as 'Download document file to local disk' with a specific verb and resource, making the core purpose obvious. It doesn't explicitly differentiate from the sibling 'get_document', but the download-to-disk framing is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_document or search_documents. It states what the tool does but offers no context about which scenarios call for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentC
Retrieve document metadata and extracted OCR text by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | ||
| include_content | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavior. It states that metadata and OCR text are retrieved, implying a read operation, but it does not disclose the effect of include_content, failure behavior, response shape, or whether this is a safe side-effect-free operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. It is concise and readable, though slightly under-specified given the include_content parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description leaves meaningful gaps: the semantics of include_content, what the returned metadata contains, and any error conditions. It is minimally viable for a simple get-by-ID tool but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. 'By ID' hints at document_id's role, but include_content is not explained at all; the description does not clarify that include_content likely controls whether the OCR text is returned, nor does it describe expected formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and names the resource ('document metadata and extracted OCR text') and the key selector ('by ID'). This clearly states what the tool does, though it does not explicitly distinguish it from sibling like download_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' implies this tool is for fetching a specific document rather than searching or listing, so usage context is inferable. However, it does not explicitly mention when to use this tool instead of alternatives such as search_documents or download_document.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_correspondentsA
List all correspondents with document counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It clearly indicates that the operation lists correspondents and includes document counts, and the verb 'List' implies a read-only operation. However, it does not disclose caveats such as whether correspondents with zero documents appear, pagination, or ordering behavior. These are minor for a simple parameterless list, but the description is still minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. Every element—'all', 'correspondents', and 'document counts'—adds meaningful scope and result information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema is present, the description is largely complete for invoking the tool. The only notable absence is usage-selection guidance relative to sibling tools like stats or search_documents, which is covered separately but slightly weakens overall context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty input schema, so seedescription cannot add parameter-level detail. Per the baseline for parameterless tools, the description is sufficient because there are no arguments to explain or disambiguate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List') and resource ('all correspondents') and adds a distinctive detail ('with document counts') that separates it from sibling list tools like list_tags and list_document_types. An agent can immediately understand what this tool returns and who it is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool instead of related tools such as stats, search_documents, or list_tags. There is no when-to-use or when-not-to-use context, so the agent must infer selection from the tool name and basic wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_document_typesA
List all document types with document counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only listing operation and mentions the count detail, but doesn't explicitly state that the operation is non-destructive, requires no authentication, or has performance implications. For a simple list tool, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. The action and context are immediate, and the output detail is included efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and an output schema present (as indicated), the description is sufficient for an agent to invoke the tool correctly. It includes the key output characteristic (document counts) and requires no additional explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100% by definition. The description adds no parameter details because there are none to add. Per rubric, zero parameters yields a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb 'List' and a specific resource 'document types', with an output qualifier ('with document counts'). This clearly distinguishes it from sibling list tools like list_tags and list_correspondents by the entity type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description's specificity about document types makes the intended use clear, and the sibling names provide implicit alternatives. However, it doesn't explicitly state when to choose this over list_tags or list_correspondents, or any conditions to avoid using it. Lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsA
List all tags with document counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. 'List' implies a read-only operation and 'with document counts' discloses the return content, but it does not mention ordering, pagination, or performance characteristics. This is adequate for a simple list tool but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single precise sentence that communicates the operation and the included information (document counts) without waste. It is front-loaded and immediately understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter signature, the presence of an output schema, and the simple read-only nature, the description adequately covers the tool's purpose and expected return value. An agent can select and invoke this tool correctly based on the provided description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema description coverage is 100%, so there is no parameter burden. The description logically adds no parameter detail because none exist. The baseline of 4 for zero-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and a specific resource 'tags', and clarifies it includes document counts. It is clearly distinct from sibling tools like list_correspondents and list_document_types because it explicitly names the tag resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: whenever a complete list of tags with their document counts is needed. It does not explicitly state exclusions or alternatives, but the resource-specific wording gives reasonable context for a simple read-only listing operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_documentsA
Search documents in Paperless.
query Full-text search query across content and title tags List of tag names (document must have all specified tags) correspondent Correspondent name document_type Document type name created_after Date YYYY-MM-DD, strictly after created_before Date YYYY-MM-DD, strictly before limit Maximum number of records to return
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| query | No | ||
| correspondent | No | ||
| created_after | No | ||
| document_type | No | ||
| created_before | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does add real semantics: query is full-text across content and title, tags are ANDed ('must have all specified tags'), date filters are strictly after/before, and limit caps the result set. It does not mention response format, sorting, or what happens when filters are combined, but the provided behavioral details are meaningfully beyond generic search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with a one-sentence purpose followed by a parameter table with no wasted lines. The line-by-line format is functional and parseable, though it reads more like schema documentation than a narrative tool description, so it is not a perfect model of structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description thoroughly covers parameter semantics for a 7-parameter, no-output-schema, no-annotation tool, but it does not explain return values, result ordering, or how multiple filter types interact. Given the lack of an output schema, an agent still has meaningful gaps about what this tool will actually return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero descriptions (0% coverage), so the description must compensate fully. It does: every parameter is explained with practical semantics—query scope, tag matching, correspondent/document_type names, strict date forms, and limit meaning. This is exemplary compensation for an underspecified schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence 'Search documents in Paperless' states a specific verb and resource, making the core purpose clear. However, it does not differentiate itself from siblings like get_document or list_tags; the agent must infer that this is for full-text/filtered search rather than single-document retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and opening sentence: use this to search documents. There is no explicit when-to-use, when-not-to-use, or mention of alternatives among the sibling tools, so the guidance relies on inference rather than clear routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsA
Archive summary: counts of documents, tags, correspondents, types, and storage paths.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It correctly implies a read-only summary operation, but it does not explain whether counts apply to the entire archive, whether any scoping exists, or what the response shape is. This is adequate but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that names the resource and all counted categories. There is no filler, and every word contributes useful meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description is largely complete: it enumerates what counts are included and indicates an archive-wide summary. Since there is no output schema, it could have described the return structure more explicitly, but the simplicity of the tool limits the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so no parameter documentation is needed. The baseline of 4 applies, and the description does not need to compensate for missing schema detail because there are no inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates the resource (archive) and content (counts of documents, tags, correspondents, types, and storage paths). It distinguishes itself from sibling tools like list_tags and list_correspondents by emphasizing counts rather than full listings, though it lacks an explicit verb like 'returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: this is the tool for aggregate counts rather than detailed listings. However, there is no explicit guidance about when to choose stats over list_tags, list_correspondents, or search_documents, and no mention of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_documentA
Update document title, correspondent, type, and tags.
correspondent / document_type — name or ID; empty string "" clears the field. add_tags / remove_tags — lists of tag names. create_missing — whether to create missing tags/correspondents/types automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| add_tags | No | ||
| document_id | Yes | ||
| remove_tags | No | ||
| correspondent | No | ||
| document_type | No | ||
| create_missing | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It explains how empty strings clear fields, that tags use names vs IDs depending on parameter, and how create_missing affects behavior. This goes beyond the schema and gives agents important operational details, though it doesn't address permissions, reversibility, or partial update semantics explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose, followed by a compact list of parameter notes. Each note earns its place; formatting is scannable. Minor deduction for not using explicit markdown headers or bullet symbols, but the structure is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters and no output schema or annotations, the description covers the most operationally critical details: how identifiers work, how clearing works, and create_missing semantics. It doesn't state return value behavior, which is the main gap, but the update semantics are well enough specified for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the bare schema. It explains the meaning of correspondent/document_type, add_tags/remove_tags, and create_missing, including the clearing behavior and name/ID flexibility. This adds significant value over parameter names and types, though it doesn't fully describe all edge cases for every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates a document's title, correspondent, type, and tags, with specific verbs and target resources. It distinguishes this from siblings like get_document, download_document, and search_documents by focusing on mutation of existing document metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for updating document metadata but does not explicitly state when to use it versus upload_document or list_tags. It does not provide exclusions or alternatives, but the mutation intent is clear enough for an agent to infer typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_documentA
Upload a file to Paperless.
file_path Local path to PDF/image on this machine created Document date YYYY-MM-DD Returns task ID — processing and OCR run asynchronously in the background.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | No | ||
| created | No | ||
| file_path | Yes | ||
| correspondent | No | ||
| document_type | No | ||
| create_missing | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It reveals the asynchronous behavior, OCR processing, and the fact that the return value is a task ID. It does not mention error cases, file size limits, or whether the upload is immediately searchable, but the core behavioral trait is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the main purpose, then provides the most important parameter detail and the async return behavior. It wastes no words, though the omitted parameter documentation prevents a perfect score because some of the compactness comes at the expense of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the return value and async behavior but does not cover five of seven parameters. Since there is no output schema and no annotations, the description is the only source of context, and its incomplete parameter coverage leaves an agent uncertain about optional metadata fields and the create_missing behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents only file_path and created, adding useful meaning for those two parameters, but leaves tags, title, correspondent, document_type, and create_missing completely unexplained beyond their raw schema names and defaults. This is a significant gap for a 7-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Upload a file to Paperless.' It also specifies that the tool returns a task ID and that processing/OCR are asynchronous, which immediately distinguishes it from the sibling search, retrieval, listing, and update tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context clearly: use this tool to ingest a local PDF/image file into Paperless. It explains that processing runs in the background, so callers know to expect a task ID rather than an immediate document result. It does not explicitly name alternatives or exclusions, but the unique upload function among siblings makes the intended use apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools target distinct actions or resources, but stats and the list_* tools both report counts for tags, correspondents, and types, which could cause some ambiguity. search/get/download/update/upload are clearly separated.
Eight tools follow a consistent verb_noun pattern such as search_documents, get_document, list_tags, and upload_document. The exception is 'stats', which breaks the pattern and would be clearer as get_stats or get_summary.
Nine tools is well-scoped for a document management server: search, retrieve, download, upload, update, reference-data listers, and a stats summary. Each tool earns its place without feeling redundant.
Core document operations are covered, including upload, search, get, download, and update, but there is no delete_document and no way to poll the async task ID returned by upload_document. Reference-data creation is only implicitly handled through update_document's create_missing flag.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Ingest, manage, and retrieve documents for RAG-powered AI applications
Academic literature search, retrieval, and private library management on top of OpenAlex.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables interaction with Paperless-NGX API servers, supporting document management, tagging, and metadata operations through a natural language interface.115227ISC
- AlicenseNot gradedqualityDmaintenanceEnables managing Paperless-NGX documents, tags, correspondents, and document types via natural language. Supports document searching, downloading, uploading, and bulk editing.115ISC
- AlicenseNot gradedqualityDmaintenanceEnables Claude AI to interact with Paperless-NGX document management through natural language, offering 50 tools for full CRUD operations and management.122MIT
- FlicenseNot gradedqualityBmaintenanceEnables interaction with a paperless-ngx document management system through MCP tools, allowing document search, retrieval, upload, and metadata management via natural language.
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/NamerekWASD/mcp-paperless'
If you have feedback or need assistance with the MCP directory API, please join our Discord server