skills$openclaw/paperless-ngx
madmantim9.9k

by madmantim

paperless-ngx – OpenClaw Skill

paperless-ngx is an OpenClaw Skills integration for productivity workflows. Manage documents in Paperless-ngx - search, upload, tag, and retrieve.

9.9k stars4.5k forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026productivity

Skill Snapshot

namepaperless-ngx
descriptionManage documents in Paperless-ngx - search, upload, tag, and retrieve. OpenClaw Skills integration.
ownermadmantim
repositorymadmantim/paperless-ngx-tools
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @madmantim/paperless-ngx-tools
last updatedFeb 7, 2026

Maintainer

madmantim

madmantim

Maintains paperless-ngx in the OpenClaw Skills directory.

View GitHub profile
File Explorer
13 files
.
references
api.md
4.5 KB
scripts
correspondents.mjs
1.9 KB
download.mjs
2.3 KB
get.mjs
2.7 KB
list.mjs
2.5 KB
search.mjs
3.8 KB
tags.mjs
1.9 KB
types.mjs
1.9 KB
upload.mjs
4.2 KB
_meta.json
471 B
SKILL.md
3.9 KB
SKILL.md

name: paperless-ngx description: Manage documents in Paperless-ngx - search, upload, tag, and retrieve. homepage: https://github.com/paperless-ngx/paperless-ngx metadata: {"clawdbot":{"requires":{"env":["PAPERLESS_URL","PAPERLESS_TOKEN"]},"primaryEnv":"PAPERLESS_TOKEN"}}

Paperless-ngx

Document management via Paperless-ngx REST API.

Configuration

Set environment variables in ~/.clawdbot/clawdbot.json:

{
  "env": {
    "PAPERLESS_URL": "http://your-paperless-host:8000",
    "PAPERLESS_TOKEN": "your-api-token"
  }
}

Or configure via the skills entry (allows using apiKey shorthand):

{
  "skills": {
    "entries": {
      "paperless-ngx": {
        "env": { "PAPERLESS_URL": "http://your-paperless-host:8000" },
        "apiKey": "your-api-token"
      }
    }
  }
}

Get your API token from Paperless web UI: Settings → Users & Groups → [user] → Generate Token.

Quick Reference

TaskCommand
Search documentsnode {baseDir}/scripts/search.mjs "query"
List recentnode {baseDir}/scripts/list.mjs [--limit N]
Get documentnode {baseDir}/scripts/get.mjs <id> [--content]
Upload documentnode {baseDir}/scripts/upload.mjs <file> [--title "..."] [--tags "a,b"]
Download PDFnode {baseDir}/scripts/download.mjs <id> [--output path]
List tagsnode {baseDir}/scripts/tags.mjs
List typesnode {baseDir}/scripts/types.mjs
List correspondentsnode {baseDir}/scripts/correspondents.mjs

All scripts are in {baseDir}/scripts/.

Common Workflows

Find a document

# Full-text search
node {baseDir}/scripts/search.mjs "electricity bill december"

# Filter by tag
node {baseDir}/scripts/search.mjs --tag "tax-deductible"

# Filter by document type
node {baseDir}/scripts/search.mjs --type "Invoice"

# Filter by correspondent
node {baseDir}/scripts/search.mjs --correspondent "AGL"

# Combine filters
node {baseDir}/scripts/search.mjs "2025" --tag "unpaid" --type "Invoice"

Get document details

# Metadata only
node {baseDir}/scripts/get.mjs 28

# Include OCR text content
node {baseDir}/scripts/get.mjs 28 --content

# Full content (no truncation)
node {baseDir}/scripts/get.mjs 28 --content --full

Upload a document

# Basic upload (title auto-detected)
node {baseDir}/scripts/upload.mjs /path/to/invoice.pdf

# With metadata
node {baseDir}/scripts/upload.mjs /path/to/invoice.pdf \
  --title "AGL Electricity Jan 2026" \
  --tags "unpaid,utility" \
  --type "Invoice" \
  --correspondent "AGL" \
  --created "2026-01-15"

Download a document

# Download to current directory
node {baseDir}/scripts/download.mjs 28

# Specify output path
node {baseDir}/scripts/download.mjs 28 --output ~/Downloads/document.pdf

# Get original (not archived/OCR'd version)
node {baseDir}/scripts/download.mjs 28 --original

Manage metadata

# List all tags
node {baseDir}/scripts/tags.mjs

# List document types
node {baseDir}/scripts/types.mjs

# List correspondents
node {baseDir}/scripts/correspondents.mjs

# Create new tag
node {baseDir}/scripts/tags.mjs --create "new-tag-name"

# Create new correspondent
node {baseDir}/scripts/correspondents.mjs --create "New Company Name"

Output Format

All scripts output JSON for easy parsing. Use jq for formatting:

node {baseDir}/scripts/search.mjs "invoice" | jq '.results[] | {id, title, created}'

Advanced Usage

For complex queries or bulk operations, see references/api.md for direct API access patterns.

Troubleshooting

"PAPERLESS_URL not set" — Add to ~/.clawdbot/clawdbot.json env section or export in shell.

"401 Unauthorized" — Check PAPERLESS_TOKEN is valid. Regenerate in Paperless UI if needed.

"Connection refused" — Verify Paperless is running and URL is correct (include port).

Upload fails silently — Check Paperless logs; file may be duplicate or unsupported format.

README.md

No README available.

Permissions & Security

Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.

Requirements

  • OpenClaw CLI installed and configured.
  • Language: Markdown
  • License: MIT
  • Topics:

Configuration

Set environment variables in `~/.clawdbot/clawdbot.json`: ```json { "env": { "PAPERLESS_URL": "http://your-paperless-host:8000", "PAPERLESS_TOKEN": "your-api-token" } } ``` Or configure via the skills entry (allows using `apiKey` shorthand): ```json { "skills": { "entries": { "paperless-ngx": { "env": { "PAPERLESS_URL": "http://your-paperless-host:8000" }, "apiKey": "your-api-token" } } } } ``` Get your API token from Paperless web UI: Settings → Users & Groups → [user] → Generate Token.

FAQ

How do I install paperless-ngx?

Run openclaw add @madmantim/paperless-ngx-tools in your terminal. This installs paperless-ngx into your OpenClaw Skills catalog.

Does this skill run locally or in the cloud?

OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.

Where can I verify the source code?

The source repository is available at https://github.com/openclaw/skills/tree/main/skills/madmantim/paperless-ngx-tools. Review commits and README documentation before installing.