Skip to main content
Glama
tobee89

mcp-paperless-ngx


Construido contra la API REST versión 10, con tres cosas que hace de forma diferente:

  • Cobertura justificada. Cada uno de los 92 endpoints documentados está expuesto como herramienta o aparece en src/tools/coverage.ts con una razón escrita para excluirlo. Una prueba lo verifica, de modo que una versión de Paperless que añada un endpoint haga fallar la CI en lugar de quedar silenciosamente sin soporte.

  • Disciplina de tokens. Un documento de Paperless lleva su texto OCR completo. Los envoltorios ingenuos lo devuelven por defecto y una sola búsqueda puede agotar el contexto del modelo. Aquí, los resultados de las listas se recortan en el servidor mediante ?fields=, el texto vive detrás de su propia herramienta paginada, y ningún endpoint de lista pasa la respuesta cruda de la API — una prueba lo verifica. Véase Coste de contexto.

  • Superficie limitada. 99 herramientas ahogarían la lista de herramientas de un modelo. Los conjuntos de herramientas permiten exponer solo lo que un cliente concreto necesita, y --read-only elimina por completo cualquier vía de escritura.

Paperless-ngx 2.x no es compatible: la versión 10 de la API introdujo endpoints (etiquetas anidadas, versiones de documentos, share_link_bundles, las operaciones de división de PDF) que este servidor asume que existen.

Inicio rápido

npx -y mcp-paperless-ngx --check   # verify connectivity, then exit

Claude Code

claude mcp add paperless --scope user \
  --env PAPERLESS_URL=https://paperless.example.com \
  --env PAPERLESS_TOKEN=your-api-token \
  -- npx -y mcp-paperless-ngx

Claude Desktop, Cursor, Cline y otros clientes MCP

{
  "mcpServers": {
    "paperless": {
      "command": "npx",
      "args": ["-y", "mcp-paperless-ngx"],
      "env": {
        "PAPERLESS_URL": "https://paperless.example.com",
        "PAPERLESS_TOKEN": "your-api-token"
      }
    }
  }
}

Obtener un token de API

Interfaz web de Paperless → tu nombre de usuario (arriba a la derecha) → Mi perfil → el botón de flecha circular junto al campo del token de API.

Related MCP server: paperlessngx-mcp

Configuración

Variable

Obligatoria

Valor por defecto

Propósito

PAPERLESS_URL

URL base con la que habla el servidor.

PAPERLESS_TOKEN

Token de API. PAPERLESS_API_KEY también funciona.

PAPERLESS_PUBLIC_URL

no

PAPERLESS_URL

URL utilizada al construir enlaces para el usuario, si la instancia es accesible desde fuera con un nombre diferente.

PAPERLESS_TOOLSETS

no

ver más abajo

Conjuntos de herramientas separados por comas, o all.

PAPERLESS_READ_ONLY

no

false

Expone solo las herramientas que no pueden cambiar nada.

PAPERLESS_HEADERS

no

Cabeceras de petición adicionales, como JSON ({"X-Auth":"…"}) o Nombre: valor, Nombre: valor. Necesarias detrás de proxies de autenticación directa como Authentik o Authelia.

PAPERLESS_DOWNLOAD_DIR

no

temp del sistema

Dónde se escriben los archivos descargados.

PAPERLESS_MAX_PAGE_SIZE

no

100

Límite máximo de tamaños de página en las listas, sea cual sea lo que pida el modelo.

PAPERLESS_TIMEOUT_MS

no

60000

Tiempo de espera de las peticiones.

PAPERLESS_API_VERSION

no

10

Versión de la API REST enviada en la cabecera Accept.

Los indicadores de línea de comandos --url, --token, --public-url, --toolsets y --read-only anulan el entorno. --check verifica la conectividad, --list-tools imprime las herramientas habilitadas.

Conjuntos de herramientas

Conjunto de herramientas

Por defecto

Contenido

documents

activado

Buscar, leer, actualizar, eliminar, subir, descargar, notas, operaciones masivas y de PDF

metadata

activado

Etiquetas, remitentes, tipos de documento, rutas de almacenamiento

customfields

activado

Definiciones de campos personalizados

views

activado

Vistas guardadas

sharing

activado

Enlaces de compartición y paquetes de enlaces de compartición

workflows

activado

Reglas de automatización, disparadores, acciones

system

activado

Búsqueda global, estadísticas, estado, tareas, papelera

mail

desactivado

Cuentas IMAP, reglas de correo, correo procesado

admin

desactivado

Usuarios, grupos, perfil, configuración, registros (solo lectura)

mail y admin están desactivados por defecto porque la mayoría de las sesiones nunca los necesitan y cada herramienta extra cuesta contexto en cada petición. Actívalos explícitamente:

PAPERLESS_TOOLSETS=documents,metadata,system,mail
PAPERLESS_TOOLSETS=all

Coste de contexto

Envolver una API para un modelo de lenguaje tiene un coste que la propia API no tiene: todo lo que el modelo ve se paga en cada petición. Dos lugares donde eso afecta, y qué hace este servidor al respecto.

Respuestas. Tres formas son caras en Paperless y fáciles de devolver por accidente:

Fuente

Problema

Manejo

Listas de documentos

Cada documento lleva su texto OCR completo en content

?fields= restringe la respuesta en el servidor; get_document_content pagina el texto por separado

/api/search/

Devuelve objetos Document completos, con texto OCR incluido, en todos los tipos de objetos

Los documentos se resumen, los demás tipos se reducen a id + nombre

Flujos de trabajo, reglas de correo, grupos, tareas

27–34 campos por objeto, definiciones de disparador/acción anidadas en línea

Resumidos a campos identificativos; las listas anidadas se colapsan en recuentos. full: true lo devuelve todo

Definiciones de herramientas. Son el coste más grande y menos evidente: nombres, descripciones y esquemas JSON viajan con cada petición, se llame o no a alguna herramienta.

Conjuntos de herramientas

Herramientas

Coste aproximado por petición

all

99

~20 500 tokens

por defecto

85

~18 500 tokens

documents,metadata

49

~12 900 tokens

No hay forma de que eso sea gratis — es el precio de una herramienta que el modelo puede usar sin adivinar. Pero merece la pena ser deliberado: si tus sesiones solo buscan y archivan documentos, ejecutar PAPERLESS_TOOLSETS=documents,metadata ahorra más contexto que cualquier recorte de respuestas.

Seguridad

El servidor expone operaciones destructivas, porque un gestor de documentos sin ellas no es gran cosa. No intenta adivinar cuándo son apropiadas — ese juicio pertenece al cliente y al usuario. Lo que sí hace:

  • Las herramientas destructivas están anotadas con destructiveHint: true, para que los clientes MCP puedan exigir confirmación.

  • Las descripciones de las herramientas indican claramente lo que no se puede deshacer (empty_trash, delete_custom_field, delete_originals) y piden confirmación antes de la llamada.

  • --read-only elimina toda herramienta de escritura de la lista, en lugar de rechazarlas en el momento de la llamada.

  • Los endpoints masivos admiten un modo "aplicar a todo lo que coincida con este filtro". Este servidor no lo expone: las herramientas masivas aceptan listas explícitas de IDs, de modo que un filtro erróneo no pueda afectar silenciosamente a todo el archivo.

  • create_share_link produce una URL accesible públicamente. Su descripción lo indica, y el prompt audit_sharing existe para revisar lo que ya está expuesto.

Los endpoints relacionados con credenciales (generación de tokens, registro de TOTP, desactivación del segundo factor de alguien) se excluyen deliberadamente. Véase EXCLUDED_ENDPOINTS para la lista completa y el razonamiento.

Prompts

Registrados como comandos de barra en los clientes que admiten prompts MCP:

Prompt

Qué hace

triage_inbox

Recorre los documentos sin clasificar, propone metadatos prefiriendo las entradas existentes, no aplica nada hasta que el usuario lo aprueba.

find_document

Localiza un documento a partir de una descripción vaga, buscando de forma barata antes de buscar de forma amplia.

audit_sharing

Revisa todos los enlaces de compartición públicos y señala los que nunca caducan.

Pruebas

Tres capas, porque detectan cosas diferentes:

npm test                                        # logic — no network
PAPERLESS_URL=… PAPERLESS_TOKEN=… \
  node scripts/smoke-test.mjs                   # all 55 read-only tools, live
PAPERLESS_URL=… PAPERLESS_TOKEN=… \
  node scripts/write-test.mjs                   # writes, live — see the warning

npm test comprueba el razonamiento propio de este servidor: cobertura de endpoints, valores de enumeración contra el esquema, que ninguna herramienta de listas filtre objetos crudos de la API, que el modo de solo lectura elimine realmente las escrituras.

smoke-test.mjs comprueba las suposiciones que hace sobre Paperless. Llama a todas las herramientas de solo lectura contra una instancia real, resolviendo los IDs a partir de llamadas de listas en lugar de codificarlos, e imprime los tamaños de las respuestas para que las herramientas caras sigan siendo visibles. No escribe nada.

write-test.mjs cubre el resto: subida y consumo, actualización de cada tipo de campo, notas, ediciones masivas de etiquetas, enlaces de compartición, rotación y un ciclo de ida y vuelta con la papelera.

Solo toca los objetos que crea él mismo. Todo lo que crea lleva el prefijo zz-mcp-test y se elimina de nuevo al final, y nunca modifica un documento que no haya subido. Si una ejecución se interrumpe, los restos con ese prefijo son seguros de eliminar. Prefiere una instancia de prueba si tienes una.

Mantenerse al día con Paperless

PAPERLESS_URL=… PAPERLESS_TOKEN=… node scripts/sync-schema.mjs
npm test

sync-schema.mjs regenera schema/endpoints.json a partir del documento OpenAPI de tu propia instancia. El conjunto de pruebas informa entonces de cualquier endpoint que no esté ni expuesto ni excluido explícitamente. Ese es todo el bucle de mantenimiento: apúntalo a una versión más reciente de Paperless y la prueba te dirá qué ha cambiado.

Desarrollo

npm install
npm start          # run from source
npm run build      # compile to build/
npm test           # unit tests + coverage checks
npm run inspect    # build, then open the MCP inspector

Trabajo previo

Ya existen varios servidores MCP para Paperless, sobre todo cubinet-code/paperless-ngx-mcp, y también nloui/paperless-mcp y barryw/PaperlessMCP. Están dirigidos a la API 2.x. Si usas Paperless-ngx 2.x, usa uno de esos; este asume 3.x.

Licencia

MIT. Ver LICENSE.


A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
2Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    C
    quality
    A
    maintenance
    An MCP (Model Context Protocol) server for interacting with a Paperless-NGX API server. This server provides tools for managing documents, tags, correspondents, and document types in your Paperless-NGX instance.
    23
    363
    137
    TypeScript
    ISC
  • F
    license
    A
    quality
    B
    maintenance
    A privacy-first MCP server for Paperless-ngx that lets an LLM agent search, organize, tag, and reference documents without exposing full text unless explicitly requested.
    13
  • A
    license
    Not graded
    quality
    A
    maintenance
    A read-only and write MCP server for Paperless-ngx, enabling document listing, metadata retrieval, and creation of tags, correspondents, document types, and sorting workflows via natural language.
    MIT

View all related MCP servers

Related MCP Connectors

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.

  • MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tobee89/mcp-paperless-ngx'

If you have feedback or need assistance with the MCP directory API, please join our Discord server