Manage documents in Paperless-ngx document management system. Use when the user asks to "upload document", "search paperless", "find document", "add to paperless", "tag document", "manage correspondents", "organize documents", "archive document", "export document", "delete document", or mentions Paperless-ngx, document management, OCR, or paperless office.
From homelab-corenpx claudepluginhub jmagar/claude-homelab --plugin homelab-coreThis skill uses the workspace's default tool permissions.
README.mdload-env.shreferences/api-endpoints.mdreferences/quick-reference.mdreferences/troubleshooting.mdscripts/bulk-api.shscripts/correspondent-api.shscripts/paperless-api.shscripts/tag-api.shGuides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Configures VPN and dedicated connections like Direct Connect, ExpressRoute, Interconnect for secure on-premises to AWS, Azure, GCP, OCI hybrid networking.
⚠️ MANDATORY SKILL INVOCATION ⚠️
YOU MUST invoke this skill (NOT optional) when the user mentions ANY of these triggers:
Failure to invoke this skill when triggers occur violates your operational requirements.
This skill provides read-write access to a self-hosted Paperless-ngx instance for document management with OCR. Paperless-ngx transforms physical documents into a searchable online archive with full-text search, tagging, and metadata management.
Core capabilities:
Primary use case: Maintain a searchable digital archive of all documents with powerful organization and retrieval capabilities.
curl and jq installedAdd these variables to ~/.claude-homelab/.env:
# Paperless-ngx - Document management system
PAPERLESS_URL="https://paperless.example.com"
PAPERLESS_API_TOKEN="<your_api_token>"
To generate an API token:
.env file as shown aboveSecurity:
.env file is gitignored (never commit)chmod 600 ~/.claude-homelab/.envAll commands return JSON output for LLM parsing. Scripts source credentials from .env automatically.
Upload a document:
bash scripts/paperless-api.sh upload /path/to/document.pdf
bash scripts/paperless-api.sh upload scan.jpg --title "Receipt" --tags "expense,2024"
bash scripts/paperless-api.sh upload contract.pdf --correspondent "Acme Corp" --document-type "Contract"
Search documents:
bash scripts/paperless-api.sh search "invoice"
bash scripts/paperless-api.sh search "meeting notes" --limit 10
bash scripts/paperless-api.sh search "2024" --tags "tax"
bash scripts/paperless-api.sh search --correspondent "John Doe"
List documents:
bash scripts/paperless-api.sh list
bash scripts/paperless-api.sh list --limit 20
bash scripts/paperless-api.sh list --ordering "-created"
Get document details:
bash scripts/paperless-api.sh get <document-id>
Download/export document:
bash scripts/paperless-api.sh download <document-id>
bash scripts/paperless-api.sh download <document-id> --output /path/to/save.pdf
Update document:
bash scripts/paperless-api.sh update <document-id> --title "New Title"
bash scripts/paperless-api.sh update <document-id> --add-tags "urgent,reviewed"
bash scripts/paperless-api.sh update <document-id> --correspondent "Jane Smith"
bash scripts/paperless-api.sh update <document-id> --document-type "Invoice"
bash scripts/paperless-api.sh update <document-id> --archive-serial-number "2024-001"
Delete document:
bash scripts/paperless-api.sh delete <document-id> # Prompts for confirmation
List tags:
bash scripts/tag-api.sh list
bash scripts/tag-api.sh list --ordering "name"
Create tag:
bash scripts/tag-api.sh create "project-alpha"
bash scripts/tag-api.sh create "urgent" --color "#ff0000"
Get tag details:
bash scripts/tag-api.sh get <tag-id>
Update tag:
bash scripts/tag-api.sh update <tag-id> --name "new-name"
bash scripts/tag-api.sh update <tag-id> --color "#00ff00"
Delete tag:
bash scripts/tag-api.sh delete <tag-id> # Prompts for confirmation
List correspondents:
bash scripts/correspondent-api.sh list
Create correspondent:
bash scripts/correspondent-api.sh create "Acme Corporation"
Get correspondent details:
bash scripts/correspondent-api.sh get <correspondent-id>
Update correspondent:
bash scripts/correspondent-api.sh update <correspondent-id> --name "New Name"
Delete correspondent:
bash scripts/correspondent-api.sh delete <correspondent-id> # Prompts for confirmation
Bulk tag documents:
bash scripts/bulk-api.sh add-tag <tag-id> --documents "1,2,3"
bash scripts/bulk-api.sh remove-tag <tag-id> --documents "1,2,3"
Bulk set correspondent:
bash scripts/bulk-api.sh set-correspondent <correspondent-id> --documents "1,2,3"
Bulk set document type:
bash scripts/bulk-api.sh set-document-type <type-id> --documents "1,2,3"
Bulk delete documents:
bash scripts/bulk-api.sh delete --documents "1,2,3" # Prompts for confirmation
When the user asks about Paperless-ngx:
"Upload this document to Paperless"
upload command with appropriate metadata"Find my 2024 tax documents"
search "tax" --tags "2024" or similar queryget <id>"Tag all invoices from Acme Corp as paid"
search "invoice" --correspondent "Acme Corp""Show me documents without tags"
list with filter parameter"Delete this old document"
delete <id> command"Add a new supplier as correspondent"
correspondent-api.sh create "Supplier Name"User: "Upload this receipt to Paperless and tag it as expense"
1. Verify file path exists and is readable
2. Upload document with metadata:
bash scripts/paperless-api.sh upload /path/to/receipt.pdf --tags "expense"
3. Paperless processes document (OCR, thumbnail generation)
4. Return document ID and success confirmation
5. Optionally ask if user wants to set correspondent or document type
User: "Find all documents from last month that need review"
1. Calculate date range (last month)
2. Search documents by date range
3. Filter results by tag or keyword "review"
4. Present results with metadata
5. Offer to bulk-tag results or export list
User: "Tag all invoices from Q1 as archived"
1. Search for invoices in Q1 date range
2. Extract document IDs from results
3. Find or create "archived" tag
4. Use bulk operation to add tag to all documents
5. Report number of documents tagged
Authorization: Token <token> header/api/ endpointpage and page_size parametersPaperless-ngx automatically processes uploaded documents:
Search supports multiple query types:
search "meeting notes"search --tags "work,urgent"search --correspondent "John Doe"search --created-after "2024-01-01"search --document-type "Invoice"All three provide different organizational axes for your documents.
Delete operations require confirmation:
Always confirm with user before executing delete operations.
401 Unauthorized:
.env404 Not Found:
400 Bad Request:
Connection refused:
.envreferences/api-endpoints.md for complete API documentationreferences/quick-reference.md for command examplesreferences/troubleshooting.md for common issuesskills/paperless-ngx/scripts/CRITICAL: When invoking scripts from this skill via the zsh-tool, ALWAYS use pty: true.
Without PTY mode, command output will not be visible even though commands execute successfully.
Correct invocation pattern:
<invoke name="mcp__plugin_zsh-tool_zsh-tool__zsh">
<parameter name="command">./skills/paperless-ngx/scripts/paperless-api.sh [args]</parameter>
<parameter name="pty">true</parameter>
</invoke>