Productivity · Local MCP server
Paperless MCP
Paperless-NGX over MCP: search, read, upload and tag documents; manage correspondents and types.
What the MCP Registry states
The entry as published to the official MCP Registry (read 2026-10-04), latest version.
- Registry name
io.github.pvliesdonk/paperless-mcp- Version
- 3.0.0
- Status
- Active
- Category
- productivity
- Transport
- stdio (local process), Streamable HTTP
- Package
- PyPI, OCI image (Docker)
- Published
- 2026-09-21
- Updated
- 2026-09-21
- Publisher
- pvliesdonk (GitHub) · 3 servers with pages here
- Website
- pvliesdonk.github.io/paperless-mcp/
- Repository
- github.com/pvliesdonk/paperless-mcp
- Source
- Registry API entry
Packages
| Registry | Package | Version | Transport |
|---|---|---|---|
| PyPIruntime: uvx | pvliesdonk-paperless-mcp | 3.0.0 | stdio |
| OCI image (Docker) | ghcr.io/pvliesdonk/paperless-mcp:v3.0.0 | — | HTTP |
How to connect Paperless MCP
Paperless MCP runs locally from a Python package published to PyPI: pvliesdonk-paperless-mcp version 3.0.0. It speaks MCP over stdio, so the client starts it as a program and talks to it through standard input and output. It needs Python; clients usually start it with uvx (from uv) or after pip install — the usual command is uvx pvliesdonk-paperless-mcp. It reads these environment variables: PAPERLESS_MCP_KV_STORE_URL, PAPERLESS_MCP_TOOLS_ALLOW, PAPERLESS_MCP_TOOLS_DENY, PAPERLESS_MCP_SERVER_NAME, PAPERLESS_MCP_INSTANCE_DESCRIPTION, PAPERLESS_MCP_INSTRUCTIONS_EXTRA, PAPERLESS_MCP_INSTRUCTIONS, PAPERLESS_MCP_LOG_LEVEL, PAPERLESS_MCP_LOG_FORMAT, PAPERLESS_MCP_PAPERLESS_URL, PAPERLESS_MCP_API_TOKEN (secret), PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS, PAPERLESS_MCP_HTTP_RETRIES, PAPERLESS_MCP_DEFAULT_PAGE_SIZE, PAPERLESS_MCP_PAPERLESS_PUBLIC_URL, PAPERLESS_MCP_TRANSFER_TTL_DEFAULT_S, PAPERLESS_MCP_TRANSFER_TTL_MAX_S, PAPERLESS_MCP_TRANSFER_GRACE_TTL_S, PAPERLESS_MCP_TRANSFER_LEASE_S and PAPERLESS_MCP_TRANSFER_MAX_UPLOAD_BYTES; set them in the client's configuration for this server.
Paperless MCP runs locally from a container image in an OCI registry such as Docker Hub or GitHub Container Registry: ghcr.io/pvliesdonk/paperless-mcp:v3.0.0. The package starts a local server that speaks MCP over Streamable HTTP; the client then connects to it by URL. It reads these environment variables: PAPERLESS_MCP_SHUTDOWN_GRACE_S, PAPERLESS_MCP_BASE_URL, PAPERLESS_MCP_BEARER_TOKEN (secret), PAPERLESS_MCP_OIDC_CONFIG_URL, PAPERLESS_MCP_OIDC_CLIENT_ID, PAPERLESS_MCP_OIDC_CLIENT_SECRET (secret), PAPERLESS_MCP_OIDC_AUDIENCE, PAPERLESS_MCP_OIDC_REQUIRED_SCOPES, PAPERLESS_MCP_OIDC_ADVERTISED_SCOPES, PAPERLESS_MCP_OIDC_JWT_SIGNING_KEY (secret), PAPERLESS_MCP_OIDC_VERIFY_ACCESS_TOKEN, PAPERLESS_MCP_KV_STORE_URL, PAPERLESS_MCP_APP_DOMAIN, PAPERLESS_MCP_TOOLS_ALLOW, PAPERLESS_MCP_TOOLS_DENY, PAPERLESS_MCP_AUTH_MODE, PAPERLESS_MCP_BEARER_TOKENS_FILE, PAPERLESS_MCP_BEARER_DEFAULT_SUBJECT, PAPERLESS_MCP_SERVER_NAME and PAPERLESS_MCP_INSTANCE_DESCRIPTION; set them in the client's configuration for this server.
In the mcpServers JSON format that many desktop and editor MCP clients read, the entry looks like this (placeholders in angle brackets):
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
],
"env": {
"PAPERLESS_MCP_KV_STORE_URL": "<value>",
"PAPERLESS_MCP_TOOLS_ALLOW": "<value>",
"PAPERLESS_MCP_TOOLS_DENY": "<value>",
"PAPERLESS_MCP_SERVER_NAME": "<value>",
"PAPERLESS_MCP_INSTANCE_DESCRIPTION": "<value>",
"PAPERLESS_MCP_INSTRUCTIONS_EXTRA": "<value>",
"PAPERLESS_MCP_INSTRUCTIONS": "<value>",
"PAPERLESS_MCP_LOG_LEVEL": "<value>",
"PAPERLESS_MCP_LOG_FORMAT": "<value>",
"PAPERLESS_MCP_PAPERLESS_URL": "<value>",
"PAPERLESS_MCP_API_TOKEN": "<secret>",
"PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS": "<value>",
"PAPERLESS_MCP_HTTP_RETRIES": "<value>",
"PAPERLESS_MCP_DEFAULT_PAGE_SIZE": "<value>",
"PAPERLESS_MCP_PAPERLESS_PUBLIC_URL": "<value>",
"PAPERLESS_MCP_TRANSFER_TTL_DEFAULT_S": "<value>",
"PAPERLESS_MCP_TRANSFER_TTL_MAX_S": "<value>",
"PAPERLESS_MCP_TRANSFER_GRACE_TTL_S": "<value>",
"PAPERLESS_MCP_TRANSFER_LEASE_S": "<value>",
"PAPERLESS_MCP_TRANSFER_MAX_UPLOAD_BYTES": "<value>"
}
}
}
}Derived from the registry entry, not tested here. What the server does, and on what terms, is set by its publisher; check its repository or website before giving it access to your accounts or files. How to add an MCP server to an assistant · Before you connect
More from pvliesdonk (GitHub)
| Server | Runs |
|---|---|
| Logo.dev MCPLook up company logos and brand data via the logo.dev API. | Local · stdio, HTTP |
| Scholar MCPFastMCP server for scholarly papers, patents, books and standards with docling PDF conversion. | Local · stdio, HTTP |
More productivity servers
| Server | Runs |
|---|---|
| PalisadeMonitor and manage email authentication (SPF, DKIM, DMARC, MTA-STS, BIMI) for your domains. | Remote & Local · HTTP, stdio |
| Pallas Athena ToolsAthenahealth DataView, API, and workflow tools for Claude Code with learning loop. | Local · stdio |
| PandaDoc MCPEvery PandaDoc endpoint, plus an offline document pipeline no other PandaDoc tool has - stalled. | Local · stdio |
| pandanpc.comRemote-control Claude Code, plus PandaNote notes, AI model configs & scheduled tasks. | Local · stdio |
| Paperless-ngxFull Paperless-ngx API for AI assistants: search, tag, edit and upload documents, workflows and more. | Local · stdio |
| PaperOffice AIDocument AI and headless DMS: OCR, IDP, search, workflows, signatures. EU-hosted, OAuth 2.1. | Remote · HTTP |
| PaperSprocketEU-hosted HTML-to-PDF rendering for agents and MCP clients. Temporary document processing. | Local · stdio |
| ParabolStart Parabol retrospectives, standups and sprint poker; read teams/meetings/tasks; create tasks. | Remote · HTTP |