developer-toolsproductivity

Paperless-NGX

by baruchiro

Paperless-NGX is advanced document management software using AI for easy organizing, searching, and managing your docume

Enables AI to interact with Paperless-NGX document management systems for organizing, searching, and managing document collections through natural language commands.

github stars

68

Requires existing Paperless-NGX instanceUses API token authentication

best for

  • / Personal document organization
  • / Small business paperwork management
  • / Home office filing systems
  • / Digital archiving workflows

capabilities

  • / List and search documents
  • / Create and manage tags with colors
  • / Add and edit correspondents
  • / Upload new documents
  • / Create document types
  • / Download documents

what it does

Connects to your Paperless-NGX document management system to help you organize, search, and manage digital documents through Claude.

about

Paperless-NGX is a community-built MCP server published by baruchiro that provides AI assistants with tools and capabilities via the Model Context Protocol. Paperless-NGX is advanced document management software using AI for easy organizing, searching, and managing your docume It is categorized under developer tools, productivity.

how to install

You can install Paperless-NGX in your AI client of choice. Use the install panel on this page to get one-click setup for Cursor, Claude Desktop, VS Code, and other MCP-compatible clients. This server runs locally on your machine via the stdio transport.

license

ISC

Paperless-NGX is released under the ISC license. This is a permissive open-source license, meaning you can freely use, modify, and distribute the software.

readme

# Paperless-NGX MCP Server ![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/baruchiro/paperless-mcp?utm_source=oss&utm_medium=github&utm_campaign=baruchiro%2Fpaperless-mcp&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews) 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. ## Quick Start [![Install MCP Server](https://cursor.com/deeplink/mcp-install-light.svg)](https://cursor.com/install-mcp?name=paperless&config=eyJjb21tYW5kIjoibnB4IC15IEBiYXJ1Y2hpcm8vcGFwZXJsZXNzLW1jcEBsYXRlc3QiLCJlbnYiOnsiUEFQRVJMRVNTX1VSTCI6Imh0dHA6Ly95b3VyLXBhcGVybGVzcy1pbnN0YW5jZTo4MDAwIiwiUEFQRVJMRVNTX0FQSV9LRVkiOiJ5b3VyLWFwaS10b2tlbiJ9fQ%3D%3D) ### Installation Add these to your MCP config file: // STDIO mode (recommended for local or CLI use) ```json "paperless": { "command": "npx", "args": [ "-y", "@baruchiro/paperless-mcp@latest", ], "env": { "PAPERLESS_URL": "http://your-paperless-instance:8000", "PAPERLESS_API_KEY": "your-api-token", "PAPERLESS_PUBLIC_URL": "https://your-public-domain.com" } } ``` // HTTP mode (recommended for Docker or remote use) ```json "paperless": { "command": "docker", "args": [ "run", "-i", "--rm", "ghcr.io/baruchiro/paperless-mcp:latest", ], "env": { "PAPERLESS_URL": "http://your-paperless-instance:8000", "PAPERLESS_API_KEY": "your-api-token", "PAPERLESS_PUBLIC_URL": "https://your-public-domain.com" } } ``` 3. Get your API token: 1. Log into your Paperless-NGX instance 2. Click your username in the top right 3. Select "My Profile" 4. Click the circular arrow button to generate a new token 4. Replace the placeholders in your MCP config: - `http://your-paperless-instance:8000` with your Paperless-NGX URL - `your-api-token` with the token you just generated - `https://your-public-domain.com` with your public Paperless-NGX URL (optional, falls back to PAPERLESS_URL) That's it! Now you can ask Claude to help you manage your Paperless-NGX documents. ### Example Usage Here are some things you can ask Claude to do: - "Show me all documents tagged as 'Invoice'" - "Search for documents containing 'tax return'" - "Create a new tag called 'Receipts' with color #FF0000" - "Download document #123" - "List all correspondents" - "Create a new document type called 'Bank Statement'" ## Available Tools ### Document Operations #### list_documents Get a paginated list of all documents. Parameters: - page (optional): Page number - page_size (optional): Number of documents per page ```typescript list_documents({ page: 1, page_size: 25 }) ``` #### get_document Get a specific document by ID. Parameters: - id: Document ID ```typescript get_document({ id: 123 }) ``` #### search_documents Full-text search across documents. Parameters: - query: Search query string ```typescript search_documents({ query: "invoice 2024" }) ``` #### download_document Download a document file by ID. Parameters: - id: Document ID - original (optional): If true, downloads original file instead of archived version ```typescript download_document({ id: 123, original: false }) ``` #### get_document_thumbnail Get a document thumbnail (image preview) by ID. Returns the thumbnail as a base64-encoded WebP image resource. Parameters: - id: Document ID ```typescript get_document_thumbnail({ id: 123 }) ``` #### bulk_edit_documents Perform bulk operations on multiple documents. Parameters: - documents: Array of document IDs - method: One of: - set_correspondent: Set correspondent for documents - set_document_type: Set document type for documents - set_storage_path: Set storage path for documents - add_tag: Add a tag to documents - remove_tag: Remove a tag from documents - modify_tags: Add and/or remove multiple tags - delete: Delete documents - reprocess: Reprocess documents - set_permissions: Set document permissions - merge: Merge multiple documents - split: Split a document into multiple documents - rotate: Rotate document pages - delete_pages: Delete specific pages from a document - Additional parameters based on method: - correspondent: ID for set_correspondent - document_type: ID for set_document_type - storage_path: ID for set_storage_path - tag: ID for add_tag/remove_tag - add_tags: Array of tag IDs for modify_tags - remove_tags: Array of tag IDs for modify_tags - permissions: Object for set_permissions with owner, permissions, merge flag - metadata_document_id: ID for merge to specify metadata source - delete_originals: Boolean for merge/split - pages: String for split "[1,2-3,4,5-7]" or delete_pages "[2,3,4]" - degrees: Number for rotate (90, 180, or 270) Examples: ```typescript // Add a tag to multiple documents bulk_edit_documents({ documents: [1, 2, 3], method: "add_tag", tag: 5 }) // Set correspondent and document type bulk_edit_documents({ documents: [4, 5], method: "set_correspondent", correspondent: 2 }) // Merge documents bulk_edit_documents({ documents: [6, 7, 8], method: "merge", metadata_document_id: 6, delete_originals: true }) // Split document into parts bulk_edit_documents({ documents: [9], method: "split", pages: "[1-2,3-4,5]" }) // Modify multiple tags at once bulk_edit_documents({ documents: [10, 11], method: "modify_tags", add_tags: [1, 2], remove_tags: [3, 4] }) // Modify custom fields bulk_edit_documents({ documents: [12, 13], method: "modify_custom_fields", add_custom_fields: { "2": "שנה" } }) ``` #### post_document Upload a new document to Paperless-NGX. Parameters: - file: Base64 encoded file content - filename: Name of the file - title (optional): Title for the document - created (optional): DateTime when the document was created (e.g. "2024-01-19" or "2024-01-19 06:15:00+02:00") - correspondent (optional): ID of a correspondent - document_type (optional): ID of a document type - storage_path (optional): ID of a storage path - tags (optional): Array of tag IDs - archive_serial_number (optional): Archive serial number - custom_fields (optional): Array of custom field IDs ```typescript post_document({ file: "base64_encoded_content", filename: "invoice.pdf", title: "January Invoice", created: "2024-01-19", correspondent: 1, document_type: 2, tags: [1, 3], archive_serial_number: "2024-001", custom_fields: [1, 2] }) ``` ### Tag Operations #### list_tags Get all tags. ```typescript list_tags() ``` #### create_tag Create a new tag. Parameters: - name: Tag name - color (optional): Hex color code (e.g. "#ff0000") - match (optional): Text pattern to match - matching_algorithm (optional): Number between 0 and 6: 0 - None 1 - Any word 2 - All words 3 - Exact match 4 - Regular expression 5 - Fuzzy word 6 - Automatic ```typescript create_tag({ name: "Invoice", color: "#ff0000", match: "invoice", matching_algorithm: 5 }) ``` ### Correspondent Operations #### list_correspondents Get all correspondents. ```typescript list_correspondents() ``` #### create_correspondent Create a new correspondent. Parameters: - name: Correspondent name - match (optional): Text pattern to match - matching_algorithm (optional): Number between 0 and 6: 0 - None 1 - Any word 2 - All words 3 - Exact match 4 - Regular expression 5 - Fuzzy word 6 - Automatic ```typescript create_correspondent({ name: "ACME Corp", match: "ACME", matching_algorithm: 5 }) ``` ### Document Type Operations #### list_document_types Get all document types. ```typescript list_document_types() ``` #### create_document_type Create a new document type. Parameters: - name: Document type name - match (optional): Text pattern to match - matching_algorithm (optional): Number between 0 and 6: 0 - None 1 - Any word 2 - All words 3 - Exact match 4 - Regular expression 5 - Fuzzy word 6 - Automatic ```typescript create_document_type({ name: "Invoice", match: "invoice total amount due", matching_algorithm: 1 }) ``` ### Custom Field Operations #### list_custom_fields Get all custom fields. ```typescript list_custom_fields() ``` #### get_custom_field Get a specific custom field by ID. Parameters: - id: Custom field ID ```typescript get_custom_field({ id: 1 }) ``` #### create_custom_field Create a new custom field. Parameters: - name: Custom field name - data_type: One of "string", "url", "date", "boolean", "integer", "float", "monetary", "documentlink", "select" - extra_data (optional): Extra data for the custom field, such as select options ```typescript create_custom_field({ name: "Invoice Number", data_type: "string" }) ``` #### update_custom_field Update an existing custom field. Parameters: - id: Custom field ID - name (optional): New custom field name - data_type (optional): New data type - extra_data (optional): Extra data for the custom field ```typescript update_custom_field({ id: 1, name: "Updated Invoice Number", data_type: "string" }) ``` #### delete_custom_field Delete a custom field. Parameters: - id: Custom field ID ```typescript delete_custom_field({ id: 1 }) ``` #### bulk_edit_custom_fields Perform bulk operations on multiple custom fields. Parameters: - custom_fields: Array of custom field IDs - operation: One of "delete" ```typescript bulk_edit_custom_fields({ custom_fields: [1, 2, 3], operation: "delete" }) ``` ## Error Handling The server will show clear error messages if: - The Paperless-NGX URL or API token is incorrect - The Paperless-NGX server is unreachable - The requested operation fails - The provided parameters are invalid ## Development Want to c ---

FAQ

What is the Paperless-NGX MCP server?
Paperless-NGX is a Model Context Protocol (MCP) server profile on explainx.ai. MCP lets AI hosts (e.g. Claude Desktop, Cursor) call tools and resources through a standard interface; this page summarizes categories, install hints, and community ratings.
How do MCP servers relate to agent skills?
Skills are reusable instruction packages (often SKILL.md); MCP servers expose live capabilities. Teams frequently combine both—skills for workflows, MCP for APIs and data. See explainx.ai/skills and explainx.ai/mcp-servers for parallel directories.
How are reviews shown for Paperless-NGX?
This profile displays 10 aggregated ratings (sample rows for discoverability plus signed-in user reviews). Average score is about 4.5 out of 5—verify behavior in your own environment before production use.
MCP server reviews

Ratings

4.510 reviews
  • Shikha Mishra· Oct 10, 2024

    Paperless-NGX is among the better-indexed MCP projects we tried; the explainx.ai summary tracks the official description.

  • Piyush G· Sep 9, 2024

    We evaluated Paperless-NGX against two servers with overlapping tools; this profile had the clearer scope statement.

  • Chaitanya Patil· Aug 8, 2024

    Useful MCP listing: Paperless-NGX is the kind of server we cite when onboarding engineers to host + tool permissions.

  • Sakshi Patil· Jul 7, 2024

    Paperless-NGX reduced integration guesswork — categories and install configs on the listing matched the upstream repo.

  • Ganesh Mohane· Jun 6, 2024

    I recommend Paperless-NGX for teams standardizing on MCP; the explainx.ai page compares cleanly with sibling servers.

  • Oshnikdeep· May 5, 2024

    Strong directory entry: Paperless-NGX surfaces stars and publisher context so we could sanity-check maintenance before adopting.

  • Dhruvi Jain· Apr 4, 2024

    Paperless-NGX has been reliable for tool-calling workflows; the MCP profile page is a good permalink for internal docs.

  • Rahul Santra· Mar 3, 2024

    According to our notes, Paperless-NGX benefits from clear Model Context Protocol framing — fewer ambiguous “AI plugin” claims.

  • Pratham Ware· Feb 2, 2024

    We wired Paperless-NGX into a staging workspace; the listing’s GitHub and npm pointers saved time versus hunting across READMEs.

  • Yash Thakker· Jan 1, 2024

    Paperless-NGX is a well-scoped MCP server in the explainx.ai directory — install snippets and categories matched our Claude Code setup.