Paperless MCP配置与使用教程
io.github.pvliesdonk/paperless-mcp · v3.0.0
Paperless-NGX over MCP: search, read, upload and tag documents; manage correspondents and types.
建议先在本页复制安装配置,再到上游核对文档与权限。
产品介绍
Paperless-NGX over MCP: search, read, upload and tag documents; manage correspondents and types. Paperless MCP 是一个MCP Server,收录自 官方 MCP Registry。支持 stdio、streamable-http 传输。本页提供产品介绍、配置教程、安装命令与适用场景,支持 Trae、通义灵码、Cursor、Claude Code、VS Code 等。
适用场景
AgentHub Verified 可用性验证技术测试通过
自动化测试流水线已校验安装命令、传输协议与客户端兼容性
按平台快速复制
选择你的平台查看安装方式
- 打开项目根目录下的 .cursor/mcp.json(没有就新建)
- 点击「复制配置」粘贴进去;若已有其他 MCP,只合并 mcpServers 里的本条目
- 将 env 中的 <占位符> 替换为真实密钥(见下方「环境变量」)
- 保存后按 Cmd+Shift+P(Windows:Ctrl+Shift+P)→ 输入 Reload Window 并执行
预填环境变量与密钥(可选)
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
]
}
}
}配置教程
- 打开 Paperless MCP 详情页,确认这是你需要的 MCP Server(来源 官方 MCP Registry)。
- 按客户端选择 Trae、通义灵码、Cursor、Claude Code 或 VS Code,复制 JSON 配置或 CLI 命令。
- 将配置合并进 mcpServers,并把环境变量占位符替换为真实密钥。
- 重载窗口后,在 Agent 对话中调用该 MCP 提供的工具。
安装命令
以下安装命令与配置步骤已写入页面 HTML,搜索引擎与未启用 JavaScript 的浏览器均可直接读取。
Claude Code(本地)
- 确保已安装 Claude Code CLI
- 复制下方命令,将 <占位符> 替换为真实环境变量值后,在终端执行
- 若下方列出了环境变量,请对照填写
claude mcp add paperless-mcp -- uvx pvliesdonk-paperless-mcpCursor — .cursor/mcp.json(本地)
- 打开项目根目录下的 .cursor/mcp.json(没有就新建)
- 点击「复制配置」粘贴进去;若已有其他 MCP,只合并 mcpServers 里的本条目
- 将 env 中的 <占位符> 替换为真实密钥(见下方「环境变量」)
- 保存后按 Cmd+Shift+P(Windows:Ctrl+Shift+P)→ 输入 Reload Window 并执行
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
]
}
}
}VS Code — .vscode/mcp.json(本地)
- 确保 VS Code 已安装 GitHub Copilot 扩展并支持 MCP
- 打开项目根目录下的 .vscode/mcp.json(没有就新建)
- 点击「复制配置」粘贴;若已有其他 MCP,只合并 mcpServers 里的本条目
- 将 env 中的 <占位符> 替换为真实密钥(见下方「环境变量」)
- 保存后重新加载 VS Code 窗口
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
]
}
}
}Claude Desktop — claude_desktop_config.json(本地)
- 打开 Claude Desktop 的 claude_desktop_config.json(路径见远程指引)
- 点击「复制配置」合并到 mcpServers
- 将 env 中的 <占位符> 替换为真实密钥
- 完全退出并重启 Claude Desktop
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
]
}
}
}Trae — .trae/mcp.json(本地)
- 打开 Trae → 设置 → MCP,或编辑 .trae/mcp.json / 全局 mcp.json
- 点击「复制配置」粘贴并合并 mcpServers
- 将 env 中的 <占位符> 替换为真实密钥
- 保存后重载 Trae 窗口
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
]
}
}
}Cherry Studio — MCP 设置(本地)
- 打开 Cherry Studio → 设置 → MCP 服务器 → 添加(STDIO)
- 也可直接导入下方 JSON:点击「复制配置」合并到 mcpServers
- 将 env 中的 <占位符> 替换为真实密钥,并确保本机已安装 Node.js / uv(npx、uvx)
- 启用服务并查看工具列表是否加载成功
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
]
}
}
}通义灵码 — MCP 配置(本地)
- 通义灵码:个人设置 → MCP 服务 → 「+」→ 手工添加(STDIO)或配置文件添加
- 点击「复制配置」合并 mcpServers;命令/参数/环境变量与 JSON 一致
- 将 env 中的 <占位符> 替换为真实密钥;本机需 Node.js 18+(npx)或已安装 uv(uvx)
- 确认服务状态为已连接后再在智能体对话中调用
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
]
}
}
}Windsurf — mcp_config.json(本地)
- 编辑 ~/.codeium/windsurf/mcp_config.json
- 点击「复制配置」合并 mcpServers(本地 stdio 与 Cursor 格式相同)
- 将 env 中的 <占位符> 替换为真实密钥后保存并刷新 Cascade
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
]
}
}
}Cline — MCP Servers(本地)
- Cline 面板 → 设置 → MCP Servers
- 点击「复制配置」粘贴并合并
- 将 env 中的 <占位符> 替换为真实密钥后保存
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
]
}
}
}WorkBuddy — .workbuddy/mcp.json(本地)
- 编辑 ~/.workbuddy/mcp.json(用户级)或项目目录 .workbuddy/mcp.json
- 也可在界面:插件 → MCP 服务器 → 配置 MCP,粘贴下方 JSON
- 将 env 中的 <占位符> 替换为真实密钥;Windows 下 command/脚本路径建议用绝对路径
- 保存并重启 WorkBuddy,确认连接器状态为绿色
{
"mcpServers": {
"paperless-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
]
}
}
}常见报错排查与运行避坑 (Troubleshooting)FAQ
针对 Paperless MCP 在 Cursor、Claude Code 中的常见连接错误与解决办法
在 Cursor / Claude Code 中配置 Paperless MCP 提示 connection closed 或 exit code 1?
通常由本地运行时环境缺失或命令路径未被 IDE 继承引起。排查步骤: 1. 确认已安装 Node.js 18+(支持 npx)或 Python 3.10+(支持 uvx); 2. 尝试在终端运行 which npx 或 which uvx,把配置文件中的 "command" 字段改为完整绝对路径; 3. 修改 mcp.json 后,必须完全重载或重启客户端窗口。
# 终端测试命令是否存在: which npx node -v
提示 spawn npx ENOENT 或 command not found?
这是因为编辑器后台进程未加载完整的终端环境变量(PATH)。解决方案:在全局安装该包(如 npm install -g 包名),或在配置文件中将 command 设置为系统的实际路径(如 Windows 下的 C:\Program Files\nodejs\npx.cmd,Mac 下的 /usr/local/bin/npx)。
提示 Missing required environment variable 或 API 认证失败?
Paperless MCP 依赖环境变量(如 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、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、PAPERLESS_MCP_TRANSFER_MAX_UPLOAD_BYTES、PAPERLESS_MCP_SHUTDOWN_GRACE_S、PAPERLESS_MCP_BASE_URL、PAPERLESS_MCP_BEARER_TOKEN、PAPERLESS_MCP_OIDC_CONFIG_URL、PAPERLESS_MCP_OIDC_CLIENT_ID、PAPERLESS_MCP_OIDC_CLIENT_SECRET、PAPERLESS_MCP_OIDC_AUDIENCE、PAPERLESS_MCP_OIDC_REQUIRED_SCOPES、PAPERLESS_MCP_OIDC_ADVERTISED_SCOPES、PAPERLESS_MCP_OIDC_JWT_SIGNING_KEY、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、PAPERLESS_MCP_INSTANCE_DESCRIPTION、PAPERLESS_MCP_INSTRUCTIONS_EXTRA、PAPERLESS_MCP_INSTRUCTIONS、PAPERLESS_MCP_HTTP_PATH、PAPERLESS_MCP_HEALTH_DETAIL、PUID、PGID、PAPERLESS_MCP_LOG_LEVEL、PAPERLESS_MCP_LOG_FORMAT、PAPERLESS_MCP_PAPERLESS_URL、PAPERLESS_MCP_API_TOKEN、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、PAPERLESS_MCP_TRANSFER_MAX_UPLOAD_BYTES)。请在客户端配置文件的 "env" 对象中填入有效密钥,注意不要包含多余空格或未闭合的双引号。
// .cursor/mcp.json 或 claude_desktop_config.json
{
"env": {
"API_KEY": "your_actual_key_here"
}
}免安装模拟调用 (Playground)
仿真环境Paperless MCP 核心接口调用仿真 · 无需配置本地环境,直接预览调用参数与返回格式
{
"target": "Paperless MCP",
"action": "execute",
"options": {
"mode": "standard",
"timeoutMs": 5000
}
}点击上方「模拟运行」按钮
查看该工具在 Agent 内部的返回数据格式
选型与决策建议(为什么选它?)
帮助你快速判断该资源是否契合当前项目,避免盲目折腾
- PR 自动审查
- 生成 changelog
- 跨仓库 Issue 检索
- 替代人工安全审计
- 在无授权仓库上操作
Paperless MCP + 对应场景 Prompt → 组成标准 Agent 自动化任务
MCP 实战教程:从安装到看见效果
按完整实例走一遍(含期望效果与对比验收)。装完本页资源后,用教程里的提示词核对是否真正生效。
相关资源
顺序思考
io.mcp-cn.modelcontextprotocol/server-sequential-thinking
帮助AI进行结构化思考和推理的MCP工具
n8n
io.mcp-cn.drballs/n8n-mcp-server
n8n工作流自动化平台的MCP服务器,提供完整的工作流管理、执行控制、凭证管理等功能
Playwright
io.mcp-cn.playwright/mcp
基于Playwright的自动化测试和网页操作MCP工具
GitHub
io.mcp-cn.modelcontextprotocol/server-github
连接GitHub的MCP服务器,支持仓库管理、问题跟踪、代码搜索等功能
高德地图
io.mcp-cn.amap/amap-maps-mcp-server
高德地图的MCP服务器
Figma
io.mcp-cn.figma-developer-mcp
连接Figma的MCP服务器,支持设计文件管理和操作
常搭配使用
基于文件的规划
v3.23.0
io.clawhub.othmanadi/planning-with-files
面向多步 AI Agent 工作的持久化文件规划。将 task_plan.md、findings.md 与 progress.md 保存在磁盘上,生命周期钩子注入所选的项目规划上下文;自动恢复仅读取项目规划文件,显式运行 session-catchup.py --input-file 时读取同项目的本地 Agent……(原文截断)
OpenClaw 指挥中心
v1.5.0
io.clawhub.jontsai/command-center
OpenClaw 任务控制台仪表盘——实时会话监控、LLM 用量跟踪、成本情报与系统生命体征。在一处查看你所有的 AI Age……(原文截断)
ClawCall 语音电话
v2.0.1
io.clawhub.clawcall-dev/clawcall-dev
当用户需要 AI Agent 拨打美国电话、呼叫商家、处理通话等待或语音菜单、完成确认/改期/取消/预订/跟进/查询……时使用本技能(原文截断)。
中文公文写作
v2.0.25
io.clawhub.gongyu0918-debug/chinese-official-writing
用于中文公文、事务性材料和新闻稿件的起草、改写、压缩、润色、审校、文种核对、去口语化、降 AI 味及 Word 格式处理,适用于机关、企事业单位、学校和新闻机构。涵盖申请、请示、报告、通知、通告、意见、决定、决议、议案、公报、命令、函、复函、批复、说明、方案、纪要、公告、公示、通报、制度、规定、办法、细则、操作规程、工作要点、总结、调研、讲话、致辞、主持词、述职、可研、审查材料、技术需求、新闻消息、编者按、新闻评论,以及采购、整改、反馈和 AI 算力等场景。
继续逛 AgentHub
大多数人安装前还会对比同类工具或看场景方案——下面这些能帮你少走弯路。
收录徽章:把 AgentHub 挂到你的官网
复制下面任意一段代码到项目主页、官网或 GitHub README。徽章是 SVG 热链,无需上传文件,链接指向本页,访客可由此直接找到安装方式。
<a href="https://myagenthub.cn/p/io.github.pvliesdonk/paperless-mcp" title="AgentHub 已收录:Paperless MCP" target="_blank" rel="noopener">
<img src="https://myagenthub.cn/badge/io.github.pvliesdonk/paperless-mcp" alt="AgentHub 已收录:Paperless MCP" height="20" style="border:0"/>
</a>[](https://myagenthub.cn/p/io.github.pvliesdonk/paperless-mcp)徽章由 /badge/<资源ID> 动态生成,名称与收录状态变化后自动更新;请保留链接指向,它是收录来源的判定依据。
统一 Manifest
{
"id": "io.github.pvliesdonk/paperless-mcp",
"type": "mcp-server",
"version": "3.0.0",
"displayName": "Paperless MCP",
"description": "Paperless-NGX over MCP: search, read, upload and tag documents; manage correspondents and types.",
"repository": {
"url": "https://github.com/pvliesdonk/paperless-mcp",
"source": "github"
},
"homepage": "https://pvliesdonk.github.io/paperless-mcp/",
"distribution": {
"packages": [
{
"registryType": "pypi",
"identifier": "pvliesdonk-paperless-mcp",
"version": "3.0.0",
"runtimeHint": "uvx",
"transport": "stdio",
"environmentVariables": [
{
"name": "PAPERLESS_MCP_KV_STORE_URL",
"description": "Persistent-state backend URL shared by every pvl-core subsystem that needs state. `memory://` is in-process and lost on restart; `file:///path` persists on one server; `redis://`, `dynamodb://` and `mongodb://` each need their matching extra. When unset, defaults to `file:///data/state` (the volume family Docker images mount), or to `memory://` (with a warning) on a host where that directory is not usable."
},
{
"name": "PAPERLESS_MCP_TOOLS_ALLOW",
"description": "Comma-separated explicit tool names this instance exposes; every other tool is hidden from listings and cannot be invoked. Names matching no registered tool are inert. Mutually exclusive with `tools_deny`. Takes effect through `apply_tool_visibility`."
},
{
"name": "PAPERLESS_MCP_TOOLS_DENY",
"description": "Comma-separated explicit tool names hidden from this instance (absent from listings, cannot be invoked). Names matching no registered tool are inert. Mutually exclusive with `tools_allow`. Takes effect through `apply_tool_visibility`."
},
{
"name": "PAPERLESS_MCP_SERVER_NAME",
"description": "Rename this server instance; defaults to the project name."
},
{
"name": "PAPERLESS_MCP_INSTANCE_DESCRIPTION",
"description": "Concise routing context that distinguishes this deployment's material or responsibility."
},
{
"name": "PAPERLESS_MCP_INSTRUCTIONS_EXTRA",
"description": "Deployment-specific behavioral policy added to the generated MCP instructions."
},
{
"name": "PAPERLESS_MCP_INSTRUCTIONS",
"description": "Legacy: replaces all generated MCP instructions (deprecated; use _INSTANCE_DESCRIPTION for routing and _INSTRUCTIONS_EXTRA for policy)."
},
{
"name": "PAPERLESS_MCP_LOG_LEVEL",
"description": "Log level for every logger in the process, FastMCP's included (DEBUG / INFO / WARNING / ERROR / CRITICAL). The -v CLI flag overrides to DEBUG. The unprefixed FASTMCP_LOG_LEVEL still works for one major version and logs a deprecation warning."
},
{
"name": "PAPERLESS_MCP_LOG_FORMAT",
"description": "Log rendering. rich is one colour event key=value line per record, for a terminal; json is one JSON object per record, for a collector. Unset picks rich when stderr is a terminal and json everywhere else, so a container or journald gets JSON with no configuration."
},
{
"name": "PAPERLESS_MCP_PAPERLESS_URL",
"description": "Base URL of the Paperless-NGX REST API, without a trailing slash. The server refuses to start without it."
},
{
"name": "PAPERLESS_MCP_API_TOKEN",
"description": "Paperless service-account token used for outbound API requests. The server refuses to start without it.",
"isSecret": true
},
{
"name": "PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS",
"description": "Per-request HTTP timeout in seconds."
},
{
"name": "PAPERLESS_MCP_HTTP_RETRIES",
"description": "Retries for idempotent requests after network errors or 5xx responses."
},
{
"name": "PAPERLESS_MCP_DEFAULT_PAGE_SIZE",
"description": "Default page size for list tools, from 1 through 100."
},
{
"name": "PAPERLESS_MCP_PAPERLESS_PUBLIC_URL",
"description": "Public Paperless UI URL for user-visible links; defaults to PAPERLESS_URL."
},
{
"name": "PAPERLESS_MCP_TRANSFER_TTL_DEFAULT_S",
"description": "Link lifetime in seconds when the caller requests no explicit TTL."
},
{
"name": "PAPERLESS_MCP_TRANSFER_TTL_MAX_S",
"description": "Ceiling in seconds a caller-requested link TTL is clamped to."
},
{
"name": "PAPERLESS_MCP_TRANSFER_GRACE_TTL_S",
"description": "Post-success grace window in seconds: a served token's TTL shrinks to this so a stalled transfer can retry within it."
},
{
"name": "PAPERLESS_MCP_TRANSFER_LEASE_S",
"description": "Crashed-handler reclaim window in seconds for an in-flight reservation."
},
{
"name": "PAPERLESS_MCP_TRANSFER_MAX_UPLOAD_BYTES",
"description": "Maximum size in bytes of a single upload."
}
]
},
{
"registryType": "oci",
"identifier": "ghcr.io/pvliesdonk/paperless-mcp:v3.0.0",
"transport": "streamable-http",
"environmentVariables": [
{
"name": "PAPERLESS_MCP_SHUTDOWN_GRACE_S",
"description": "Seconds SIGTERM may spend draining in-flight requests before the HTTP server exits. Keep it at or below the termination grace period the orchestrator allows. `0` drops in-flight requests immediately."
},
{
"name": "PAPERLESS_MCP_BASE_URL",
"description": "Public base URL of the deployed server, for example `https://mcp.example.com`. Required for OIDC. Also the fallback source of the MCP Apps domain when `app_domain` is unset."
},
{
"name": "PAPERLESS_MCP_BEARER_TOKEN",
"description": "Single shared bearer token; enables bearer auth unless `bearer_tokens_file` is set, which takes precedence.",
"isSecret": true
},
{
"name": "PAPERLESS_MCP_OIDC_CONFIG_URL",
"description": "OIDC discovery document URL, for example `https://auth.example.com/.well-known/openid-configuration`."
},
{
"name": "PAPERLESS_MCP_OIDC_CLIENT_ID",
"description": "OIDC client identifier registered with the provider."
},
{
"name": "PAPERLESS_MCP_OIDC_CLIENT_SECRET",
"description": "OIDC client secret registered with the provider.",
"isSecret": true
},
{
"name": "PAPERLESS_MCP_OIDC_AUDIENCE",
"description": "Expected `aud` claim; tokens issued for another audience are rejected."
},
{
"name": "PAPERLESS_MCP_OIDC_REQUIRED_SCOPES",
"description": "Scopes a caller must present, space- or comma-separated. Defaults to `openid` in oidc-proxy mode."
},
{
"name": "PAPERLESS_MCP_OIDC_ADVERTISED_SCOPES",
"description": "Scopes advertised to MCP clients in protected-resource metadata, space- or comma-separated. Overrides the default `openid offline_access`; `oidc_required_scopes` is always added on top. Set this when the registered client is not permitted `offline_access`, or to have clients request extra claim scopes (such as `groups`) without also requiring them in every token."
},
{
"name": "PAPERLESS_MCP_OIDC_JWT_SIGNING_KEY",
"description": "Signing key for issued tokens; used in oidc-proxy mode only. When unset, the key is derived deterministically from `oidc_client_secret`, so tokens survive a restart. Rotating that secret then invalidates every issued token. Set this explicitly to decouple token validity from secret rotation. Generate with `openssl rand -hex 32`.",
"isSecret": true
},
{
"name": "PAPERLESS_MCP_OIDC_VERIFY_ACCESS_TOKEN",
"description": "Validate the access token instead of the id token."
},
{
"name": "PAPERLESS_MCP_KV_STORE_URL",
"description": "Persistent-state backend URL shared by every pvl-core subsystem that needs state. `memory://` is in-process and lost on restart; `file:///path` persists on one server; `redis://`, `dynamodb://` and `mongodb://` each need their matching extra. When unset, defaults to `file:///data/state` (the volume family Docker images mount), or to `memory://` (with a warning) on a host where that directory is not usable."
},
{
"name": "PAPERLESS_MCP_APP_DOMAIN",
"description": "MCP Apps iframe domain, used for CSP sandboxing. Overrides the host derived from `base_url`."
},
{
"name": "PAPERLESS_MCP_TOOLS_ALLOW",
"description": "Comma-separated explicit tool names this instance exposes; every other tool is hidden from listings and cannot be invoked. Names matching no registered tool are inert. Mutually exclusive with `tools_deny`. Takes effect through `apply_tool_visibility`."
},
{
"name": "PAPERLESS_MCP_TOOLS_DENY",
"description": "Comma-separated explicit tool names hidden from this instance (absent from listings, cannot be invoked). Names matching no registered tool are inert. Mutually exclusive with `tools_allow`. Takes effect through `apply_tool_visibility`."
},
{
"name": "PAPERLESS_MCP_AUTH_MODE",
"description": "Explicit auth-mode override, accepting `remote` or `oidc-proxy` (case- and whitespace-insensitive). When unset the mode is auto-detected from which auth variables are set; the override exists because having all four OIDC variables set is ambiguous between those two modes. Other values are ignored with a warning."
},
{
"name": "PAPERLESS_MCP_BEARER_TOKENS_FILE",
"description": "Path to a TOML file mapping bearer tokens to subjects; overrides the single-token `bearer_token` mode."
},
{
"name": "PAPERLESS_MCP_BEARER_DEFAULT_SUBJECT",
"description": "Subject assigned to the single-token bearer mode; ignored when `bearer_tokens_file` is set, since mapped mode carries per-token subjects."
},
{
"name": "PAPERLESS_MCP_SERVER_NAME",
"description": "Rename this server instance; defaults to the project name."
},
{
"name": "PAPERLESS_MCP_INSTANCE_DESCRIPTION",
"description": "Concise routing context that distinguishes this deployment's material or responsibility."
},
{
"name": "PAPERLESS_MCP_INSTRUCTIONS_EXTRA",
"description": "Deployment-specific behavioral policy added to the generated MCP instructions."
},
{
"name": "PAPERLESS_MCP_INSTRUCTIONS",
"description": "Legacy: replaces all generated MCP instructions (deprecated; use _INSTANCE_DESCRIPTION for routing and _INSTRUCTIONS_EXTRA for policy)."
},
{
"name": "PAPERLESS_MCP_HTTP_PATH",
"description": "Mount path for the MCP endpoint; the health routes derive their prefix from it."
},
{
"name": "PAPERLESS_MCP_HEALTH_DETAIL",
"description": "How much the unauthenticated /health and /health/ready bodies say: status, standard (adds name, version and per-check verdicts), or full (adds redacted reasons; trusted networks only)."
},
{
"name": "PUID",
"description": "Run the server process as this UID; the container entrypoint reassigns ownership of writable paths to match."
},
{
"name": "PGID",
"description": "Run the server process as this GID; pair with PUID to match the owner of a mounted volume."
},
{
"name": "PAPERLESS_MCP_LOG_LEVEL",
"description": "Log level for every logger in the process, FastMCP's included (DEBUG / INFO / WARNING / ERROR / CRITICAL). The -v CLI flag overrides to DEBUG. The unprefixed FASTMCP_LOG_LEVEL still works for one major version and logs a deprecation warning."
},
{
"name": "PAPERLESS_MCP_LOG_FORMAT",
"description": "Log rendering. rich is one colour event key=value line per record, for a terminal; json is one JSON object per record, for a collector. Unset picks rich when stderr is a terminal and json everywhere else, so a container or journald gets JSON with no configuration."
},
{
"name": "PAPERLESS_MCP_PAPERLESS_URL",
"description": "Base URL of the Paperless-NGX REST API, without a trailing slash. The server refuses to start without it."
},
{
"name": "PAPERLESS_MCP_API_TOKEN",
"description": "Paperless service-account token used for outbound API requests. The server refuses to start without it.",
"isSecret": true
},
{
"name": "PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS",
"description": "Per-request HTTP timeout in seconds."
},
{
"name": "PAPERLESS_MCP_HTTP_RETRIES",
"description": "Retries for idempotent requests after network errors or 5xx responses."
},
{
"name": "PAPERLESS_MCP_DEFAULT_PAGE_SIZE",
"description": "Default page size for list tools, from 1 through 100."
},
{
"name": "PAPERLESS_MCP_PAPERLESS_PUBLIC_URL",
"description": "Public Paperless UI URL for user-visible links; defaults to PAPERLESS_URL."
},
{
"name": "PAPERLESS_MCP_TRANSFER_TTL_DEFAULT_S",
"description": "Link lifetime in seconds when the caller requests no explicit TTL."
},
{
"name": "PAPERLESS_MCP_TRANSFER_TTL_MAX_S",
"description": "Ceiling in seconds a caller-requested link TTL is clamped to."
},
{
"name": "PAPERLESS_MCP_TRANSFER_GRACE_TTL_S",
"description": "Post-success grace window in seconds: a served token's TTL shrinks to this so a stalled transfer can retry within it."
},
{
"name": "PAPERLESS_MCP_TRANSFER_LEASE_S",
"description": "Crashed-handler reclaim window in seconds for an in-flight reservation."
},
{
"name": "PAPERLESS_MCP_TRANSFER_MAX_UPLOAD_BYTES",
"description": "Maximum size in bytes of a single upload."
}
]
}
],
"remotes": []
},
"dependencies": [],
"installTargets": [
"claude-code",
"claude-desktop",
"cursor",
"vscode",
"trae",
"cherry-studio",
"lingma",
"windsurf",
"cline",
"workbuddy"
],
"keywords": [],
"provenance": {
"origin": "official-mcp-registry",
"originalId": "io.github.pvliesdonk/paperless-mcp",
"originalUrl": "https://registry.modelcontextprotocol.io/v0.1/servers/io.github.pvliesdonk%2Fpaperless-mcp/versions/latest",
"isOfficial": true,
"status": "active"
}
}