Context7
Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.
Description from the maker (original English)
Full Paperless-ngx API for AI assistants: search, tag, edit and upload documents, workflows and more
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
PAPERLESS_URL, PAPERLESS_API_KEY, PAPERLESS_PUBLIC_URLValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"paperless-ngx": {
"command": "npx",
"args": [
"-y",
"paperless-ngx-mcp"
],
"env": {
"PAPERLESS_URL": "your-value",
"PAPERLESS_API_KEY": "your-value",
"PAPERLESS_PUBLIC_URL": "your-value"
}
}
}
}Run this in your terminal
claude mcp add paperless-ngx --env PAPERLESS_URL=your-value --env PAPERLESS_API_KEY=your-value --env PAPERLESS_PUBLIC_URL=your-value -- npx -y paperless-ngx-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"paperless-ngx": {
"command": "npx",
"args": [
"-y",
"paperless-ngx-mcp"
],
"env": {
"PAPERLESS_URL": "your-value",
"PAPERLESS_API_KEY": "your-value",
"PAPERLESS_PUBLIC_URL": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"paperless-ngx": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"paperless-ngx-mcp"
],
"env": {
"PAPERLESS_URL": "your-value",
"PAPERLESS_API_KEY": "your-value",
"PAPERLESS_PUBLIC_URL": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
PAPERLESS_PUBLIC_URL envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account cubinet-code, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: PAPERLESS_URL, PAPERLESS_API_KEY
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (3.2.1) reached the registry 37 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Context7, Codebase Memory, Exa
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
A Model Context Protocol server for Paperless-NGX. Exposes the full Paperless-NGX REST API to AI assistants — documents, tags, correspondents, document types, custom fields, storage paths, saved views, share links and bundles, workflows, mail accounts and rules, document versions, notes, trash, and tasks.
/api/schema/ against the tools here and fails when upstream adds one that is neither wrapped nor deliberately skipped.delete_* tool, empty_trash, merge_documents_as_versions and bulk delete require confirm: true; bulk edits across "all matching documents" refuse filters Paperless would silently ignore; and the triage_inbox prompt proposes changes and waits for your go-ahead before writing anything.list_*, get_*, delete_*, …) group into one permission wildcard each.npx, a Docker image, a one-click Claude Desktop extension, or the official MCP Registry.Targets Paperless-ngx 3.2 (tested against 3.2.1). Older Paperless versions are not supported — use paperless-ngx-mcp@3.1.1 for Paperless 2.x. The package major version tracks the Paperless-ngx major it targets; there are no 1.x or 2.x releases.
The server is published to npm as paperless-ngx-mcp. You can run it with npx — no clone or build required.
claude mcp add paperless --scope user \
--env PAPERLESS_URL=https://your-paperless-instance \ --env PAPERLESS_API_KEY=your-api-token \ -- npx -y paperless-ngx-mcp
Drop --scope user to install for the current project only. See claude mcp add --help for more options.
codex mcp add paperless \
--env PAPERLESS_URL=https://your-paperless-instance \ --env PAPERLESS_API_KEY=your-api-token \ -- npx -y paperless-ngx-mcp
This writes the entry to ~/.codex/config.toml.
Download paperless-ngx-mcp.mcpb from the latest release and double-click it, or install it from Settings → Extensions. Claude Desktop asks for your Paperless URL and API token.
The buttons install placeholder values; replace PAPERLESS_URL and PAPERLESS_API_KEY afterwards. Or add this to your client's MCP config file (e.g. claude_desktop_config.json, ~/.cursor/mcp.json, ~/.config/cline/mcp.json):
{
"mcpServers": { "paperless": { "command": "npx", "args": ["-y", "paperless-ngx-mcp"], "env": { "PAPERLESS_URL": "https://your-paperless-instance", "PAPERLESS_API_KEY": "your-api-token", "PAPERLESS_PUBLIC_URL": "https://your-public-domain" } } } }
A multi-arch image (amd64, arm64) is published to ghcr.io/cubinet-code/paperless-ngx-mcp. As a stdio server in any MCP client config:
{
"mcpServers": { "paperless": { "command": "docker", "args": ["run", "-i", "--rm", "-e", "PAPERLESS_URL", "-e", "PAPERLESS_API_KEY", "ghcr.io/cubinet-code/paperless-ngx-mcp"], "env": { "PAPERLESS_URL": "https://your-paperless-instance", "PAPERLESS_API_KEY": "your-api-token" } } } }
Or as a long-running Streamable HTTP server. It has no authentication, so keep it off untrusted networks:
docker run -d -p 127.0.0.1:3000:3000 \
-e PAPERLESS_URL=https://your-paperless-instance \ -e PAPERLESS_API_KEY=your-api-token \ ghcr.io/cubinet-code/paperless-ngx-mcp --http --port 3000
| Variable | Required | Purpose |
|---|---|---|
PAPERLESS_URL | yes | Base URL the MCP server uses to talk to Paperless-NGX. |
PAPERLESS_API_KEY | yes | API token (see above). |
PAPERLESS_PUBLIC_URL | no | Public URL the assistant uses when constructing browser links to documents. Falls back to PAPERLESS_URL. |
CLI flags (--baseUrl, --token, --publicUrl, --http, --port, plus the HTTP session limits) take precedence over environment variables.
Things you can ask Claude (or any MCP-aware assistant):
The server registers tools across twelve domains.
list_documents, get_document, get_document_content, search_documents, download_document, download_documents_bulk, get_document_thumbnail, get_document_preview, get_document_history, get_document_metadata, update_document, post_document, email_document, edit_documents_bulk, delete_document, search_autocomplete, get_document_suggestions, get_document_ai_suggestions, get_next_asn, upload_document_version, update_document_version, delete_document_version, merge_documents_as_versions
list_tags, get_tag, create_tag, update_tag, delete_tag, edit_tags_bulk
list_correspondents, get_correspondent, create_correspondent, update_correspondent, delete_correspondent, edit_correspondents_bulk
list_document_types, get_document_type, create_document_type, update_document_type, delete_document_type, edit_document_types_bulk
list_custom_fields, get_custom_field, create_custom_field, update_custom_field, delete_custom_field, edit_custom_fields_bulk
list_storage_paths, get_storage_path, create_storage_path, update_storage_path, delete_storage_path, test_storage_path
list_saved_views, get_saved_view, create_saved_view, update_saved_view, delete_saved_view
list_share_links, list_document_share_links, get_share_link, create_share_link, delete_share_link, list_share_link_bundles, get_share_link_bundle, create_share_link_bundle, rebuild_share_link_bundle, delete_share_link_bundle
list_workflows, get_workflow, create_workflow, update_workflow, delete_workflow, list_workflow_actions, get_workflow_action, create_workflow_action, update_workflow_action, delete_workflow_action, list_workflow_triggers, get_workflow_trigger, create_workflow_trigger, update_workflow_trigger, delete_workflow_trigger
list_mail_accounts, get_mail_account, create_mail_account, update_mail_account, delete_mail_account, test_mail_account, process_mail_account, list_mail_rules, get_mail_rule, create_mail_rule, update_mail_rule, delete_mail_rule
get_statistics, get_system_status, get_filing_options, list_document_notes, create_document_note, delete_document_note, list_trash, restore_from_trash, empty_trash, list_tasks, list_active_tasks, get_task_status_counts, get_task_summary, acknowledge_tasks
Tool names are verb-first, so wildcard-based permission rules group cleanly by operation:
| Wildcard | Covers |
|---|---|
mcp__paperless__list_* | All list/index reads |
mcp__paperless__get_* | All single-item reads |
mcp__paperless__search_* | Full-text search and autocomplete |
mcp__paperless__download_* | download_document and download_documents_bulk |
mcp__paperless__create_* | All create endpoints |
mcp__paperless__update_* | Per-item PATCH updates |
mcp__paperless__edit_*_bulk | All bulk-edit operations across entity types |
mcp__paperless__delete_* | ⚠️ Destructive — system-wide deletes |
mcp__paperless__test_* | Dry-run checks: test_storage_path, test_mail_account |
mcp__paperless__upload_* | upload_document_version |
mcp__paperless__rebuild_* | rebuild_share_link_bundle |
mcp__paperless__merge_* | ⚠️ merge_documents_as_versions — merged documents stop existing on their own |
mcp__paperless__process_* | process_mail_account — fetches mail now and runs its rules (which may delete or move mail on the server) |
A read-only allowlist is therefore: list_*, get_*, search_*, download_*, test_*. Write access without destructive operations: add create_*, update_*, edit_*_bulk, upload_*, rebuild_*, post_document, email_document, restore_from_trash, acknowledge_tasks. delete_*, merge_*, process_* and empty_trash should require explicit user approval.
The server also registers MCP prompts — reusable, parameterized instructions that surface as slash commands in clients like Claude Code (e.g. /mcp__paperless__triage_inbox).
triage_inboxWalks the assistant through inbox triage: gather existing tags / correspondents / document types, propose metadata for each inbox document preferring existing items, present a confirmation table, and only apply changes after the user replies apply. New correspondents / types / tags are flagged (NEW) so you can veto creations before they happen.
Argument:
limit (optional, default 25): maximum number of inbox documents to triage in one pass.edit_documents_bulkPerform bulk operations on multiple documents.
Parameters:
documents (array of IDs), or all: true + filters with optional excluded_documents.Only the beginning is shown; read the rest in the repo