test-mcp
Build and test the paperless-ngx-mcp server against a live Paperless-ngx instance
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Build and test the paperless-ngx-mcp server against a live Paperless-ngx instance
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | test-mcp |
| description | Build and test the paperless-ngx-mcp server against a live Paperless-ngx instance |
| disable-model-invocation | true |
| allowed-tools | Bash, Read, Grep, Glob |
| argument-hint | <paperless-url> <api-token> |
Build and test the paperless-ngx-mcp server against a live Paperless-ngx instance.
Target: $0 with token $1
make build
printf to send multiple newline-delimited messages in a single pipe. Responses arrive out of order โ match by id.The tool calls below cover every read-oriented tool category:
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test-mcp-skill","version":"1.0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized"}\n{"jsonrpc":"2.0","id":2,"method":"tools/list"}\n{"jsonrpc":"2.0","id":10,"method":"tools/call","params":{"name":"system_status","arguments":{}}}\n{"jsonrpc":"2.0","id":11,"method":"tools/call","params":{"name":"remote_version","arguments":{}}}\n{"jsonrpc":"2.0","id":12,"method":"tools/call","params":{"name":"statistics","arguments":{}}}\n{"jsonrpc":"2.0","id":13,"method":"tools/call","params":{"name":"ui_settings_get","arguments":{}}}\n{"jsonrpc":"2.0","id":14,"method":"tools/call","params":{"name":"config_list","arguments":{}}}\n{"jsonrpc":"2.0","id":15,"method":"tools/call","params":{"name":"log_list","arguments":{}}}\n{"jsonrpc":"2.0","id":16,"method":"tools/call","params":{"name":"task_list","arguments":{"page_size":5}}}\n{"jsonrpc":"2.0","id":20,"method":"tools/call","params":{"name":"document_list","arguments":{"page_size":3}}}\n{"jsonrpc":"2.0","id":21,"method":"tools/call","params":{"name":"document_next_asn","arguments":{}}}\n{"jsonrpc":"2.0","id":30,"method":"tools/call","params":{"name":"tag_list","arguments":{}}}\n{"jsonrpc":"2.0","id":31,"method":"tools/call","params":{"name":"correspondent_list","arguments":{}}}\n{"jsonrpc":"2.0","id":32,"method":"tools/call","params":{"name":"document_type_list","arguments":{}}}\n{"jsonrpc":"2.0","id":33,"method":"tools/call","params":{"name":"storage_path_list","arguments":{}}}\n{"jsonrpc":"2.0","id":34,"method":"tools/call","params":{"name":"custom_field_list","arguments":{}}}\n{"jsonrpc":"2.0","id":40,"method":"tools/call","params":{"name":"saved_view_list","arguments":{}}}\n{"jsonrpc":"2.0","id":41,"method":"tools/call","params":{"name":"share_link_list","arguments":{}}}\n{"jsonrpc":"2.0","id":50,"method":"tools/call","params":{"name":"user_list","arguments":{}}}\n{"jsonrpc":"2.0","id":51,"method":"tools/call","params":{"name":"group_list","arguments":{}}}\n{"jsonrpc":"2.0","id":52,"method":"tools/call","params":{"name":"profile_get","arguments":{}}}\n{"jsonrpc":"2.0","id":60,"method":"tools/call","params":{"name":"mail_account_list","arguments":{}}}\n{"jsonrpc":"2.0","id":61,"method":"tools/call","params":{"name":"mail_rule_list","arguments":{}}}\n{"jsonrpc":"2.0","id":62,"method":"tools/call","params":{"name":"processed_mail_list","arguments":{}}}\n{"jsonrpc":"2.0","id":70,"method":"tools/call","params":{"name":"workflow_list","arguments":{}}}\n{"jsonrpc":"2.0","id":71,"method":"tools/call","params":{"name":"workflow_trigger_list","arguments":{}}}\n{"jsonrpc":"2.0","id":72,"method":"tools/call","params":{"name":"workflow_action_list","arguments":{}}}\n{"jsonrpc":"2.0","id":80,"method":"tools/call","params":{"name":"trash_list","arguments":{}}}\n' | PAPERLESS_URL=$0 PAPERLESS_TOKEN=$1 ./paperless-ngx-mcp mcp 2>/dev/null
id. Use python3 to parse and validate.For each response, check:
result.isError is absent or false (tool succeeded)result.content[0].text contains valid JSONBuild a results table organized by category:
Protocol (id 1-2):
id:1 โ initialize: serverInfo.name = paperless-ngx-mcp, protocol versionid:2 โ tools/list: count of tools in result.tools arraySystem (id 10-16):
id:10 โ system_status: Paperless-ngx version, install typeid:11 โ remote_version: available update versionid:12 โ statistics: document count, inbox statsid:13 โ ui_settings_get: UI theme/settingsid:14 โ config_list: configuration entriesid:15 โ log_list: available log filesid:16 โ task_list: background tasksDocuments (id 20-21):
id:20 โ document_list: document count, pagination infoid:21 โ document_next_asn: next archive serial numberMetadata (id 30-34):
id:30 โ tag_list: tag countid:31 โ correspondent_list: correspondent countid:32 โ document_type_list: document type countid:33 โ storage_path_list: storage path countid:34 โ custom_field_list: custom field countViews & Links (id 40-41):
id:40 โ saved_view_list: saved view countid:41 โ share_link_list: share link countUsers (id 50-52):
id:50 โ user_list: user countid:51 โ group_list: group countid:52 โ profile_get: current user profileMail (id 60-62):
id:60 โ mail_account_list: mail account countid:61 โ mail_rule_list: mail rule countid:62 โ processed_mail_list: processed mail countWorkflows (id 70-72):
id:70 โ workflow_list: workflow countid:71 โ workflow_trigger_list: trigger countid:72 โ workflow_action_list: action countTrash (id 80):
id:80 โ trash_list: trashed document countprintf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test-mcp-skill","version":"1.0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized"}\n{"jsonrpc":"2.0","id":90,"method":"tools/call","params":{"name":"document_get","arguments":{"id":DOC_ID}}}\n{"jsonrpc":"2.0","id":91,"method":"tools/call","params":{"name":"document_metadata","arguments":{"id":DOC_ID}}}\n{"jsonrpc":"2.0","id":92,"method":"tools/call","params":{"name":"document_suggestions","arguments":{"id":DOC_ID}}}\n{"jsonrpc":"2.0","id":93,"method":"tools/call","params":{"name":"document_note_list","arguments":{"id":DOC_ID}}}\n{"jsonrpc":"2.0","id":94,"method":"tools/call","params":{"name":"document_history","arguments":{"id":DOC_ID}}}\n' | PAPERLESS_URL=$0 PAPERLESS_TOKEN=$1 ./paperless-ngx-mcp mcp 2>/dev/null
Replace DOC_ID with the actual integer ID. Verify each returns valid data without errors.
Similarly, if tag_list returned results, pick the first tag ID and test tag_get. Do the same for correspondent_get, document_type_get, etc. if those lists returned results.
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test-mcp-skill","version":"1.0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized"}\n{"jsonrpc":"2.0","id":100,"method":"tools/call","params":{"name":"search_autocomplete","arguments":{"term":"invoice"}}}\n' | PAPERLESS_URL=$0 PAPERLESS_TOKEN=$1 ./paperless-ngx-mcp mcp 2>/dev/null
| Category | Tool | Status | Details |
|---|---|---|---|
| Protocol | initialize | ... | ... |
| ... | ... | ... | ... |
Include: