Paperless MCP for VS Code
io.github.pvliesdonk/paperless-mcp
Paperless-NGX over MCP: search, read, upload and tag documents; manage correspondents and types.
client:VS Code
transport:stdio
runtime:pypi
Install Paperless MCP in VS Code
.vscode/mcp.json
{
"inputs": [
{
"type": "promptString",
"id": "paperless-mcp-kv-store-url",
"description": "PAPERLESS_MCP_KV_STORE_URL",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-tools-allow",
"description": "PAPERLESS_MCP_TOOLS_ALLOW",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-tools-deny",
"description": "PAPERLESS_MCP_TOOLS_DENY",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-server-name",
"description": "PAPERLESS_MCP_SERVER_NAME",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-instance-description",
"description": "PAPERLESS_MCP_INSTANCE_DESCRIPTION",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-instructions-extra",
"description": "PAPERLESS_MCP_INSTRUCTIONS_EXTRA",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-instructions",
"description": "PAPERLESS_MCP_INSTRUCTIONS",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-log-level",
"description": "PAPERLESS_MCP_LOG_LEVEL",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-log-format",
"description": "PAPERLESS_MCP_LOG_FORMAT",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-paperless-url",
"description": "PAPERLESS_MCP_PAPERLESS_URL",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-api-token",
"description": "PAPERLESS_MCP_API_TOKEN",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-http-timeout-seconds",
"description": "PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-http-retries",
"description": "PAPERLESS_MCP_HTTP_RETRIES",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-default-page-size",
"description": "PAPERLESS_MCP_DEFAULT_PAGE_SIZE",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-paperless-public-url",
"description": "PAPERLESS_MCP_PAPERLESS_PUBLIC_URL",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-transfer-ttl-default-s",
"description": "PAPERLESS_MCP_TRANSFER_TTL_DEFAULT_S",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-transfer-ttl-max-s",
"description": "PAPERLESS_MCP_TRANSFER_TTL_MAX_S",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-transfer-grace-ttl-s",
"description": "PAPERLESS_MCP_TRANSFER_GRACE_TTL_S",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-transfer-lease-s",
"description": "PAPERLESS_MCP_TRANSFER_LEASE_S",
"password": true
},
{
"type": "promptString",
"id": "paperless-mcp-transfer-max-upload-bytes",
"description": "PAPERLESS_MCP_TRANSFER_MAX_UPLOAD_BYTES",
"password": true
}
],
"servers": {
"paperless-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
],
"env": {
"PAPERLESS_MCP_KV_STORE_URL": "${input:paperless-mcp-kv-store-url}",
"PAPERLESS_MCP_TOOLS_ALLOW": "${input:paperless-mcp-tools-allow}",
"PAPERLESS_MCP_TOOLS_DENY": "${input:paperless-mcp-tools-deny}",
"PAPERLESS_MCP_SERVER_NAME": "${input:paperless-mcp-server-name}",
"PAPERLESS_MCP_INSTANCE_DESCRIPTION": "${input:paperless-mcp-instance-description}",
"PAPERLESS_MCP_INSTRUCTIONS_EXTRA": "${input:paperless-mcp-instructions-extra}",
"PAPERLESS_MCP_INSTRUCTIONS": "${input:paperless-mcp-instructions}",
"PAPERLESS_MCP_LOG_LEVEL": "${input:paperless-mcp-log-level}",
"PAPERLESS_MCP_LOG_FORMAT": "${input:paperless-mcp-log-format}",
"PAPERLESS_MCP_PAPERLESS_URL": "${input:paperless-mcp-paperless-url}",
"PAPERLESS_MCP_API_TOKEN": "${input:paperless-mcp-api-token}",
"PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS": "${input:paperless-mcp-http-timeout-seconds}",
"PAPERLESS_MCP_HTTP_RETRIES": "${input:paperless-mcp-http-retries}",
"PAPERLESS_MCP_DEFAULT_PAGE_SIZE": "${input:paperless-mcp-default-page-size}",
"PAPERLESS_MCP_PAPERLESS_PUBLIC_URL": "${input:paperless-mcp-paperless-public-url}",
"PAPERLESS_MCP_TRANSFER_TTL_DEFAULT_S": "${input:paperless-mcp-transfer-ttl-default-s}",
"PAPERLESS_MCP_TRANSFER_TTL_MAX_S": "${input:paperless-mcp-transfer-ttl-max-s}",
"PAPERLESS_MCP_TRANSFER_GRACE_TTL_S": "${input:paperless-mcp-transfer-grace-ttl-s}",
"PAPERLESS_MCP_TRANSFER_LEASE_S": "${input:paperless-mcp-transfer-lease-s}",
"PAPERLESS_MCP_TRANSFER_MAX_UPLOAD_BYTES": "${input:paperless-mcp-transfer-max-upload-bytes}"
}
}
}
}
VS Code prompts for each input the first time the server starts, so no secret is written to the file. VS Code docs