Labsco
MCP SERVER

PaperlessMCP

by barryw

Full read and write access to a Paperless-ngx archive — search, upload, bulk-tag, custom fields — with deletes gated behind confirmation and bulk edits dry-run by default.

Document Conversion, PDF & Translation
Summary
The whole archive, with the destructive edge deliberately blunt.

Coverage is the headline — every entity, full CRUD — but the interesting design choice is the outbox. Exporting a document writes it to a shared volume and hands back a path, so a mail server on the other side of that volume can attach the file while the bytes never enter the conversation. Mount the volume into both containers or the export is unreachable outside the container that wrote it.

What it is

A server over the Paperless-ngx API covering every entity type in the archive: documents, tags, correspondents, document types, storage paths and custom fields. It exists so "tag all 2024 invoices" is one instruction rather than an afternoon in the web UI.

What you get
  • 43 tools in total, with full create-read-update-delete on every entity type
  • paperless_documents_search does full-text search with filters; paperless_documents_get returns one document with all its metadata
  • paperless_documents_upload takes base64 and paperless_documents_upload_from_path takes a file path; paperless_documents_reprocess re-runs OCR
  • paperless_documents_bulk_update edits many documents in one call — bulk operations default to dry-run
  • paperless_tags_create sets colour, matching rules and a hierarchical parent; paperless_tags_update can change or clear that parent
  • paperless_custom_fields_create defines your own metadata as string, date, number or monetary, and paperless_custom_fields_assign attaches a value to a document
  • paperless_documents_export_to_outbox writes a document's bytes to a shared directory and returns the path, so another tool can attach the file without the content passing through the model's context
  • paperless_ping and paperless_capabilities answer whether the connection and token actually work
Requirements

A Paperless-ngx instance and an API token from its Django admin, supplied as PAPERLESS_BASE_URL and PAPERLESS_API_TOKEN. The quickest route is the container at ghcr.io/barryw/paperlessmcp with Streamable HTTP on port 5000 at /mcp; from source it needs the .NET 10 SDK and runs with --stdio. HTTP_TIMEOUT_SECONDS defaults to 30 and is worth raising if large full-text searches time out.

Setup effort

One command plus a key — docker run -d --name paperless-mcp --restart unless-stopped -e PAPERLESS_BASE_URL=https://your-paperless.example.com -e PAPERLESS_API_TOKEN=your-token-here -p 5000:5000 -v paperless-outbox:/home/mcp/outbox ghcr.io/barryw/paperlessmcp:vX.Y.Z, then supply credentials