Paperless MCP for Cursor
io.github.pvliesdonk/paperless-mcp
Paperless-NGX over MCP: search, read, upload and tag documents; manage correspondents and types.
client:Cursor
transport:stdio
runtime:pypi
Install Paperless MCP in Cursor
~/.cursor/mcp.json · windows: %USERPROFILE%\.cursor\mcp.json
{
"mcpServers": {
"paperless-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"pvliesdonk-paperless-mcp"
],
"env": {
"PAPERLESS_MCP_KV_STORE_URL": "<PAPERLESS_MCP_KV_STORE_URL>",
"PAPERLESS_MCP_TOOLS_ALLOW": "<PAPERLESS_MCP_TOOLS_ALLOW>",
"PAPERLESS_MCP_TOOLS_DENY": "<PAPERLESS_MCP_TOOLS_DENY>",
"PAPERLESS_MCP_SERVER_NAME": "<PAPERLESS_MCP_SERVER_NAME>",
"PAPERLESS_MCP_INSTANCE_DESCRIPTION": "<PAPERLESS_MCP_INSTANCE_DESCRIPTION>",
"PAPERLESS_MCP_INSTRUCTIONS_EXTRA": "<PAPERLESS_MCP_INSTRUCTIONS_EXTRA>",
"PAPERLESS_MCP_INSTRUCTIONS": "<PAPERLESS_MCP_INSTRUCTIONS>",
"PAPERLESS_MCP_LOG_LEVEL": "<PAPERLESS_MCP_LOG_LEVEL>",
"PAPERLESS_MCP_LOG_FORMAT": "<PAPERLESS_MCP_LOG_FORMAT>",
"PAPERLESS_MCP_PAPERLESS_URL": "<PAPERLESS_MCP_PAPERLESS_URL>",
"PAPERLESS_MCP_API_TOKEN": "<PAPERLESS_MCP_API_TOKEN>",
"PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS": "<PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS>",
"PAPERLESS_MCP_HTTP_RETRIES": "<PAPERLESS_MCP_HTTP_RETRIES>",
"PAPERLESS_MCP_DEFAULT_PAGE_SIZE": "<PAPERLESS_MCP_DEFAULT_PAGE_SIZE>",
"PAPERLESS_MCP_PAPERLESS_PUBLIC_URL": "<PAPERLESS_MCP_PAPERLESS_PUBLIC_URL>",
"PAPERLESS_MCP_TRANSFER_TTL_DEFAULT_S": "<PAPERLESS_MCP_TRANSFER_TTL_DEFAULT_S>",
"PAPERLESS_MCP_TRANSFER_TTL_MAX_S": "<PAPERLESS_MCP_TRANSFER_TTL_MAX_S>",
"PAPERLESS_MCP_TRANSFER_GRACE_TTL_S": "<PAPERLESS_MCP_TRANSFER_GRACE_TTL_S>",
"PAPERLESS_MCP_TRANSFER_LEASE_S": "<PAPERLESS_MCP_TRANSFER_LEASE_S>",
"PAPERLESS_MCP_TRANSFER_MAX_UPLOAD_BYTES": "<PAPERLESS_MCP_TRANSFER_MAX_UPLOAD_BYTES>"
}
}
}
}
Use .cursor/mcp.json in a project root instead to scope it to that project. Cursor merges both. Cursor docs