Tags, correspondents and document types each carry a matching pattern and algorithm, so a classification you fix once by hand keeps applying to everything that arrives afterwards. The destructive tools are labelled as destructive in their own descriptions — deleting a tag or a custom field strips it from every document that uses it, and the delete method on bulk_edit_documents asks for confirmation before it runs.
A full-surface client for a Paperless-NGX instance: 44 tools covering documents, tags, correspondents, document types, custom fields, document notes, and the mail accounts and rules that pull attachments in.
- Documents found two ways — list_documents for plain filters (correspondent, type, tag, storage path, creation date, archive serial number), query_documents for full-text plus structured custom-field conditions written as [field_name_or_id, operator, value] leaves joined by AND and OR
- more_like_id on query_documents, so you can hand it one document and ask what else looks like it
- get_document_content fetches the text separately from the metadata, so listings stay small until you ask to actually read one
- post_document uploads either base64 content or a file already sitting on the server's filesystem, up to 100MB either way
- list_document_notes, create_document_note and delete_document_note keep a running history on the document itself — paid, disputed, filed — instead of in a spreadsheet next to it
- bulk_edit_documents applies one decision to a set: tags added or removed, correspondent, type, storage path and custom fields reassigned, permissions set, pages rotated, split, deleted or merged
- Tags, correspondents and document types created with their own matching pattern and algorithm, so documents arriving next month get classified without you
- create_custom_field defines a field by data type — string, url, date, boolean, integer, float, monetary, documentlink or select — with monetary values written as a currency-code prefix such as USD10.00
- Mail rules created and patched against a mail account, filtered on sender, recipient, subject, body or attachment filename, and process_mail_account runs the ingest on demand
- download_document and get_document_thumbnail return a paperless:// resource URI you read to get the bytes, so a file never has to travel through the chat as base64
A Paperless-NGX instance at PAPERLESS_URL and a profile API token in PAPERLESS_API_KEY. Run it over stdio with npx from @baruchiro/paperless-mcp, or as the ghcr.io/baruchiro/paperless-mcp container when the server is remote. PAPERLESS_MCP_UPLOAD_PATHS is worth setting — it limits which directories a file_path upload may read — and PAPERLESS_API_VERSION defaults to 9, which suits recent 2.x and 3.x servers; an HTTP 406 back means yours wants a different one.
One command plus a key — npx -y @baruchiro/paperless-mcp@latest, then supply credentials
