Skip to content
VS Code

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

Paperless MCP in other clients