paperless-ngx-mcp
Allows interaction with a Paperless-NGX instance, providing tools to manage documents, tags, correspondents, document types, custom fields, storage paths, saved views, share links, workflows, mail accounts/rules, notes, trash, and tasks.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@paperless-ngx-mcplist documents without tags in my inbox"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
paperless-ngx-mcp
A Model Context Protocol server for Paperless-NGX. Exposes the full Paperless-NGX REST API to AI assistants — documents, tags, correspondents, document types, custom fields, storage paths, saved views, share links and bundles, workflows, mail accounts and rules, document versions, notes, trash, and tasks.

Why this one?
Complete, and it stays that way. A CI test checks every endpoint in Paperless's
/api/schema/against the tools here and fails when upstream adds one that is neither wrapped nor deliberately skipped.Tested against real Paperless. The end-to-end suite runs the tools against a live Paperless-ngx 3.2.1 container, not mocks.
Asks before it breaks things. Every
delete_*tool,empty_trash,merge_documents_as_versionsand bulkdeleterequireconfirm: true; bulk edits across "all matching documents" refuse filters Paperless would silently ignore; and thetriage_inboxprompt proposes changes and waits for your go-ahead before writing anything.Easy to allowlist. Verb-first tool names (
list_*,get_*,delete_*, …) group into one permission wildcard each.Install it your way:
npx, a Docker image, a one-click Claude Desktop extension, or the official MCP Registry.
Related MCP server: Paperless MCP
Compatibility
Targets Paperless-ngx 3.2 (tested against 3.2.1). Older Paperless versions are not supported — use paperless-ngx-mcp@3.1.1 for Paperless 2.x. The package major version tracks the Paperless-ngx major it targets; there are no 1.x or 2.x releases.
Quick Start
The server is published to npm as paperless-ngx-mcp. You can run it with npx — no clone or build required.
Claude Code
claude mcp add paperless --scope user \
--env PAPERLESS_URL=https://your-paperless-instance \
--env PAPERLESS_API_KEY=your-api-token \
-- npx -y paperless-ngx-mcpDrop --scope user to install for the current project only. See claude mcp add --help for more options.
Codex CLI
codex mcp add paperless \
--env PAPERLESS_URL=https://your-paperless-instance \
--env PAPERLESS_API_KEY=your-api-token \
-- npx -y paperless-ngx-mcpThis writes the entry to ~/.codex/config.toml.
Claude Desktop (extension)
Download paperless-ngx-mcp.mcpb from the latest release and double-click it, or install it from Settings → Extensions. Claude Desktop asks for your Paperless URL and API token.
Claude Desktop, Cursor, Cline, and other MCP clients
The buttons install placeholder values; replace PAPERLESS_URL and PAPERLESS_API_KEY afterwards. Or add this to your client's MCP config file (e.g. claude_desktop_config.json, ~/.cursor/mcp.json, ~/.config/cline/mcp.json):
{
"mcpServers": {
"paperless": {
"command": "npx",
"args": ["-y", "paperless-ngx-mcp"],
"env": {
"PAPERLESS_URL": "https://your-paperless-instance",
"PAPERLESS_API_KEY": "your-api-token",
"PAPERLESS_PUBLIC_URL": "https://your-public-domain"
}
}
}
}Docker
A multi-arch image (amd64, arm64) is published to ghcr.io/cubinet-code/paperless-ngx-mcp. As a stdio server in any MCP client config:
{
"mcpServers": {
"paperless": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "PAPERLESS_URL", "-e", "PAPERLESS_API_KEY", "ghcr.io/cubinet-code/paperless-ngx-mcp"],
"env": {
"PAPERLESS_URL": "https://your-paperless-instance",
"PAPERLESS_API_KEY": "your-api-token"
}
}
}
}Or as a long-running Streamable HTTP server. It has no authentication, so keep it off untrusted networks:
docker run -d -p 127.0.0.1:3000:3000 \
-e PAPERLESS_URL=https://your-paperless-instance \
-e PAPERLESS_API_KEY=your-api-token \
ghcr.io/cubinet-code/paperless-ngx-mcp --http --port 3000Get your Paperless-NGX API token
Log into your Paperless-NGX instance.
Click your username (top right) → My Profile.
Click the circular arrow button to generate a new token.
Configuration
Variable | Required | Purpose |
| yes | Base URL the MCP server uses to talk to Paperless-NGX. |
| yes | API token (see above). |
| no | Public URL the assistant uses when constructing browser links to documents. Falls back to |
CLI flags (--baseUrl, --token, --publicUrl, --http, --port, plus the HTTP session limits) take precedence over environment variables.
Example Usage
Things you can ask Claude (or any MCP-aware assistant):
"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'"
"Empty the trash"
"Show me pending consumption tasks"
"Move every document from correspondent 'ACME GmbH (mail)' to 'ACME GmbH'"
"Remove the password from document #55 and keep the unlocked file as a new version"
"Create a workflow that strips PDF passwords from uploaded bank statements"
"Which mail rule is creating a new correspondent for every sender?"
Available Tools
The server registers tools across twelve domains.
Documents
list_documents, get_document, get_document_content, search_documents, download_document, download_documents_bulk, get_document_thumbnail, get_document_preview, get_document_history, get_document_metadata, update_document, post_document, email_document, edit_documents_bulk, delete_document, search_autocomplete, get_document_suggestions, get_document_ai_suggestions, get_next_asn, upload_document_version, update_document_version, delete_document_version, merge_documents_as_versions
Tags
list_tags, get_tag, create_tag, update_tag, delete_tag, edit_tags_bulk
Correspondents
list_correspondents, get_correspondent, create_correspondent, update_correspondent, delete_correspondent, edit_correspondents_bulk
Document Types
list_document_types, get_document_type, create_document_type, update_document_type, delete_document_type, edit_document_types_bulk
Custom Fields
list_custom_fields, get_custom_field, create_custom_field, update_custom_field, delete_custom_field, edit_custom_fields_bulk
Storage Paths
list_storage_paths, get_storage_path, create_storage_path, update_storage_path, delete_storage_path, test_storage_path
Saved Views
list_saved_views, get_saved_view, create_saved_view, update_saved_view, delete_saved_view
Share Links
list_share_links, list_document_share_links, get_share_link, create_share_link, delete_share_link, list_share_link_bundles, get_share_link_bundle, create_share_link_bundle, rebuild_share_link_bundle, delete_share_link_bundle
Workflows
list_workflows, get_workflow, create_workflow, update_workflow, delete_workflow, list_workflow_actions, get_workflow_action, create_workflow_action, update_workflow_action, delete_workflow_action, list_workflow_triggers, get_workflow_trigger, create_workflow_trigger, update_workflow_trigger, delete_workflow_trigger
list_mail_accounts, get_mail_account, create_mail_account, update_mail_account, delete_mail_account, test_mail_account, process_mail_account, list_mail_rules, get_mail_rule, create_mail_rule, update_mail_rule, delete_mail_rule
System / Notes / Trash / Tasks
get_statistics, get_system_status, list_document_notes, create_document_note, delete_document_note, list_trash, restore_from_trash, empty_trash, list_tasks, list_active_tasks, get_task_status_counts, get_task_summary, acknowledge_tasks
Tool naming convention (for permission allowlists)
Tool names are verb-first, so wildcard-based permission rules group cleanly by operation:
Wildcard | Covers |
| All list/index reads |
| All single-item reads |
| Full-text search and autocomplete |
|
|
| All create endpoints |
| Per-item PATCH updates |
| All bulk-edit operations across entity types |
| ⚠️ Destructive — system-wide deletes |
| Dry-run checks: |
|
|
|
|
| ⚠️ |
|
|
A read-only allowlist is therefore: list_*, get_*, search_*, download_*, test_*. Write access without destructive operations: add create_*, update_*, edit_*_bulk, upload_*, rebuild_*, post_document, email_document, restore_from_trash, acknowledge_tasks. delete_*, merge_*, process_* and empty_trash should require explicit user approval.
Prompts
The server also registers MCP prompts — reusable, parameterized instructions that surface as slash commands in clients like Claude Code (e.g. /mcp__paperless__triage_inbox).
triage_inbox
Walks the assistant through inbox triage: gather existing tags / correspondents / document types, propose metadata for each inbox document preferring existing items, present a confirmation table, and only apply changes after the user replies apply. New correspondents / types / tags are flagged (NEW) so you can veto creations before they happen.
Argument:
limit(optional, default25): maximum number of inbox documents to triage in one pass.
Notable tool details
edit_documents_bulk
Perform bulk operations on multiple documents.
Parameters:
Selection:
documents(array of IDs), orall: true+filterswith optionalexcluded_documents.filterstakes Paperless document filter names such ascorrespondent__id,tags__id__all,document_type__id,title_contentorquery— notlist_documents' tool arguments. Keys Paperless doesn't know are refused (it would otherwise ignore them and select every document), a preview query catches invalid values, and the result reportsmatched_documents.all: trueisn't supported formerge,split,delete_pages,edit_pdforremove_password.method: one ofset_correspondent,set_document_type,set_storage_path,add_tag,remove_tag,modify_tags,modify_custom_fields,delete,reprocess,set_permissions,merge,split,rotate,delete_pages,edit_pdf,remove_passwordMethod-specific parameters:
correspondent,document_type,storage_path,tag,add_tags,remove_tags,add_custom_fields,remove_custom_fields,set_permissions,owner,merge,metadata_document_id,delete_originals,pages,degrees,operations,update_document,include_metadata,password,delete_original,remote_ocr
// Add a tag to multiple documents
edit_documents_bulk({ documents: [1, 2, 3], method: "add_tag", tag: 5 })
// Merge documents
edit_documents_bulk({
documents: [6, 7, 8],
method: "merge",
metadata_document_id: 6,
delete_originals: true,
})
// Split a document into parts
edit_documents_bulk({ documents: [9], method: "split", pages: "[1-2,3-4,5]" })
// Modify multiple tags at once
edit_documents_bulk({
documents: [10, 11],
method: "modify_tags",
add_tags: [1, 2],
remove_tags: [3, 4],
})
// Move every document from a duplicate correspondent (12) to the canonical one (34)
edit_documents_bulk({ all: true, filters: { correspondent__id: 12 }, method: "set_correspondent", correspondent: 34 })
// Unlock a password-protected PDF, keeping the result as a new version
edit_documents_bulk({ documents: [55], method: "remove_password", password: "…", update_document: true })Paperless answers remove_password with OK even when it skips a document (its latest version isn't encrypted) or the password is wrong, so check the document's versions afterwards.
Workflows
A workflow — its triggers plus the actions they run — is what Paperless executes; create_workflow builds one in a single call. Standalone triggers and actions (create_workflow_trigger / create_workflow_action) do nothing on their own, and Paperless deletes unattached ones whenever any workflow is updated.
Action types: 1 assignment, 2 removal, 3 email, 4 webhook, 5 password removal, 6 move to trash, 7 remote OCR, 8 apply AI suggestions. Remote OCR needs a consumption-started trigger; AI suggestions need a trigger other than consumption-started.
update_workflowchanges only what you pass — but atriggersoractionslist replaces the whole list: entries with anidare updated, entries without one are created, and omitted ones are deleted.get_workflowoutput can be edited and sent straight back.PDF passwords of password-removal actions are always returned masked (
**********). Sending the masked list back keeps the stored passwords; a new action needs the real ones.
Document versions
upload_document_version adds a new file to an existing document (a signed copy, a corrected scan), and merge_documents_as_versions folds duplicate documents into one. Content, search, downloads and get_document_metadata follow the latest version, but page_count and the file names on get_document describe the original (root) version — check get_document_content to see whether the current version is readable.
post_document
Upload a new document.
Parameters: file, filename, plus optional title, created, correspondent, document_type, storage_path, tags, archive_serial_number, custom_fields, poll, poll_timeout_seconds.
file accepts base64-encoded contents (the universal method — works for any deployment, since the bytes travel over the wire) or an absolute file path that the server reads from its own filesystem. The path option only works when the MCP server runs on the same machine as the file (local/stdio deployments); for a remote server, use base64.
Upload is asynchronous. By default the tool returns a task UUID (track it with list_tasks). Set poll: true to wait for the consumer to finish and get the result in one call — the new document_id on success, or the consumer error on failure. poll_timeout_seconds (default 30, max 300) caps the wait; raise it for large scans where OCR is slow.
Matching algorithms
create_tag, create_correspondent, create_document_type, and create_storage_path accept a matching_algorithm (0–6). Workflow triggers accept 0–5 (no Automatic):
Value | Meaning |
0 | None |
1 | Any word |
2 | All words |
3 | Exact match |
4 | Regular expression |
5 | Fuzzy word |
6 | Automatic |
Since Paperless-ngx 3.2, Automatic matching only assigns when the classifier is confident enough (PAPERLESS_CLASSIFIER_MATCH_THRESHOLD, default 0.6), and regular-expression matching gives up after PAPERLESS_MATCH_REGEX_TIMEOUT_SECONDS (default 0.1 s) — raise it if regex rules miss on long documents.
Running the MCP Server
stdio (default)
The default mode. The server communicates over stdio — that's what every MCP client config in the Quick Start uses. You usually never run this manually; the MCP client launches it for you.
If you do want to run it directly (e.g. for debugging):
# via env vars (recommended)
PAPERLESS_URL=http://localhost:8000 PAPERLESS_API_KEY=xxx npx -y paperless-ngx-mcp
# or via CLI flags
npx -y paperless-ngx-mcp --baseUrl http://localhost:8000 --token xxxHTTP (Streamable HTTP transport)
Use the --http flag to expose the server over HTTP. --port defaults to 3000.
npx -y paperless-ngx-mcp --baseUrl http://localhost:8000 --token xxx --http --port 3000The MCP API is available at
POST /mcpon the chosen port, backed byStreamableHTTPServerTransportin stateful mode.The first request (an
initializecall) creates a session and returns anMcp-Session-Idheader; subsequent requests must send that header back to reuse the same session. Transports are kept in an in-memoryMap, so this only works for single-instance deployments.GET /mcpstreams server-initiated messages for a session;DELETE /mcpterminates it and evicts it from the map. Both require a validMcp-Session-Idheader.A legacy
GET /sse+POST /messagesSSE transport is also exposed for clients that don't yet support the streamable transport.
Session limits
Every session holds its own MCP server instance (~3.5 MB), and the HTTP port has no authentication — so sessions are bounded:
Flag | Environment variable | Default | Purpose |
|
|
| Concurrent sessions allowed. Past this, |
|
|
| Evict a session after this long with no activity. |
A client that is actively connected — including one holding a GET /mcp stream open — is never evicted, no matter how long it stays idle. Only genuinely abandoned sessions are reclaimed.
Because sessions live in memory, --http only works for single-instance deployments. Do not expose the port to an untrusted network: there is no auth, and it binds all interfaces.
Error Handling
Tool calls return clear errors when:
PAPERLESS_URLorPAPERLESS_API_KEYis missing or wrongThe Paperless-NGX server is unreachable
The underlying API rejects the operation — Paperless's own message is passed through (e.g.
{"non_field_errors":["password not specified"]} (HTTP 400)), while HTML error pages are reduced to the status lineA Paperless call doesn't finish within 90 seconds (downloads are exempt); for a timed-out write the error warns that the change may already have been applied
Tool parameters fail validation
Development
You only need this section if you're modifying the server itself. End users should follow the Quick Start instead — there's no need to clone or build.
git clone https://github.com/cubinet-code/paperless-ngx-mcp.git
cd paperless-ngx-mcp
npm install # install dependencies
npm run start # run the server with tsx (no build step)
npm run build # compile TypeScript to build/
npm test # unit tests (node:test + tsx)
npm run inspect # build, then launch @modelcontextprotocol/inspectornpm run start accepts the same flags / env vars as the built binary.
End-to-end tests
E2E tests spin up a real Paperless-NGX container via Docker Compose:
npm run test:e2e:up # start the test stack (paperless + redis)
npm run test:e2e # run the e2e suite against it
npm run test:e2e:down # tear down and remove volumesRuns against ghcr.io/paperless-ngx/paperless-ngx:3.2.1.
Built with:
@modelcontextprotocol/sdk — MCP server SDK
zod — schema validation
axios — HTTP client (with keep-alive agents, a 60s idle timeout and a 90s per-request deadline)
API Documentation
This MCP server wraps endpoints from the Paperless-NGX REST API. See the official API documentation for details on the underlying behaviour and field semantics.
License
ISC. See LICENSE.
Available Tools
108 toolsacknowledge_tasksAIdempotent
Acknowledge/dismiss completed tasks to clear them from the task list.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | Yes | Array of task IDs to acknowledge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that this is an idempotent, non-destructive mutation. The description adds useful behavioral context by stating that it applies to completed tasks and clears them from the task list. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It states the action, target, and effect efficiently; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, idempotent action with annotations covering mutability and destructiveness, the description is sufficiently complete. It omits return-value details, but with no output schema and this level of simplicity that is not a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter is already described as an array of task IDs. The description adds only the 'completed' qualifier, which is a minor semantic refinement. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the action (acknowledge/dismiss), the target (completed tasks), and the visible effect (clear them from the task list). This lets an agent distinguish it from read-only sibling tools like list_tasks and get_task_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives, and no explicit exclusions or prerequisites. The phrase 'completed tasks' implies a precondition, but the description leaves the selection logic entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_correspondentA
Create a new correspondent with optional matching pattern and algorithm for automatic document assignment.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| match | No | ||
| is_insensitive | No | Whether matching is case-insensitive | |
| matching_algorithm | No | Matching algorithm: 0=None, 1=Any word, 2=All words, 3=Exact match, 4=Regular expression, 5=Fuzzy word, 6=Automatic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false, which is minimal. The description adds that matching pattern and algorithm enable automatic document assignment, a useful behavioral clue. However, it does not disclose permissions, duplicate behavior, or side effects beyond creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence. It communicates the core action and optional configuration without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 flat parameters, one required, and an enum described in schema, the description plus schema is mostly sufficient. However, there is no output schema and no description of return value, duplicate handling, or whether match is required when matching_algorithm is nonzero, leaving some gaps for an agent invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% because name and match lack descriptions, while is_insensitive and matching_algorithm have descriptions. The description adds meaning by linking 'matching pattern and algorithm' to the purpose of automatic document assignment, but it does not explain the match parameter's format or how it interacts with the algorithm beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create'), a clear resource ('new correspondent'), and the optional matching features. This clearly distinguishes it from sibling tools like update_correspondent, delete_correspondent, and list_correspondents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when creating a new correspondent—but does not explicitly contrast it with update_correspondent or edit_correspondents_bulk. It provides no exclusions or alternative routing guidance, so usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_custom_fieldA
Create a new custom field with a specified data type (string, url, date, boolean, integer, float, monetary, documentlink, or select). For monetary fields, values must use currency code prefix format (e.g., USD10.00, GBP123.45) — NOT trailing symbol format (e.g., 10.00$).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| data_type | Yes | ||
| extra_data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the description is not required to restate mutation safety. It adds useful behavioral context by specifying the mandatory currency prefix format for monetary fields, which is a constraint on accepted values beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence with no redundant words. The core purpose is front-loaded and the monetary format exception is stated clearly and compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple create operation with a clear resource type. It lacks context on what custom fields are used for, whether names must be unique, or any side effects beyond creation. However, given the tool's simplicity and the clarity of the sibling set, it covers the most critical information without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. It only partially addresses data_type by listing the enum values (already present in the schema) and adds a note on monetary value formatting, but it does not explain the 'name' parameter or the purpose/usage of 'extra_data'. This is a significant gap given the zero coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (create) and resource (custom field), and lists the allowed data types. It clearly distinguishes from sibling create tools (e.g., create_tag, create_correspondent) by naming the resource type explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when creating a custom field) but does not explicitly discuss alternatives or when not to use it. It offers no guidance on selecting this over other create operations, though the resource name makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_document_noteA
Append a user-facing note (comment/annotation) to a document. Notes are separate from the document's searchable 'content' field — to change body text or other metadata fields, use update_document instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID | |
| note | Yes | The note text to add |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=false and destructiveHint=false, and the description is consistent with both. It adds genuine value beyond annotations by clarifying behavioral scope: the note is a separate user-facing annotation that does not touch the document's searchable content field, preventing misuse (e.g., treating the note as body text). It doesn't discuss return values or repeated-append semantics, but for a simple additive operation the safety profile is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler. The first states the core action; the second adds scope clarification and alternative routing. Every word earns its place, and the action verb is front-loaded rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-param tool with full schema coverage and no enums, nested objects, or output schema, the description covers the action, the boundary between notes and content, and the correct alternative. A small gap remains: it never describes what a successful call returns (no output schema exists), and it doesn't mention the related note-management siblings (list_document_notes, delete_document_note), but neither is essential for making a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both id ('The document ID') and note ('The note text to add') are already documented in the input schema. The description maps those roles (document id, note text) but adds no detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb + resource pair ('Append a user-facing note (comment/annotation) to a document') and explicitly distinguishes itself from update_document by stating that notes are separate from the searchable 'content' field. An agent can tell this tool apart from the many document-related siblings without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: it states what this tool is for (adding a user-facing note) and when it should NOT be used ('to change body text or other metadata fields'), naming update_document as the alternative. This is exactly the when/when-not/alternatives pattern the rubric rewards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_document_typeA
Create a new document type with optional matching pattern and algorithm for automatic document classification.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| match | No | ||
| is_insensitive | No | Whether matching is case-insensitive | |
| matching_algorithm | No | Matching algorithm: 0=None, 1=Any word, 2=All words, 3=Exact match, 4=Regular expression, 5=Fuzzy word, 6=Automatic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover read-only and destructive hints, so the description only needed to add context beyond them. It adds that matching pattern and algorithm are used for automatic document classification, but it does not disclose potential side effects on existing documents or validation behavior. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the primary action and includes only meaningful detail: the resource type, the optional configuration, and the purpose. There is no repetition of schema fields or annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity create operation, the description plus the schema covers the essential call intent: required name, optional matching pattern, and algorithm for classification. It does not explain the exact format of 'match' or any return value, but those are minor given the absence of an output schema and the simplicity of the resource.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the description partially compensates by identifying 'matching pattern' for the match parameter and 'algorithm' for matching_algorithm. However, it adds no semantic detail for name or is_insensitive, and it does not fully bridge the gap left by the undocumented match parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create'), resource ('new document type'), and scope ('optional matching pattern and algorithm for automatic document classification'). It clearly distinguishes this from sibling operations like update_document_type, delete_document_type, and list_document_types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended use: when a new document type needs to be created. It does not explicitly name alternatives or exclusion criteria, but the create verb and the sibling tool names make the appropriate context clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_mail_accountA
Create an IMAP account for Paperless to fetch mail from. Nothing is fetched until a mail rule uses the account (create_mail_rule). Check the connection first with test_mail_account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| owner | No | ||
| is_token | No | true when `password` is an OAuth/app token | |
| password | Yes | IMAP password or OAuth token. Write-only: Paperless returns it masked as all asterisks (at least 10, one per character), and sending any all-asterisks value back leaves the stored password unchanged. | |
| username | Yes | ||
| imap_port | Yes | Usually 993 (SSL) or 143 (STARTTLS / none) | |
| imap_server | Yes | ||
| account_type | No | 1=IMAP, 2=Gmail OAuth, 3=Outlook OAuth | |
| character_set | No | e.g. UTF-8 (default) or US-ASCII | |
| imap_security | No | 1=no encryption, 2=SSL, 3=STARTTLS |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint=false and destructiveHint=false, so the description is not required to repeat that. It adds useful behavioral context beyond annotations: the account is inert until a rule references it, and testing is recommended. This informs the agent of side effects (none immediate) and a recommended verification step. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action is front-loaded, and the additional context about mail rules and testing is concise and directly useful. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters and no output schema, the description is quite brief. It explains the tool's role in the mail pipeline but does not describe return values, error conditions, or parameter nuances beyond what the schema offers. Given the complexity, more guidance (e.g., expected response, duplicate handling) would improve completeness, but the existing context is not misleading.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, so several parameters (name, imap_server, username, owner, is_token, character_set) lack schema-level explanations. The description does not compensate for this gap; it mentions no parameters explicitly. However, the schema does document the key ones (password masking, port defaults, account_type, imap_security), so the description adds little value beyond what the schema already provides. Baseline 3 is appropriate given partial schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb-resource combination: 'Create an IMAP account for Paperless to fetch mail from.' It distinguishes this from sibling operations like update_mail_account, list_mail_accounts, and test_mail_account by focusing on the creation action and the account's purpose. The mention of related tools further clarifies its role in the mail workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it explains that no mail is fetched until a mail rule is created (create_mail_rule), and advises checking connectivity with test_mail_account first. This implicitly tells the agent when to use this tool (when setting up a new mail source) and gives a prerequisite step. It does not explicitly enumerate alternatives or exclusions, but the guidance is actionable and context-rich.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_mail_ruleB
Create a mail rule on a mail account: which folder and mails to consider, which attachments to import, and what to assign to the resulting documents.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| order | No | Rules run in ascending order | |
| owner | No | ||
| action | No | What happens to processed mail: 1=delete, 2=move to action_parameter folder, 3=mark as read (default), 4=flag, 5=tag with action_parameter | |
| folder | No | IMAP folder (default INBOX); subfolders use the server's delimiter, e.g. INBOX.Invoices | |
| account | Yes | Mail account ID | |
| enabled | No | ||
| filter_to | No | ||
| pdf_layout | No | Mail-to-PDF layout: 0=system default, 1=text then HTML, 2=HTML then text, 3=HTML only, 4=text only | |
| assign_tags | No | ||
| filter_body | No | ||
| filter_from | No | ||
| maximum_age | No | Only mails younger than this many days (default 30) | |
| filter_subject | No | ||
| attachment_type | No | 1=attachments only (default), 2=all files including inline | |
| stop_processing | No | Skip later rules once this rule queued a document | |
| action_parameter | No | ||
| assign_title_from | No | 1=mail subject (default), 2=attachment filename, 3=don't assign | |
| consumption_scope | No | 1=attachments only (default), 2=whole mail as .eml, 3=.eml plus attachments as separate documents | |
| assign_correspondent | No | ||
| assign_document_type | No | ||
| assign_owner_from_rule | No | ||
| assign_correspondent_from | No | 1=don't assign (default), 2=sender mail address, 3=sender name (falls back to address), 4=the correspondent in assign_correspondent. ⚠️ 2 and 3 CREATE a new correspondent for every distinct sender string — the usual cause of duplicate correspondents. Prefer 4, or 1 plus matching rules on existing correspondents. | |
| filter_attachment_filename_exclude | No | Skip attachments whose whole filename matches | |
| filter_attachment_filename_include | No | Only attachments whose whole filename matches, e.g. *.pdf |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows it mutates but is not destructive. The description adds no behavioral context beyond 'Create', such as side effects, permissions, or how rules interact with existing mail processing. This falls short of the burden when annotations are minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the core action and resource, and communicates the essential function without waste. It is appropriately concise for a tool with a rich schema that carries parameter-level detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This tool has 25 parameters, no output schema, and only a two-parameter minimal requirement. A one-line description is not enough for an agent to know how to construct a valid request, what the response looks like, or what important constraints exist. The schema covers some parameters but the description does not fill the gaps for the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 52% schema description coverage, the schema already documents many parameters. However, the description's summary ('which folder and mails to consider, which attachments to import, and what to assign') doesn't map to specific parameter names or add meaning beyond what parameter names like folder, filter_from, attachment_type, and assign_* already imply. It fails to compensate for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and resource ('mail rule'), and states what the rule controls (folder, mails, attachments, assignments). It clearly distinguishes from siblings like update_mail_rule or delete_mail_rule by the create verb and the high-level behavior described.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus update_mail_rule, delete_mail_rule, or process_mail_account. The description does not mention conditions, prerequisites, or alternatives, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_saved_viewB
Create a new saved view with filter rules and sort configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| sort_field | No | Field to sort by, e.g. 'created', 'title', 'correspondent__name' | |
| filter_rules | No | ||
| sort_reverse | No | ||
| show_in_sidebar | No | ||
| show_on_dashboard | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-destructive operation, and the description adds no behavioral context beyond the basic creation action. It does not mention persistence side effects, required permissions, uniqueness constraints, or any other behavior that would help an agent anticipate consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly worded sentence with no filler. The action, resource, and primary configuration concepts are front-loaded and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, low schema coverage, no output schema, and no usage guidance, the description is too sparse for an agent to confidently invoke the tool with correct parameters. It omits the required name field and the optional boolean flags, and says nothing about what a successful creation returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description needed to compensate for undocumented parameters. It gestures at 'filter rules and sort configuration' but does not explain the required name parameter, the filter_rules object shape, or the meaning of sort_reverse, show_in_sidebar, and show_on_dashboard.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Create') and resource ('saved view'), and adds the distinguishing content ('filter rules and sort configuration'). It is immediately clear what this tool does and how it differs from list/get/update/delete saved-view siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'Create a new' implies that this tool is for creating saved views rather than updating or listing them. However, the description does not explicitly state when to prefer it over update_saved_view, list_saved_views, or get_saved_view, nor does it provide any conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_storage_pathB
Create a new storage path with a name, path template, and optional matching rules.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| path | Yes | The path template, e.g. '{{ created_year }}/{{ correspondent }}/{{ title }}' | |
| match | No | ||
| is_insensitive | No | Whether matching is case-insensitive | |
| matching_algorithm | No | Matching algorithm: 0=None, 1=Any word, 2=All words, 3=Exact match, 4=Regular expression, 5=Fuzzy word, 6=Automatic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false and destructiveHint=false, which are generic. The description does not disclose any behavioral traits beyond the fact that it creates something. It omits side effects, idempotency, whether an existing name is rejected, auth requirements, or response behavior. For a mutation tool with minimal annotations, the description carries the burden and fails to provide meaningful transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence of about 16 words. It front-loads the action ('Create a new storage path') and includes all essential elements without filler. Every word contributes to understanding the tool's basic function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, 2 required, and no output schema, the description is too thin for an agent to call the tool correctly. It does not mention matching rule semantics, uniqueness constraints, what the response contains, or any validation rules. The schema fills some gaps but the overall definition lacks essential context for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60% (path, is_insensitive, matching_algorithm have descriptions; name and match do not). The description adds grouping by calling match-related fields 'optional matching rules,' which signals their optional nature. However, it does not explain what 'match' is or how matching_algorithm values behave, leaving the undocumented params only marginally clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('storage path'), and lists the key fields (name, path template, optional matching rules). This clearly distinguishes it from sibling operations like update_storage_path, delete_storage_path, or test_storage_path, leaving no ambiguity about the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool instead of alternatives. It does not mention that this is for creating new storage paths only, nor contrast it with update_storage_path or test_storage_path. An agent gets no context about prerequisites or conditions that would select this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tagB
Create a new tag with optional color, matching pattern, and matching algorithm for automatic document tagging.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| color | No | ||
| match | No | ||
| parent | No | Parent tag ID for hierarchical tags | |
| is_insensitive | No | Whether matching is case-insensitive | |
| matching_algorithm | No | Matching algorithm: 0=None, 1=Any word, 2=All words, 3=Exact match, 4=Regular expression, 5=Fuzzy word, 6=Automatic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=false and destructiveHint=false, so the safety profile is known. The description adds no new behavioral traits: no mention of return values, error handling, duplicate-name behavior, authentication requirements, or side effects beyond 'create a new tag'. It restates the obvious mutation without enriching the behavioral model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with the primary action front-loaded ('Create a new tag'). It lists the optional features without unnecessary detail, making it efficient to parse. It earns a 4 rather than 5 because it could more explicitly mention the required name field or the hierarchical 'parent' option in the same space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no output schema, and only two generic annotations, the description is thin. It fails to mention that 'name' is required, what the tool returns (e.g., the created tag or ID), or any side effects like automatic matching configuration. The schema carries some parameter explanations, but the description does not fill the missing behavioral and output context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 50% schema description coverage, the description adds some meaning: it labels 'match' as a 'matching pattern' and connects 'matching_algorithm' to automatic tagging, which aids understanding beyond the schema. However, it doesn't explain 'name', 'parent', or 'is_insensitive', which the schema partially covers. It adds value but not comprehensive compensation for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a new tag'. It also names the key optional fields (color, matching pattern, matching algorithm) and the purpose ('automatic document tagging'), which clearly distinguishes it from read-only and update/delete tag siblings. This is unambiguous and resource-specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives like update_tag or edit_tags_bulk. The phrase 'for automatic document tagging' hints at the tag's intended role but does not help an agent decide between this and other tag-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workflowA
Create a complete workflow — the automation Paperless actually runs — with its triggers and actions in one call. The workflow runs its actions in order whenever ANY of its triggers matches. Example: strip PDF passwords from API uploads = triggers [{type: 2, sources: [2]}] + actions [{type: 5, passwords: ["secret"]}]. Triggers and actions are given as full objects (same fields as create_workflow_trigger / create_workflow_action). Paperless rejects a remote OCR action (7) without a consumption-started trigger (1), and an apply-AI-suggestions action (8) with only consumption-started triggers.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| order | No | Run order relative to other workflows (lower runs first) | |
| actions | Yes | New actions (any id is ignored) | |
| enabled | No | Default true | |
| triggers | Yes | New triggers (any id is ignored) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the simple readOnlyHint/destructiveHint annotations, the description adds meaningful run semantics: actions execute in order when any trigger matches, and it discloses cross-field validation constraints (remote OCR requires consumption-started trigger; apply-AI-suggestions cannot use only consumption-started triggers). This is substantial behavioral context for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences deliver the core purpose, execution semantics, a concrete example, and critical validation constraints with no filler. The most important information is front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema, the description plus rich input schema covers creation semantics, trigger/action object shapes, example usage, and hard validation rules. It could be slightly more complete by stating the return shape or explicitly contrasting with the single-trigger/action creation tools, but overall it is strongly sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the schema already documents most parameters. The description adds value beyond the schema with a concrete example mapping trigger and action types to a real scenario, and by clarifying that triggers/actions use the same full object shapes as the sibling create_workflow_trigger/create_workflow_action tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a complete workflow — the automation Paperless actually runs — with its triggers and actions in one call.' This clearly distinguishes it from sibling tools like create_workflow_trigger and create_workflow_action by emphasizing it creates the full runnable workflow rather than a component.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when to use this tool: when you want a complete workflow with triggers and actions in one call. It also references create_workflow_trigger and create_workflow_action as the sources for the full object shape, which helps an agent route correctly, though it does not explicitly state when to prefer those separate tools instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workflow_actionA
Create ONE standalone workflow action. On its own an action does nothing, and Paperless deletes actions that belong to no workflow whenever any workflow is updated. To build an automation, use create_workflow with the actions inline; to change an action inside a workflow, use update_workflow (or update_workflow_action with the action id from get_workflow).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Action type: 1=assignment, 2=removal, 3=email, 4=webhook, 5=password removal (needs passwords), 6=move to trash, 7=remote OCR (its workflow must have a type-1 consumption-started trigger), 8=apply AI suggestions (needs ai_suggestion_fields; its workflow must have a trigger other than type 1) | |
| No | Type 3: email configuration | ||
| webhook | No | Type 4: webhook configuration | |
| passwords | No | Type 5 (required): PDF passwords to try, in order. The unlocked file is stored as a new version of the document. Tools return them masked ("**********"); send a masked list back unchanged to keep the stored passwords. | |
| assign_tags | No | ||
| remove_tags | No | ||
| assign_owner | No | ||
| assign_title | No | Type 1: Jinja2 title template | |
| remove_owners | No | ||
| remove_all_tags | No | ||
| ai_create_missing | No | Type 8: create suggested tags/correspondents/document types/storage paths that don't exist yet | |
| assign_view_users | No | ||
| remove_all_owners | No | ||
| remove_view_users | No | ||
| assign_view_groups | No | ||
| remove_view_groups | No | ||
| assign_change_users | No | ||
| assign_storage_path | No | ||
| remove_change_users | No | ||
| ai_suggestion_fields | No | Type 8 (required): which AI suggestions to apply. Needs AI enabled in Paperless. | |
| assign_change_groups | No | ||
| assign_correspondent | No | ||
| assign_custom_fields | No | Type 1: custom field IDs to add | |
| assign_document_type | No | ||
| remove_change_groups | No | ||
| remove_custom_fields | No | ||
| remove_storage_paths | No | ||
| ai_overwrite_existing | No | Type 8: apply suggestions even when the document already has a value | |
| remove_correspondents | No | ||
| remove_document_types | No | ||
| remove_all_permissions | No | ||
| remove_all_custom_fields | No | ||
| remove_all_storage_paths | No | ||
| remove_all_correspondents | No | ||
| remove_all_document_types | No | ||
| assign_custom_fields_values | No | Type 1: values for assign_custom_fields keyed by custom field ID, e.g. {"7": "2026-01-01"}. The value for the custom field. For monetary fields, use currency code prefix format (e.g., USD10.00, GBP123.45, EUR9.99) — NOT trailing symbol format (e.g., 10.00$). For documentlink fields, use a single document ID (e.g., 123) or an array of document IDs (e.g., [123, 456]). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals a critical side effect: Paperless deletes unassigned actions whenever any workflow is updated. It also clarifies that a standalone action is inert, giving an agent the exact risk model before invoking a non-read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the warning front-loaded before the routing advice. Every sentence earns its place and none repeats schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 36-parameter, side-effect-prone creation tool with no annotations and no output schema, the description covers behavior, risk, and sibling routing well. It is missing only a note on what the tool returns (e.g., the created action id), which an agent would need without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description text itself adds no parameter guidance, and with only 28% schema coverage it does not compensate for the roughly 26 parameters lacking schema descriptions. The strong type-code mapping lives in the schema, not in the tool description, so this dimension falls short despite the rich conditional objects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Create ONE standalone workflow action') and immediately clarifies what it is not: a standalone action does nothing on its own. This differentiates it from create_workflow, so an agent can select it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternatives and the conditions that select them: use create_workflow with inline actions for automation, and update_workflow/update_workflow_action for modifying an existing action. The 'standalone' framing plus exclusion of the obvious sibling leaves no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workflow_triggerA
Create ONE standalone workflow trigger. On its own a trigger does nothing, and Paperless deletes triggers that belong to no workflow whenever any workflow is updated. To build an automation, use create_workflow with the triggers inline; to change a trigger inside a workflow, use update_workflow (or update_workflow_trigger with the trigger id from get_workflow).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Trigger type: 1=consumption started, 2=document added, 3=document updated, 4=scheduled | |
| match | No | ||
| sources | No | Consumption sources: 1=consume folder, 2=API upload, 3=mail fetch, 4=web UI (default [1,2,3]) | |
| filter_path | No | Path pattern, * wildcards allowed | |
| is_insensitive | No | ||
| filter_filename | No | Filename pattern (whole name must match), * wildcards allowed | |
| filter_has_tags | No | Document has ANY of these tags | |
| filter_mailrule | No | Only documents fetched by this mail rule ID | |
| matching_algorithm | No | Content match for `match`: 0=none, 1=any word, 2=all words, 3=exact, 4=regular expression, 5=fuzzy word | |
| filter_has_all_tags | No | Document has ALL of these tags | |
| filter_has_not_tags | No | Document has NONE of these tags | |
| schedule_date_field | No | Type 4: date the schedule is based on | |
| schedule_offset_days | No | Type 4: days to offset from schedule_date_field | |
| schedule_is_recurring | No | ||
| filter_custom_field_query | No | Custom-field filter as a JSON expression passed as a string. A condition is [field, operator, value], where field is the custom field's name or ID. Combine conditions with ["AND", [cond, …]] or ["OR", [cond, …]], and negate with ["NOT", cond]. Valid operators depend on the field's data type (e.g. exact, in, isnull, exists, icontains, gt, gte, lt, lte, range); pick an invalid one and Paperless names the valid ones. Examples: '["Amount", "gte", 100]', '["AND", [["Due", "lt", "2026-10-01"], ["Paid", "exact", false]]]'. | |
| schedule_date_custom_field | No | Type 4 with schedule_date_field=custom_field: the date custom field ID | |
| filter_has_any_storage_paths | No | Storage path is one of these | |
| filter_has_not_storage_paths | No | Storage path is none of these | |
| filter_has_any_correspondents | No | Correspondent is one of these | |
| filter_has_any_document_types | No | Document type is one of these | |
| filter_has_not_correspondents | No | Correspondent is none of these | |
| filter_has_not_document_types | No | Document type is none of these | |
| schedule_recurring_interval_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false, which is minimal. The description adds critical behavioral context: 'On its own a trigger does nothing, and Paperless deletes triggers that belong to no workflow whenever any workflow is updated.' This warns about a non-obvious destructive side effect (orphaned triggers being deleted) that annotations don't capture. It doesn't fully explain all side effects, but it discloses the most important behavioral trap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste. The critical warning about orphaned triggers is front-loaded, and the alternative routing is compact. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 23-parameter tool with 83% schema coverage and no output schema, the description covers the essential context: what the tool does, the critical deletion behavior, and how to route to alternatives. It doesn't explain return values, but with no output schema and a create operation, that's a minor gap. The warning about deletion is the most important contextual information and it's present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents most parameters well. The description doesn't add parameter-level detail beyond what the schema provides, but it does clarify the purpose of the trigger in context. Baseline 3 is appropriate since the schema carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates ONE standalone workflow trigger, and immediately distinguishes it from create_workflow (which creates workflows with triggers inline) and update_workflow/update_workflow_trigger (which modify triggers). The verb 'create' plus the specific resource 'standalone workflow trigger' is precise and differentiates it from the many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool vs alternatives: 'To build an automation, use create_workflow with the triggers inline; to change a trigger inside a workflow, use update_workflow (or update_workflow_trigger with the trigger id from get_workflow).' This is explicit when/when-not guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_correspondentADestructive
⚠️ DESTRUCTIVE: Permanently delete a correspondent from the entire system. This will affect ALL documents that use this correspondent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's job is lighter. It adds valuable context beyond annotations by disclosing the blast radius: the deletion affects ALL documents that use the correspondent and is system-wide. This meaningfully raises transparency even though auth requirements and error behavior are not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler, and the destructive warning is front-loaded. Every part contributes either to warning or clarifying the scope of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete with destructiveHint and a confirm field already specified in the schema, the description covers the critical risk: permanence and cascading impact on documents. It does not describe response or error behavior, but the operation is straightforward and the main hazards are disclosed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents the confirm parameter well, and the description reinforces the destructive nature that confirm is tied to. The id parameter has no description in the schema and the description does not compensate, though the name makes its referent reasonably clear. With 50% schema coverage, this is adequate but not enriched.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: permanently delete a correspondent, and clarifies the scope is the entire system. It does not explicitly differentiate from sibling tools like update_correspondent or edit_correspondents_bulk, though the deletion semantics are clear from the name and wording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for permanently removing a correspondent and warns about the consequences, which gives an implicit sense of when to use it. However, it does not explicitly state when to choose it over alternatives or mention prerequisites such as the confirm flag, which is left to the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_custom_fieldADestructive
⚠️ DESTRUCTIVE: Permanently delete a custom field from the entire system. This will remove the field from ALL documents that use it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the 'DESTRUCTIVE' warning reinforces rather than adds. However, the description adds meaningful context beyond annotations: the operation is permanent and cascades by removing the field from ALL documents that use it. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The destructive warning and core action are front-loaded, and the second sentence adds the essential cascade consequence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool (2 params, no output schema), the description covers the action, permanence, scope, and the key consequence for documents. Minor gaps: no error behavior for nonexistent fields, but nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is exactly 50%: the confirm parameter is already described in the schema ('Must be true to confirm this destructive operation'), and the id parameter's meaning is inferable from the tool name and description ('delete a custom field'). The description adds no explicit parameter detail but doesn't need much given the low complexity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete'), a specific resource ('custom field'), and the scope ('from the entire system'). It clearly distinguishes this from sibling tools like update_custom_field, edit_custom_fields_bulk, and other delete_* tools targeting different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear context: this is for permanent, system-wide removal, so an agent understands when this tool is appropriate. It doesn't explicitly name alternatives or exclusions, but the permanent/global framing implies it should only be used when a field must be removed everywhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_documentADestructive
Move a document to trash (soft-delete). The document remains recoverable until the trash is emptied or the retention window expires (~30 days). Use empty_trash for permanent deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the document to delete | |
| confirm | Yes | Must be set to true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but the description adds critical context about the soft-delete nature, recovery window (~30 days), and the condition under which data is permanently lost. This goes beyond the simple destructive flag and informs the agent of consequences and reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the action, the recovery consequence, and the alternative are presented in a logical, front-loaded order. Every sentence adds distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive operation, the description covers what happens, the recovery window, and the alternative for permanent deletion. With annotations and full schema coverage, nothing essential is missing for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'id' and 'confirm' are fully described in the schema. The description adds no additional parameter-specific meaning (e.g., id format or confirm semantics), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Move a document to trash') and resource ('document'), immediately clarifying the operation as a soft-delete. It distinguishes itself from permanent deletion by explicitly naming empty_trash, and from other delete_* siblings by focusing on documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool (soft-delete with recoverability) and provides a direct alternative: 'Use empty_trash for permanent deletion.' This is clear routing that prevents an agent from accidentally choosing permanent deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_document_noteBDestructive
⚠️ DESTRUCTIVE: Delete a note from a document.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID | |
| confirm | Yes | Must be true to confirm this destructive operation | |
| note_id | Yes | The note ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the warning is redundant but reinforces the safety profile. The description adds the confirmation requirement via the 'confirm' parameter, which is useful context. However, it does not disclose what happens to associated data or whether the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with the warning flag front-loaded. It is concise and to the point, though it could be slightly more structured by separating the warning from the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 scalar params, no output schema), the description is adequate. The destructive nature is highlighted, and the confirm parameter is self-explanatory. However, missing usage guidance and potential side effects mean it falls short of being fully complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter (id, note_id, confirm) having a description. The description adds no extra semantic meaning beyond the schema, so baseline 3 is appropriate; the confirm parameter's purpose is already clear from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Delete') and a specific resource ('a note from a document'). It distinguishes from sibling tools by targeting notes specifically, though it does not explicitly differentiate from other delete tools like delete_tag or delete_document_version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives or when not to use it. It does not mention prerequisites, such as needing the document ID and note ID, or that the operation is irreversible, which would help agents decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_document_typeADestructive
⚠️ DESTRUCTIVE: Permanently delete a document type from the entire system. This will affect ALL documents that use this type.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description's extra context about permanence, system-wide impact, and cascade to all documents adds meaningful behavioral transparency. It could be more precise about what 'affect' means for the documents, but it goes beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the destructive warning front-loaded. Every word adds necessary clarity about permanence and scope, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive delete with annotations and a confirm flag, the description conveys the key risk and consequence. It could clarify what happens to the affected documents, but it is substantially complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter-level meaning. The confirm parameter has a schema description, but the id parameter is only typed as a number with no explanation of what it references. With 50% schema coverage, the description should have compensated but did not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: permanently delete a document type. It also clarifies system-wide scope and the impact on all documents using that type, which distinguishes it from sibling tools like delete_document or update_document_type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The destructive warning and permanence imply when this tool is appropriate, but the description does not explicitly name alternatives or state when-not-to-use. It lacks direct routing guidance such as 'use update_document_type to modify instead'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_document_versionADestructive
⚠️ DESTRUCTIVE: Permanently delete one non-root version of a document. The root (original) version can't be deleted — delete the document instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID | |
| confirm | Yes | Must be true to confirm this destructive operation | |
| version_id | Yes | The version ID from the document's `versions` (is_root must be false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's warning aligns. It adds value by specifying the root-version restriction and the permanence of deletion, which are not in the annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste. The destructive warning is front-loaded, and the root-version constraint is stated immediately. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-resource delete tool with full schema coverage and clear annotations, the description covers the key behavioral constraints. It doesn't mention return values, but there's no output schema and the operation is simple enough that this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds context about the root-version restriction but doesn't add new parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete'), a specific resource ('one non-root version of a document'), and a critical constraint (root version can't be deleted). It clearly distinguishes from sibling tools like delete_document and upload_document_version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns about the destructive nature and the root-version exclusion, which tells the agent when NOT to use it (for root versions). It doesn't explicitly name alternatives like delete_document for root versions, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_mail_accountADestructive
⚠️ DESTRUCTIVE: Permanently delete a mail account and stop fetching from it. Mail rules using it are deleted too. Already-imported documents are not affected.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description adds real value by spelling out consequences: mail rules using the account are also deleted, fetching stops, but imported documents remain untouched. This goes beyond the binary annotation and gives the agent a precise picture of collateral effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence with the destructive warning front-loaded. Every clause adds useful consequence information, and there is no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter operation, the description covers the main action, cascade deletion, and what is unaffected. The schema already documents that confirm must be true. A minor gap is that id's exact semantics are not described, but this is still largely sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: the confirm parameter is documented, but id is just a bare number. The description does not compensate by explaining that id identifies the mail account to be deleted or how it relates to confirm, so an agent must infer that meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete') and resource ('mail account'), making the action unmistakable. It also clarifies permanence and the stop-fetching effect, which separates it from create/update/test/process account siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when the tool is appropriate: when a mail account must be permanently removed and no longer fetched. It does not explicitly name alternatives or exclusion conditions, but the sibling context makes the usage obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_mail_ruleADestructive
⚠️ DESTRUCTIVE: Permanently delete a mail rule. Already-imported documents are not affected.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds useful context beyond that: the deletion is permanent and already-imported documents are not affected. This clarifies the scope and side effects without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loads the destructive warning, and includes no redundant wording. Every clause contributes meaningful information about the operation and its consequences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive delete with a confirm flag in the schema, the description plus annotations cover the essential behavior, permanence, and non-scope of the operation. It does not explain return values or error cases, but the low complexity and absence of an output schema make this acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with only the confirm parameter documented in the schema. The description implies that id refers to the mail rule to delete, which adds some meaning, but it does not elaborate on how to obtain or validate the id, and confirm semantics are left entirely to the schema. It provides partial but not full compensation for the missing id description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource (permanently delete a mail rule) and adds the permanence qualifier, which clearly distinguishes it from update or non-destructive actions. It also isolates the mail-rule resource, separating it from siblings like delete_mail_account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as update_mail_rule, list_mail_rules, or delete_mail_account. The description implies use for deleting a mail rule but offers no prerequisites, exclusions, or routing context beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_saved_viewBDestructive
⚠️ DESTRUCTIVE: Permanently delete a saved view.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds 'permanently' and a warning, which is consistent and slightly extends the annotation. It does not disclose other behavioral aspects like the need for confirmation (though the schema covers that) or consequences of deleting a referenced view. Given the annotation coverage, the bar is lower, and the description adds some context but not rich detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with a warning prefix, front-loading the destructive nature. It is efficient and wastes no words, though it is minimal. The structure is clear and appropriate for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation, the description conveys the core action and permanence. It does not explain the return value or error behavior (e.g., what happens if the id doesn't exist), but the annotations and schema cover safety and confirmation. The description is adequate but leaves some context to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only the confirm parameter has a description). The description does not mention either parameter, leaving the 'id' parameter entirely undocumented. It fails to compensate for the schema gap by explaining what id refers to. This is a significant omission for a tool with two required parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Permanently delete a saved view' uses a specific verb and resource, clearly stating the action. It distinguishes itself from sibling delete tools by naming the resource type, though it relies on the tool name for disambiguation. It adds the qualifier 'permanently' which is helpful.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as update_saved_view or get_saved_view. It only warns that the operation is destructive, which is cautionary, not a usage directive. There is no mention of when not to use it or what to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_storage_pathADestructive
⚠️ DESTRUCTIVE: Permanently delete a storage path from the entire system. This will affect ALL documents that use this storage path.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey destructiveHint=true, and the description adds meaningful context beyond that: the deletion is permanent, system-wide, and impacts all documents using the path. However, it stops short of clarifying whether documents are deleted, unlinked, or left in an invalid state, which would make the behavior fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences with the destructive warning front-loaded. Every phrase earns its place, and the all-caps warning effectively signals risk without adding fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description leaves important operational details unresolved: what exactly happens to documents that reference the path, whether deletion can fail if documents are still using it, and what the response or confirmation flow entails. The warning is strong but the operational semantics are incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the 'id' parameter has no description in the schema. The tool description does not compensate by explaining that 'id' refers to the storage path's identifier or how 'confirm' relates to the destructive nature beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact verb 'delete' and resource 'storage path', and clarifies the scope ('from the entire system') and the consequence ('affect ALL documents that use this storage path'). This clearly distinguishes it from sibling tools like update_storage_path, test_storage_path, and create_storage_path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The warning explains the impact of deletion, but it does not say when to use this tool versus siblings such as update_storage_path, nor does it suggest reassigning documents first or avoiding deletion while documents still reference the path. Usage context is only implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tagADestructive
⚠️ DESTRUCTIVE: Permanently delete a tag from the entire system. This will remove the tag from ALL documents that use it. Use with extreme caution.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnly=false, so the description's warning is consistent with the structured metadata. It adds valuable behavioral context by disclosing the cascade effect: the deletion propagates to all documents using the tag and is permanent. This goes beyond what the annotations alone state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the destructive warning, with no filler. Every clause either states the action, the consequence, or the caution.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destroy operation, the combination of description and schema covers the target entity, the global cascade, the permanence, the confirmation requirement, and the safety profile. No output schema is needed, and an agent has enough information to decide whether to call the tool and what to pass.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not directly explain the `id` or `confirm` parameters, and the schema only documents `confirm` (50% coverage). It does add implicit meaning by defining what object is being deleted, which makes `id` interpretable as the tag identifier, but it does not compensate for the undocumented `id` field. The warning also provides context for why `confirm` exists, though the schema already states its requirement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with an explicit verb and object ('Permanently delete a tag') and clarifies the scope ('from the entire system'). It differentiates itself from sibling read/update tools (list_tags, get_tag, update_tag) by emphasizing permanent, system-wide deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The destructive consequence ('remove the tag from ALL documents') gives the agent a clear condition to evaluate before choosing this tool, and 'Use with extreme caution' is an explicit warning. However, it does not name any alternative (e.g., update_tag) or state when not to use it, so usage guidance is mostly implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_workflowADestructive
⚠️ DESTRUCTIVE: Permanently delete a workflow. Documents it already processed are not changed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds valuable context beyond the annotations: the deletion is permanent, and documents already processed by the workflow are not affected. This is genuinely useful behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: two short sentences that front-load the destructive warning and then add the key side-effect clarification. Every word earns its place and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete tool with a confirm flag already documented in the schema, the description covers the essential side-effect and permanence. It does not mention return behavior or prerequisites, but these are largely unnecessary for this operation, so the description is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: the confirm parameter is described, but id has no schema description. The tool description does not compensate by explaining that id identifies the workflow or how confirm must be supplied, so it adds little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('delete') and resource ('workflow'), and clarifies that the deletion is permanent. It clearly distinguishes this from related tools like delete_workflow_action or delete_workflow_trigger by stating exactly what object is removed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over alternatives such as delete_workflow_action, disable/update_workflow, or when deletion should be avoided. The destructive warning implies caution, but it does not provide explicit usage conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_workflow_actionADestructive
⚠️ DESTRUCTIVE: Permanently delete a workflow action.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as destructive and not read-only, so the description's warning is largely redundant, but 'permanently' adds the important irreversibility detail. This is meaningful because sibling tools include restore_from_trash, implying some deletions may be reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one front-loaded warning plus a clear action. Every word earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two simple parameters, a required confirmation flag, a destructiveHint, and no output schema, the description plus schema gives an agent what it needs to invoke the tool safely. The only minor omission is any hint of the response value or side effects on workflows, which is usually trivial for delete operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents 'confirm' as a required safety flag, and 'id' is inferable as the workflow action identifier from the tool name and description. The description itself adds no explicit parameter detail, but the moderate schema coverage leaves no serious ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('delete') and resource ('workflow action') and states the operation is permanent. This clearly distinguishes it from sibling tools such as update_workflow_action, get_workflow_action, delete_workflow, and delete_workflow_trigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'permanently delete a workflow action' implies the natural use case: call this when the agent intends to remove a workflow action for good. It does not, however, contrast with alternatives or state when not to use it, leaving the guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_workflow_triggerBDestructive
⚠️ DESTRUCTIVE: Permanently delete a workflow trigger.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| confirm | Yes | Must be true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly warns 'DESTRUCTIVE' and states 'Permanently delete', which aligns with and reinforces the annotations (destructiveHint=true, readOnlyHint=false). It adds the 'permanently' qualifier, which is useful context beyond the annotation. However, it does not disclose additional behavioral details such as cascading effects, irreversibility beyond the obvious, or whether related resources are affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and front-loads the critical destructive warning. It earns its place with the 'permanently' qualifier, though it could be slightly more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive operation, the description plus annotations and schema are mostly sufficient. However, there is no output schema and no mention of what happens after deletion (e.g., success response, errors), and the 'id' parameter is undocumented. The description is adequate but leaves minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: the 'confirm' parameter is documented in the schema, but 'id' has no description. The tool description does not add any parameter-level meaning beyond the schema. Since the schema covers half the parameters and the description adds nothing, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete') and resource ('workflow trigger'), clearly distinguishing it from sibling tools like delete_workflow or delete_workflow_action. It is concise and unambiguous, though it doesn't explicitly differentiate from the broader delete_* family beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any context about prerequisites or consequences beyond the destructive warning. The description implies it is for deleting a workflow trigger, but it does not explain when a user should choose this over update_workflow_trigger or other delete tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_documentBRead-only
Download a document file by ID. Returns the document as a base64-encoded resource.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| original | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the description doesn't need to restate safety. The description adds the base64 return format, which is useful behavioral context. However, it doesn't disclose details like whether 'original' affects the response, file size limits, or whether the download is a direct binary vs. wrapped in JSON. With annotations covering the read-only nature, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the action and resource. It earns its place by adding the base64 return detail. It could be slightly more informative about parameters, but it is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a download tool with no output schema and 0% schema description coverage, the description is too thin. It doesn't explain the 'original' parameter, the response envelope, or how this differs from get_document_content/download_documents_bulk. An agent would need to inspect the schema or guess to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the two parameters. It only explains 'id' implicitly ('by ID') and says nothing about 'original'. The description adds minimal meaning beyond the schema, leaving the 'original' parameter's purpose and effect undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Download') and resource ('a document file by ID'), and clarifies the return format ('base64-encoded resource'). It is clear enough to distinguish from siblings like get_document_content or get_document_preview, though it doesn't explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call it when you need the raw document file as base64. It does not explicitly state when to use alternatives like get_document_content, get_document_preview, or download_documents_bulk, nor does it mention any exclusions or prerequisites. The context is clear but not fully elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_documents_bulkBRead-only
Download multiple documents as a ZIP archive. Returns base64-encoded ZIP file.
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Which file versions to include (default: both) | |
| documents | Yes | Array of document IDs to download (max 500) | |
| compression | No | ZIP compression method (default: none) | |
| follow_formatting | No | Use document storage path formatting for filenames |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds that the response is a base64-encoded ZIP file, which is useful behavioral context. However, it doesn't disclose details like file size limits, timeout behavior, or how the ZIP is structured (e.g., folder hierarchy), which could matter for large bulk downloads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action and return format are front-loaded. It could arguably include a hint about the 'content' parameter's effect on ZIP contents, but the schema covers that.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk download tool with readOnlyHint=true and full schema coverage, the description is mostly adequate. The main gap is that it doesn't mention the relationship to download_document (single vs. bulk) or any practical caveats like response size, which an agent might need to know when choosing between the two tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds no parameter-specific meaning beyond what the schema provides. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Download') and resource ('multiple documents as a ZIP archive'), which clearly distinguishes it from single-document download tools like download_document. It doesn't explicitly name a sibling alternative, but the bulk vs. single distinction is clear enough from the name and description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for downloading multiple documents at once, and the sibling list includes download_document for single downloads, providing implicit context. However, it doesn't explicitly state when to prefer this over download_document or mention any limits or prerequisites beyond the schema's maxItems.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_correspondents_bulkADestructive
Manage correspondent objects themselves (permissions, delete). ⚠️ This does NOT assign correspondents to documents — use edit_documents_bulk with method 'set_correspondent' for that. WARNING: 'delete' permanently removes correspondents from the entire system.
| Name | Required | Description | Default |
|---|---|---|---|
| merge | No | ||
| owner | No | ||
| confirm | No | Must be true when operation is 'delete' to confirm destructive operation | |
| operation | Yes | ||
| permissions | No | ||
| correspondent_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=false and destructiveHint=true. The description adds meaningful context beyond those hints by warning that 'delete' permanently removes correspondents from the entire system, clarifying the scope and severity of the destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: two sentences plus a warning, with the core purpose and exclusion stated first. Every sentence earns its place and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite good safety context, the tool has six parameters including a nested permissions object and no output schema. The description does not explain merge/owner semantics or how permissions should be structured, so an agent would lack key information needed to construct a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description must compensate, but it only explains the operations at a high level. It does not clarify the meaning of 'merge', 'owner', or the semantics of the permissions object, leaving several parameters effectively unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('correspondent objects themselves') and the two operations it supports (permissions, delete). It also explicitly distinguishes itself from edit_documents_bulk by stating what it does NOT do, so an agent can disambiguate it from a likely sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-not-to-use guidance: 'This does NOT assign correspondents to documents' and names the exact alternative tool and method. This is more than sufficient for an agent to route to the correct sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_custom_fields_bulkADestructive
Manage custom field definitions themselves (permissions, delete). ⚠️ This does NOT modify custom field values on documents — use edit_documents_bulk with method 'modify_custom_fields' for that. WARNING: 'delete' permanently removes custom fields from the entire system.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true when operation is 'delete' to confirm destructive operation | |
| operation | Yes | ||
| custom_fields | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a strong warning that 'delete' permanently removes custom fields from the entire system, which goes beyond the destructiveHint annotation by specifying permanence and scope. It also clarifies the tool operates on definitions, not values. No contradiction with annotations; the extra warning adds meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and then exclusions/warnings. The emoji and warning are useful and not filler. Slightly dense but every sentence earns its place. Not as tight as the highest examples, but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive bulk tool with no output schema, the description covers the main safety aspects and the key sibling distinction. However, it omits any mention of the singular delete_custom_field alternative, does not clarify what the confirm parameter does beyond the schema, and the unsupported 'permissions' reference adds confusion. An agent would need to inspect the schema to fully understand operation and custom_fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, with custom_fields and operation lacking property descriptions. The description helps by indicating custom_fields are the definitions themselves, but it does not explicitly state they are IDs or explain the array's role. Operation's enum is self-documenting, but the confirm parameter is only explained in the schema. The description adds some meaning but does not fully compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says 'Manage custom field definitions themselves (permissions, delete)' which names the resource and includes 'delete', but 'permissions' is not supported by the schema (operation enum only allows 'delete'). This is misleading. The distinction from edit_documents_bulk is clear, but the verb 'manage' is less specific than stating the actual bulk delete operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states this does NOT modify custom field values and directs the agent to edit_documents_bulk with method 'modify_custom_fields' as the alternative. This clear when-not guidance prevents a common confusion. However, it does not mention the sibling delete_custom_field for singular deletes, so it lacks a complete routing picture.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_documents_bulkADestructive
Apply ONE of a fixed set of operations to MANY documents at once. Methods: set_correspondent, set_document_type, set_storage_path, add_tag, remove_tag, modify_tags, modify_custom_fields, set_permissions, delete, reprocess, merge, split, rotate, delete_pages, edit_pdf, remove_password. For per-document field edits including title, content, created (date), archive_serial_number, or owner, use update_document instead — those fields are not editable here. Note: 'remove_tag' only removes the tag from the specified documents (tag stays in the system); 'delete_tag' permanently deletes the tag from the entire system. ⚠️ WARNING: method 'delete' permanently deletes documents and requires confirm=true. Select documents either by documents (IDs) or by all: true + filters — Paperless document filter names such as correspondent__id, tags__id__all, document_type__id, title_content, created__date__gte or query (full text); the filter form changes every matching document in one call, e.g. reassigning all documents from a duplicate correspondent before deleting it. Unknown filter keys are refused, and the result reports matched_documents. all=true is not supported for merge, split, delete_pages, edit_pdf or remove_password. Method remove_password strips a PDF password (needs password); with update_document=true the unlocked file is stored as a new version of the same document. Method reprocess accepts remote_ocr=true to use the configured remote OCR engine.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Select every document matching `filters` instead of listing IDs | |
| tag | No | ||
| merge | No | When true with set_permissions, merges with existing permissions instead of replacing. | |
| owner | No | Owner user ID for set_permissions method (null clears the owner). | |
| pages | No | ||
| method | Yes | ||
| confirm | No | Must be true when method is 'delete' to confirm destructive operation | |
| degrees | No | ||
| filters | No | With all=true (required then): Paperless document filters, e.g. {"correspondent__id": 12}, {"tags__id__all": "3,4"}, {"document_type__id": 5}, {"title_content": "invoice"}. Not list_documents' tool arguments: use correspondent__id, not correspondent. Unknown keys are refused. | |
| add_tags | No | ||
| password | No | remove_password: the PDF's password | |
| documents | No | Document IDs to change. Omit when selecting with all + filters. | |
| operations | No | Per-page operations for edit_pdf method. Each entry: {page, rotate?, doc?}. | |
| remote_ocr | No | reprocess: OCR with the remote OCR engine configured in Paperless instead of the local one (default false) | |
| remove_tags | No | ||
| storage_path | No | ||
| correspondent | No | ||
| document_type | No | ||
| delete_original | No | remove_password / edit_pdf: delete the original after writing a separate new document (ignored with update_document=true) | |
| set_permissions | No | Permission grants for set_permissions method. view/change each take user and group ID lists. | |
| update_document | No | edit_pdf / remove_password: store the result as a new version of the same document instead of creating a new document (default false). | |
| delete_originals | No | ||
| include_metadata | No | edit_pdf / remove_password: copy metadata to the new document (default true). | |
| add_custom_fields | No | ||
| excluded_documents | No | With all=true: IDs to leave out of the selection | |
| metadata_document_id | No | ||
| remove_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false. The description adds valuable context: the 'delete' method requires confirm=true and permanently deletes, remove_tag vs delete_tag semantics, and all=true limitations. Some method-specific behaviors (e.g., merge, split) aren't detailed, but the most critical destructive aspects are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense with essential information for a complex 27-parameter tool. It's front-loaded with the core purpose, then flows logically through methods, selection, destructive warnings, and specific method notes. While not bulleted, it remains scannable and every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (27 params, no output schema), the description covers the most critical aspects: method list, selection modes, destructive warnings, and key parameter formats. However, it doesn't explain every method's parameters or return behavior, leaving some gaps for the agent to infer. Still, it's remarkably complete for such a large tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 52%, so the description carries partial burden. It explains filters format with examples, confirms the requirement for delete, and details custom field value formats (monetary/documentlink). This adds meaning beyond the schema, though many parameters (e.g., degrees, pages) remain undocumented. Overall, it compensates well for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool applies one of a fixed set of operations to many documents at once, listing all methods. It explicitly differentiates from update_document for per-document field edits, making its purpose and scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: names update_document as the alternative for per-document field edits, warns that all=true is not supported for certain methods, and clarifies selection via documents vs. all+filters. This gives clear routing to the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_document_types_bulkADestructive
Manage document type objects themselves (permissions, delete). ⚠️ This does NOT assign document types to documents — use edit_documents_bulk with method 'set_document_type' for that. WARNING: 'delete' permanently removes document types from the entire system.
| Name | Required | Description | Default |
|---|---|---|---|
| merge | No | ||
| owner | No | ||
| confirm | No | Must be true when operation is 'delete' to confirm destructive operation | |
| operation | Yes | ||
| permissions | No | ||
| document_type_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds crucial context: 'delete' permanently removes document types from the entire system. This goes beyond the annotation and appropriately signals system-wide, irreversible impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, purposeful sentences. The core scope is front-loaded, and the disambiguation and destructiveness warning each earn their place without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the two riskiest aspects: sibling confusion and irreversible deletion. However, given six parameters, nested permission objects, low schema coverage, and no output schema, the description leaves 'owner' and 'merge' unexplained, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 17% schema description coverage, the description needed to compensate for the undocumented parameters, but it only names operations in prose. It adds no meaning for 'owner', 'merge', or 'confirm', and while 'permissions' maps to a schema object, the relationship between operation and parameters is not explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource ('document type objects themselves') and the two operations ('permissions, delete'). It also explicitly distinguishes itself from edit_documents_bulk, resolving the most likely source of confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when not to use this tool: 'This does NOT assign document types to documents' and names the alternative ('use edit_documents_bulk with method set_document_type'). This leaves little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_tags_bulkADestructive
Manage tag objects themselves (permissions, delete). ⚠️ This does NOT add/remove tags on documents — use edit_documents_bulk with method 'add_tag'/'remove_tag'/'modify_tags' for that. WARNING: 'delete' permanently removes tags from the entire system.
| Name | Required | Description | Default |
|---|---|---|---|
| merge | No | ||
| owner | No | ||
| confirm | No | Must be true when operation is 'delete' to confirm destructive operation | |
| tag_ids | Yes | ||
| operation | Yes | ||
| permissions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false. The description adds crucial context beyond annotations: 'delete' permanently removes tags from the entire system. It does not expand on set_permissions side-effects, but the destructive warning covers the most consequential behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and each sentence earns its place: what it does, what it does not do and which sibling to use, and a critical destructive warning. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and limited parameter documentation, the description could add more context about response behavior or parameter effects. However, combined with the schema and annotations, it provides enough for an agent to avoid the most dangerous misuse and choose the correct operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description must compensate, but it only names operations and their general domain. Parameters like merge and owner are not explained, and the permissions object's semantics are only implied. This leaves significant gaps for an agent trying to construct correct calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as managing tag objects themselves (permissions, delete) and explicitly distinguishes it from adding/removing tags on documents. This prevents confusion with the heavily overlapping sibling edit_documents_bulk.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when NOT to use this tool and names the alternative: use edit_documents_bulk with methods 'add_tag'/'remove_tag'/'modify_tags' for document-level tag changes. The warning about permanent deletion also guides safe usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_documentB
Send a document via email to one or more recipients.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID to send | |
| message | Yes | Email body message | |
| subject | Yes | Email subject line | |
| addresses | Yes | Comma-separated email addresses | |
| use_archive_version | No | Send the archive version (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the operation is not read-only and not destructive, and the description's 'Send' action is consistent with that. However, the description adds no behavioral context beyond the annotations—it does not mention side effects, prerequisites like configured mail accounts, whether an email is actually dispatched, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, information-dense sentence with no filler. It front-loads the action ('Send'), the resource ('document'), and the recipients, and every word contributes to meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward send action with fully documented parameters, the description is minimally viable. However, it lacks guidance about prerequisites, side effects, or return/confirmation behavior, which would help an agent call it with full confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 because the schema already documents all five parameters. The description adds nothing about parameter meaning or format beyond what the schema states, such as comma-separated addresses or the archive-version default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Send'), a clear resource ('document'), and a delivery method ('via email to one or more recipients'). This distinguishes it from sibling tools, which are mostly document retrieval, editing, or mail-account management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as creating share links, bulk downloading, or other document-sharing mechanisms. The description only states what the tool does, leaving the agent to infer its place among the many document-related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
empty_trashADestructive
⚠️ DESTRUCTIVE: Permanently delete documents from the trash, or empty the entire trash. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to confirm this destructive operation | |
| documents | No | Array of document IDs to permanently delete. If omitted, empties the entire trash. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds valuable context: the operation is irreversible and permanently deletes. This goes beyond the generic annotation and gives the agent a clear warning about consequences. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with a strong leading warning (⚠️ DESTRUCTIVE) that immediately signals the risk. It states the action, the two usage modes, and the irreversible consequence with no wasted words. The structure is ideal for front-loading critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two parameters and no output schema, the description is adequately complete. It covers the two possible operations and the irreversible nature. It does not mention return values, but that is not required since no output schema exists. The missing guidance on when to prefer this over restore_from_trash is a minor gap, but overall it is sufficient for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both confirm and documents are described in the schema. The description does not add any parameter-specific meaning beyond what the schema provides, such as the optional nature of documents and the required confirm flag. It implicitly references the two modes but adds no new semantic detail, so it sits at the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (permanently delete) and the resource (documents from the trash), and also covers the two operational modes (specific documents or entire trash). It does not explicitly differentiate from siblings like restore_from_trash or delete_document, but the resource focus is evident enough for an agent to infer its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when you need to purge trashed documents), but it does not explicitly state when not to use it or name alternatives such as restore_from_trash for recovering documents or delete_document for removing a document outside the trash. The 'or empty the entire trash' clause gives a usage nuance but lacks exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_correspondentARead-only
Get a specific correspondent by ID with full details including matching rules.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds that it returns 'full details including matching rules,' which is useful behavioral context beyond the annotation. It doesn't disclose pagination, error behavior, or response format, but for a simple read-by-ID tool with readOnlyHint, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero waste, and the key information (get by ID, full details, matching rules) is front-loaded. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-ID tool with one parameter and readOnlyHint annotation, the description is nearly complete. It tells the agent what it returns (full details including matching rules) and how to identify the resource (by ID). The only minor gap is not describing the response structure, but no output schema exists and the description's mention of 'full details' is sufficient for a tool of this simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single 'id' parameter. The description says 'by ID' which clarifies the parameter's role, but doesn't add details like format, requiredness, or how to obtain the ID. Since there's only one parameter and its purpose is inferable from the tool name and description, this is minimally adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a specific correspondent by ID and includes full details including matching rules. It distinguishes itself from list_correspondents (which lists all) and from create/update/delete correspondent tools, though it doesn't explicitly name a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need a single correspondent's full details by ID, which is reasonably clear context. However, it doesn't explicitly state when to use this over list_correspondents or mention any alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_custom_fieldARead-only
Get a specific custom field by ID with full details including data type and extra configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds that the response includes 'full details including data type and extra configuration', which is useful but not deep behavioral context. It doesn't mention error behavior, auth requirements, or what happens if the ID doesn't exist, but with readOnlyHint covering the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, and every word earns its place. The detail about 'data type and extra configuration' is valuable and not redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool with readOnlyHint=true, the description is nearly complete. It tells the agent what the tool does and what the response includes. It doesn't explain return format or error cases, but the simplicity of the tool and the annotation coverage make this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single 'id' parameter. The description clarifies that 'id' is the custom field's ID and that the result includes full details, which adds some meaning beyond the bare schema. However, it doesn't specify the ID format (number is in schema) or any constraints, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('custom field'), and the retrieval mechanism ('by ID'), and it adds detail about what the response includes ('full details including data type and extra configuration'). It is clear and distinct from siblings like list_custom_fields or delete_custom_field, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this when you need a single custom field's full details by ID. It doesn't explicitly state when to use this vs list_custom_fields or update_custom_field, but the 'by ID' and 'full details' phrasing gives reasonable context. No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentARead-only
Get a specific document by ID with full details including correspondent, document type, tags, and custom fields. Note: Document content is excluded from results by default. Use 'get_document_content' to retrieve content when needed. Documents can have several file versions (versions; manage them with upload_document_version / update_document_version / delete_document_version). Content (get_document_content) and get_document_metadata follow the LATEST version, but page_count, original_file_name and archived_file_name always describe the ROOT (first) version — e.g. after a password-protected PDF was unlocked into a new version, page_count stays null. Don't use page_count to judge whether a document is readable; check its content.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, but the description adds substantial behavioral nuance beyond that: content is excluded by default, version handling, and the subtle page_count vs. root version behavior. It also gives a concrete example (password-protected PDF) and a practical warning. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, content exclusion, version handling, and a cautionary note. It is front-loaded with the main purpose and logically structured, avoiding redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (versions, content exclusion, page_count semantics) and no output schema, the description covers all essential aspects an agent needs to call the tool correctly. It clearly states what is included and excluded, how versions behave, and which fields are unreliable for readability checks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% but there is only one parameter 'id' of type number, which is self-explanatory. The description reinforces it with 'by ID'. While it doesn't elaborate on format, the trivial nature of the parameter makes this sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a specific document by ID with full details including correspondent, document type, tags, and custom fields.' It explicitly differentiates from get_document_content by stating content is excluded by default and naming the alternative. It also distinguishes the version-related semantics from get_document_metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use vs when-not-to-use: it says to use get_document_content when content is needed, and it warns against using page_count to judge readability. It also references version management tools (upload_document_version etc.) providing clear routing among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_ai_suggestionsARead-only
Get LLM-based suggestions for a document: a title, existing correspondents/tags/document types/storage paths (IDs), and suggested_* NAMES for objects that don't exist yet, plus dates. Requires AI to be enabled in Paperless — otherwise it fails with 'AI is required for this feature'. For classifier suggestions that work without AI, use get_document_suggestions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that the tool requires AI to be enabled and fails with a specific error otherwise. It also reveals the shape of its output (IDs for existing objects, suggested names for new ones), which is useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not bloated: the first sentence gives the core action and result contents, the second adds the prerequisite and failure behavior, and the third routes to the correct alternative. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one simple parameter and no output schema, the description provides enough context: what suggestions are returned, what prerequisite must hold, what happens if it doesn't, and which sibling to use instead. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single id parameter is already documented as 'The document ID', so the description adds little parametric meaning. It refers to 'a document' in passing but does not need to elaborate given the schema covers it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Get LLM-based suggestions for a document') and enumerates exactly what is returned. It also distinguishes this tool from its closest sibling, get_document_suggestions, by naming the AI/non-AI difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the AI-enabled prerequisite and the exact failure mode if unmet, and explicitly instructs to use get_document_suggestions for classifier suggestions that work without AI. The when-to-use and when-not-to-use guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_contentARead-only
Get the text content of a specific document by ID. Use this when you need to read or analyze the actual document text.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description reinforces this by describing the tool as reading text, but does not add further behavioral context such as response size, format, or error behavior. Still, it is consistent and not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the core operation and the second gives the usage guidance; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, one-parameter, read-only getter, the description covers the core operation and the return value ('text content') despite lacking an output schema. It could mention error conditions or content format, but given the tool's simplicity and the readOnlyHint annotation, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines id as a required number with no description (0% coverage). The description compensates by identifying the id as the identifier of a specific document, clarifying that the parameter is a document ID rather than an arbitrary number. It does not explain where the ID comes from or any format nuances, but for a single parameter this is minimally adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact operation ('Get'), resource ('text content'), and target ('specific document by ID'). The phrase 'text content' differentiates it from siblings like get_document_metadata, get_document_preview, and get_document_thumbnail, though it does not name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit when-to-use condition: 'Use this when you need to read or analyze the actual document text.' This clearly signals the intended use case, but does not mention when to prefer alternative getters (e.g., for metadata or previews), so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_historyARead-only
Get the change history / audit log for a document, showing who changed what and when.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID | |
| page | No | Page number (1-based) | |
| page_size | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a safe read operation, so the description does not need to restate that. It adds the detail that the history includes actor and timestamp, but does not disclose behavioral traits such as pagination behavior, ordering, or any permission requirements. The annotation and description are consistent, and the description adds a modest amount of context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the primary action ('Get the change history') and immediately clarifies the output ('who changed what and when'). Every word is functional; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with three well-documented parameters and no output schema, the description sufficiently conveys the tool's purpose and return content. It does not explicitly mention pagination or result ordering, but the schema's page/page_size parameters imply those behaviors, making the overall definition complete enough for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (id, page, page_size) already documented in the schema. The description does not add any additional parameter-level detail, so it does not improve on what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('change history / audit log for a document'), and the exact information it provides ('who changed what and when'). This clearly distinguishes it from sibling tools like get_document_content or get_document_metadata, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (retrieving audit information for a document) but does not explicitly name alternatives or state when not to use this tool. There is no mention of sibling tools like get_document_content or get_document, so an agent must infer the appropriate selection from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_metadataBRead-only
Get file metadata for a document including checksums, file sizes, and archival information.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description is consistent with a read operation. It adds useful context about the response contents (checksums, sizes, archival info), but it does not disclose any further behavioral traits such as permission requirements or edge cases. Given the annotation coverage, a middle score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clear sentence with no filler. The key action and resource are front-loaded, and the additional metadata details are presented compactly without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only operation with no output schema, the description is mostly complete: it names the resource and highlights the return contents. It is slightly vague about 'archival information' and does not clarify its relationship to get_document, but an agent can still invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'id', which is documented as 'The document ID'. The description does not add extra parameter-level meaning, but with full schema coverage, the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Get file metadata for a document') and lists concrete contents (checksums, file sizes, archival information). This distinguishes it from content- or download-focused siblings, though it does not explicitly differentiate it from get_document, which may also return metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like get_document, get_document_content, or download_document. The phrase 'file metadata' implies a use case, but no exclusions or sibling comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_previewBRead-only
Get a full-page preview image of a document. Returns the preview as a base64-encoded image resource.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already signals a safe read operation, and the description adds the behavioral detail of returning a base64-encoded image. However, it does not disclose potential size limits, format specifics, or any other side effects. The description adds some value but is not rich in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded with the primary purpose. It wastes no words and clearly communicates the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one well-documented parameter and an annotation indicating read-only, the description is sufficiently complete. It states what the tool does and the return format. It could mention the image format or dimensions, but these are not critical for a preview tool, and the lack of an output schema means the description appropriately covers the return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the 'id' parameter has a description 'The document ID'), so the schema already documents the parameter adequately. The description does not add any extra semantic meaning to 'id' beyond what the schema provides, aligning with the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the resource ('full-page preview image of a document'), and mentions the return format (base64-encoded). It distinguishes itself from the sibling 'get_document_thumbnail' by specifying 'full-page', though it does not explicitly name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_document_thumbnail or get_document_content. It does not mention any conditions or exclusions, leaving the agent to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_suggestionsARead-only
Get classifier-based suggestions for a document's correspondent, tags, document type, storage path and dates. Returns IDs of EXISTING objects only. For LLM suggestions that can also propose a title and new objects, use get_document_ai_suggestions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID to get suggestions for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that results are limited to IDs of existing objects and clarifies the classifier-based nature of the suggestions. This adds useful behavioral context, though it does not elaborate on possible empty results or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the primary purpose front-loaded and the alternative guidance placed second. Every sentence contributes either scope or routing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool with no output schema, the description covers the suggestion fields, the existing-only return constraint, and the sibling distinction. It does not specify the exact response format, but the provided detail is sufficient for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the sole parameter 'id' with 100% coverage ('The document ID to get suggestions for'), so the description adds no new parameter-level semantics. The baseline score of 3 applies because the schema handles the documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get classifier-based suggestions') and resource (a document's correspondent, tags, document type, storage path, and dates), which is unambiguous. It also distinguishes itself from get_document_ai_suggestions by noting the classifier approach and the constraint that it returns IDs of EXISTING objects only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative get_document_ai_suggestions and the condition for choosing it: LLM suggestions that may propose a title and new objects. This provides a clear when-to-use/when-not-to-use rule, so an agent can route between the two suggestion tools without further exploration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_thumbnailARead-only
Get a document thumbnail (image preview) by ID. Returns the thumbnail as a base64-encoded WebP image resource.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals this is a safe read operation一味 The description adds value by disclosing the response format in detail (base64-encoded WebP image resource), which is helpful given there is no output schema. It does not cover error cases or size limits, but for a simple read-only fetch the disclosure is reasonable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the action and resource, then provides the key output detail. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only, simple fetch tool, the description provides the essential purpose and the return format, compensating for the missing output schema. It is complete enough for an agent to select and invoke the tool correctly, though it could mention that the ID is specifically a document ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only says 'id' is a number, with no description. The main description clarifies that this ID selects a document whose thumbnail will be retrieved, giving the parameter its purpose and context. This meaningfully compensates for the 0% schema description coverage, though it could have been more explicit by naming it the document ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a resource ('document thumbnail'), and the input ('by ID'), and adds the output format ('base64-encoded WebP image resource'). It does not explicitly differentiate from sibling tools like get_document_preview, which is a close alternative, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: whenever a thumbnail image of a document is needed. However, it provides no explicit guidance about when not to use it, nor does it mention alternatives such as get_document_preview or get_document_content, leaving some routing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_typeARead-only
Get a specific document type by ID with full details including matching rules.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds 'full details including matching rules', which gives some context about the return payload but does not describe other behavioral aspects such as error behavior (e.g., 404 on missing ID), auth requirements, or rate limits. It does not contradict annotations and adds minimal value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It front-loads the verb and resource, includes the scoping detail ('specific ... by ID'), and adds the distinguishing output detail ('full details including matching rules'). Every word contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool with readOnlyHint, the description is adequate but not rich. It mentions 'full details including matching rules' but does not outline the response structure or edge cases like missing IDs. Given the lack of an output schema, the description leaves the return format to inference, which is a notable gap for an agent that needs to parse results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a 'number' type for id with 0% coverage, so the description must explain the parameter. 'by ID' clearly identifies the id as the document type's unique identifier. This adds meaningful semantics beyond the bare schema, even though it does not specify the format or source of the ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'specific document type', and the identifier-based access ('by ID'). It adds 'full details including matching rules', which differentiates it from list_document_types and other get_* tools. An agent can immediately recognize what this tool does and how it differs from getting a document or listing types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: use this when you have a specific document type ID and need full details. However, there is no explicit mention of when not to use it or alternatives like list_document_types for a collection, nor any context about choosing this over other get_* tools. The guidance is clear enough for a simple read operation but lacks explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mail_accountARead-only
Get one mail account by ID (password masked).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds meaningful behavioral context by explicitly noting that the password is masked, which tells the agent the returned data is sanitized. This goes beyond what the annotation provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler. The core purpose is front-loaded, and the password-masking note is appended cleanly without bloating the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only get-by-ID tool, the description is complete: it names the resource, the selection criterion, and the key data trait (masked password). No output schema exists, but the description gives the agent enough to invoke the tool correctly and set expectations about the returned account data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the lone 'id' parameter. The phrase 'by ID' clarifies that the numeric id parameter identifies the mail account, but it adds only marginal meaning beyond the parameter's property name. It is sufficient for such a simple single-parameter tool, but not richer than the schema already implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('mail account'), and a precise scope ('one ... by ID'), clearly distinguishing it from list_mail_accounts and other mail-account operations. The parenthetical 'password masked' adds a useful distinguishing detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Get one mail account by ID' makes the invocation context clear: use this when you already have the account ID and need a single account, rather than listing all accounts. It does not explicitly name alternatives like list_mail_accounts, but the scope is unambiguous enough that an agent can decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mail_ruleARead-only
Get one mail rule by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description's 'Get' is consistent with that, so there is no contradiction. However, the description adds only minimal behavior beyond the annotation: it clarifies the operation returns a single rule by ID. It does not disclose error behavior, return format, or auth requirements, but for a simple read-only getter this is a minimum viable level.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence: 'Get one mail rule by ID.' Every word earns its place, with no filler or repeated schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity—one required parameter, read-only annotation, and no output schema—the description is mostly adequate for an agent to call it. The main gap is the absence of explicit return-value or not-found behavior, but for a straightforward get-by-ID operation the missing details are relatively minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented id parameter. The phrase 'by ID' reinforces that the id parameter identifies the mail rule, but it adds little beyond the parameter name and type already present in the schema; it does not explain where the ID comes from or how to find valid IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get one mail rule by ID.' It clearly differentiates this from siblings like list_mail_rules (plural listing) and create/update/delete_mail_rule by specifying a single item fetched by identifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives. It does not mention that list_mail_rules should be used to enumerate rules first, nor does it state exclusions or conditions. The 'by ID' requirement is implied but no explicit usage context or prerequisite is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_next_asnARead-only
Get the next available Archive Serial Number (ASN) for document filing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral details beyond what readOnlyHint already conveys. It does not explain whether the ASN is reserved or consumed, but since the annotation marks it read-only, the safety profile is covered. The added 'for document filing' context is purpose, not behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that front-loads the verb and clearly states the resource and purpose. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with no output schema, the description is fully sufficient. It tells the agent exactly what the tool returns (the next available ASN) and when to use it. No additional edge-case information is necessary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description needs to convey no parameter information since none exist, and it correctly avoids inventing any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') plus resource ('next available Archive Serial Number') and purpose ('for document filing'). It is unambiguous and distinct from all sibling tools, none of which relate to ASNs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for document filing' provides a clear use case context, indicating when this tool would be invoked. It does not explicitly mention alternatives or when not to use it, but the tool is unique enough that no exclusion is necessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_viewARead-only
Get a specific saved view by ID with full details including filter rules.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the operation is read-only, and the description does not contradict that. The description adds a useful detail about the response content ('full details including filter rules'), but it does not disclose any additional behavioral traits such as error handling, pagination, or authentication requirements. Since annotations cover the safety profile, the description provides modest additional value, justifying a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It front-loads the core action ('Get a specific saved view by ID') and appends the relevant detail about the response ('full details including filter rules'), making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id operation with one parameter, the description covers the essential information: what the tool does, what input is needed, and what the response contains. The read-only annotation covers safety, and no output schema is present, but the description's mention of 'full details including filter rules' gives the agent adequate expectations. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the 'id' property has no description), so the description must compensate. It does so by clarifying that 'id' is the identifier of the saved view to retrieve ('by ID'), which gives meaning beyond the bare schema type of 'number'. This effectively explains the parameter's role, so a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get'), a specific resource ('saved view'), and the scoping condition ('by ID'), plus an indication of the response content ('full details including filter rules'). This distinguishes it from list_saved_views and other sibling tools that operate on saved views.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'specific saved view by ID' implicitly communicates that this tool is for retrieving one saved view when you have its identifier, contrasting with list_saved_views for enumerating them. It does not explicitly name alternatives or exclusions, but the usage context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statisticsARead-only
Get system statistics including document counts, inbox status, file type breakdown, and storage information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation, and the description adds meaningful context by listing exactly what categories of statistics are returned. There is no contradiction between the description and the annotation, and the behavior described is consistent and transparent for a zero-parameter read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the core purpose first and then lists the included statistics. There is no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter input and read-only annotation, the description covers the main information an agent needs to select and call the tool. It lacks an explicit return-shape description since there is no output schema, but the listed categories are sufficient for a simple statistics endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so there is no parameter documentation burden for the description to carry. The baseline for a zero-parameter tool applies here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the action ('Get') and the resource ('system statistics') and enumerates specific content categories: document counts, inbox status, file type breakdown, and storage information. It is specific enough to be understood, though it does not explicitly differentiate itself from the sibling get_system_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of related siblings like get_system_status or get_task_status_counts. The intended use is implied by the name and description, but no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_storage_pathARead-only
Get a specific storage path by ID with full details including matching rules.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to restate safety. It adds that the tool returns 'full details including matching rules,' providing useful context, but does not disclose error behavior or response format. Adequate given the read-only annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence with no fluff. It front-loads the action and resource, and the 'including matching rules' detail adds value without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with one parameter and read-only annotation, the description is mostly complete. It mentions 'full details including matching rules' but does not enumerate the exact fields returned. Since there is no output schema, this gap is noticeable, though the low complexity keeps it from being critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify the 'id' parameter. It says 'by ID,' making it clear the parameter is the storage path identifier. However, no additional format, constraints, or examples are provided beyond the schema's type: number. Minimal but sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Get' with resource 'storage path' and identifies it by ID, while noting 'full details including matching rules' which distinguishes it from list_storage_paths. Clear and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus list_storage_paths or other siblings. The description implies single-item retrieval by ID, but does not state alternatives or exclusions, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_statusARead-only
Get Paperless server status: the Paperless-ngx version (pngx_version), install type, storage, and the health of the database, search index, classifier, task queue and last sanity check. Use this to find out which Paperless version you are talking to.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a non-mutating call. The description adds value by disclosing the specific content the agent can expect: version, install type, storage, and health status of core subsystems. It does not discuss auth or latency caveats, but for a read-only, parameterless status call the behavioral risk is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and resource ('Get Paperless server status') and follows with a compact list of returned fields. Every clause adds useful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are no parameters, no output schema, and only a readOnly annotation, the description is complete enough: it names the key response fields, the health components covered, and a concrete use case. An agent can invoke this tool correctly without needing additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the schema description coverage is 100%, so the baseline 4 applies. The description does not need to explain parameters; it instead explains what the response contains, which is the relevant semantic information here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get Paperless server status', and enumerates exact fields returned (pngx_version, install type, storage, health of database, search index, classifier, task queue, last sanity check). The use-case sentence 'Use this to find out which Paperless version you are talking to' helps distinguish it from sibling read tools like get_statistics or task status tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear, explicit use case: find out which Paperless version you are talking to. It does not name alternative tools or provide 'when not to use' exclusions, but the context is unambiguous for this no-parameter status endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tagARead-only
Get a specific tag by ID with full details including matching rules.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only safety profile is known; the description reinforces this with 'Get'. It adds one behavioral detail beyond the schema—that the result includes matching rules—but does not describe error behavior or the exact return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler; every phrase ('specific', 'by ID', 'full details', 'matching rules') adds information. It is appropriately sized for a simple getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool complexity is low (one required, read-only parameter), and the description covers the call purpose and what to expect. With no output schema, the exact response fields are left unspecified, but that is a minor gap for such a straightforward single-resource getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'id' has no schema description (0% coverage), but the description identifies it as the tag's identifier, which is the core semantic needed. It does not explain how to obtain a valid tag ID or any constraints beyond the schema's number type, so the compensation is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), resource ('tag'), and selection criterion ('by ID'), with an added detail that the response includes matching rules. This clearly distinguishes it from list_tags and mutation siblings like create_tag/update_tag/delete_tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'a specific tag by ID' conveys the intended use: when the caller has a tag identifier and wants one tag's details. It does not explicitly name alternatives such as list_tags or search for discovery, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_status_countsARead-only
Get task counts: all, needs_attention (failed and unacknowledged), in_progress, completed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true. The description adds genuine behavior by defining 'needs_attention' as failed and unacknowledged and by spelling out the four count groups returned. It does not disclose output shape or potential staleness, but read-only status and the category semantics are the main behavioral facts here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the operation and then lists the categories in compact form. The parenthetical clarification earns its place and the description contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only counts tool, the description covers what the counts are and which bucket 'needs_attention' maps to. With no output schema, a slightly more explicit return-shape statement (e.g., field names) could help, but the enumerations make the result predictable enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter burden for the description to carry; the empty schema is complete. The description is therefore not required to explain parameter meaning, and the category labels it provides are sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('task counts') and enumerates the exact categories returned. It does not explicitly name sibling tools such as get_task_summary or list_tasks, so sibling differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this is the tool for aggregated status counts, and the category definitions help an agent know what 'needs_attention' includes. However, it provides no explicit when-to-use/when-not-to-use guidance or alternatives, so an agent must infer the right context from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_summaryARead-only
Get per-task-type statistics over the last N days: totals, pending/success/failure counts, average duration and wait time, and last run/success/failure times.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days (default 30) | |
| task_type | No | Limit to one task type, e.g. consume_file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the read-only nature is known. The description adds the look-back window and metric scope, but does not disclose details such as whether tasks with no runs are included, how missing values behave, or whether results are grouped when task_type is omitted. It adds some value without contradicting the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence conveys the purpose, scope, and key return fields with no filler. Every clause adds useful information and the core action is stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two optional parameters, 100% schema coverage, and no meaningful nested complexity, the description covers the metrics returned and the temporal scope. It leaves minor ambiguity about default grouping behavior when task_type is omitted, but overall it is complete enough for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already described in the input schema. The description reinforces that 'days' is the look-back window and 'task_type' limits the result, but it does not add substantive meaning beyond what the schema provides; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description names a specific verb and resource ('Get per-task-type statistics') with a clear temporal scope ('over the last N days') and enumerates the exact metrics returned. This distinguishes it from siblings like get_task_status_counts, get_statistics, and list_tasks without needing to open schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys that the tool is for historical statistics but gives no explicit guidance on when to choose it over alternatives such as get_task_status_counts or get_statistics, and no exclusions or conditions. Usage context is implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflowARead-only
Get one workflow by ID, including its full triggers and actions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint by stating the response includes the full triggers and actions, which is a meaningful behavioral detail. It doesn't cover pagination or error cases, but the read-only annotation already covers safety, and the description adds return-content context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence of ten words, front-loaded with the action and resource, no filler. It earns every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only get-by-ID tool, the description covers the purpose, the included content, and the parameter meaning. No output schema exists, but the description's mention of triggers and actions gives the agent an idea of the return shape. Gaps like error handling are minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines 'id' as a number with no description. The description's 'by ID' clarifies that this parameter is the workflow identifier, effectively compensating for the 0% schema coverage. For a single required parameter, this is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Get', specifies the resource 'one workflow by ID', and adds 'including its full triggers and actions', which distinguishes it from list_workflows (which lists all) and from get_workflow_action/get_workflow_trigger (which fetch single components).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: retrieve a single workflow by its ID. It doesn't name alternatives or exclusions, but the context of siblings like list_workflows and get_workflow_action implies when this is the right tool. No explicit guidance is given, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflow_actionARead-only
Get a specific workflow action by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description's 'Get' aligns with the readOnlyHint=true annotation, but it adds no behavioral context beyond that annotation. It does not mention authentication, response format, potential errors, or confirm that no modifications occur, so it fails to disclose anything additional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single seven-word sentence with the verb and resource front-loaded. It contains no filler and is appropriately sized for a straightforward getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool with a readOnly annotation, the description covers the essential calling contract: pass the ID. It does not describe the return shape, but with no output schema the resource name 'workflow action' sufficiently implies the response object, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify the `id` parameter's role, and it does: 'by ID' indicates the required number identifies the workflow action to fetch. For a single-parameter tool, this is adequate, though it does not elaborate on ID source or format beyond the schema's type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Get') and resource ('workflow action'), with 'specific ... by ID' establishing a single-item scope. This distinguishes it from sibling tools such as list_workflow_actions (batch retrieval) and create/update/delete variations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'specific ... by ID' implies this is for fetching a single workflow action when its ID is known, but there is no explicit guidance on when to prefer it over list_workflow_actions or mention of exclusions. The usage context is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflow_triggerARead-only
Get a specific workflow trigger by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description's 'Get' is consistent with a read-only operation, so there is no contradiction. The description adds no behavioral details such as return shape, error behavior, or access requirements, but for a simple read operation with an annotation this is minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. Every word contributes to the core meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity read tool with one parameter, a readOnlyHint, and no output schema. The description covers the essential action and target; explicit return details are not stated but are reasonably self-evident for a 'get by ID' operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry meaning for the single id parameter. Saying 'by ID' does map the parameter to the workflow trigger identifier, but it adds little beyond the schema's property name and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Get' with a specific resource, 'workflow trigger,' and qualifies it as 'specific ... by ID,' making the operation unambiguous. It clearly distinguishes this from list_workflow_triggers and get_workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of alternatives like list_workflow_triggers or get_workflow. The phrase 'by ID' only implies the caller already has an ID; it does not state prerequisites, exclusions, or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_active_tasksARead-only
List tasks that are pending or running right now (at most 50). For finished tasks use list_tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| task_type | No | Filter by task type, e.g. consume_file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, and the description adds the 'at most 50' cap and transient scope. It does not disclose ordering, pagination beyond the cap, or how tasks behave after acknowledgment, but there is no contradiction with the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the operational scope and limit front-loaded. The alternative for finished tasks is stated with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with one optional parameter, the description is complete enough: it gives scope, a limit, and sibling routing. The only minor gap is that, with no output schema, the return shape is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers 100% of the single parameter, task_type, including an example. The tool description itself adds no parameter-level detail, but the schema fully carries that burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List tasks that are pending or running right now') plus an explicit cap of 50. It also names list_tasks as the destination for finished tasks, clearly distinguishing this tool from its nearest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool (for pending/running tasks) and when not to ('For finished tasks use list_tasks'). This is direct routing with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_correspondentsBRead-only
List all correspondents with optional filtering and pagination. Correspondents represent entities that send or receive documents.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| is_empty | No | Filter to only correspondents with 0 documents (true) or only those with >=1 document (false). Paginates through all results so the filter is global, not page-scoped. | |
| ordering | No | ||
| page_size | No | Number of items per page | |
| name__iexact | No | ||
| name__icontains | No | ||
| name__iendswith | No | ||
| name__istartswith | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds a small amount of context by noting pagination and optional filtering, and by defining correspondents, but it does not disclose behaviors such as pagination defaults or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One efficient sentence with no filler, front-loaded with the action and resource. The definition of correspondents earns its place by grounding the term.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 optional parameters, no output schema, and low schema description coverage, the description is too thin. It does not cover filtering semantics, ordering possibilities, pagination behavior, or return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38%, and five parameters (ordering, name__iexact, name__icontains, name__iendswith, name__istartswith) are undocumented. The description only says 'optional filtering and pagination' without adding meaning to any specific parameter, so it fails to compensate for the schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb-resource pair: 'List all correspondents', and clarifies what correspondents are. It is clear among siblings but does not explicitly differentiate itself from related tools like get_correspondent or list_document_types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this tool over alternatives. It does not mention exclusions, prerequisites, or sibling tools, leaving the agent to infer that listing correspondents is the intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_fieldsARead-only
List all custom fields. IMPORTANT: When a user query may refer to a custom field, you should fetch all custom fields up front (with a large enough page_size), cache them for the session, and search locally for matches by name before making further API calls. This reduces redundant requests and handles ambiguity efficiently.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| ordering | No | ||
| page_size | No | Number of items per page | |
| name__iexact | No | ||
| name__icontains | No | ||
| name__iendswith | No | ||
| name__istartswith | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds valuable behavioral context: the tool supports pagination (page_size) and the recommended caching strategy to reduce redundant requests. It doesn't mention rate limits or return format, but the caching guidance is a meaningful behavioral disclosure beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence followed by a clear, actionable usage note. It's concise and front-loads the core purpose ('List all custom fields') before the caching guidance. The guidance is somewhat long but earns its place by providing critical usage strategy. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers the essential context: what it does, how to use it efficiently, and the caching strategy. It doesn't describe the return format or the filtering parameters, but the caching guidance is the most important operational detail. Given the tool's simplicity and the readOnlyHint annotation, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29%, so the description should compensate for the undocumented parameters. The description mentions page_size and implies pagination, but it doesn't explain the filtering parameters (name__iexact, name__icontains, etc.) or ordering. The caching guidance adds context for page_size but leaves the other parameters unexplained. Baseline 3 is appropriate because the description adds some value but doesn't fully compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List all custom fields.' It distinguishes itself from related tools like get_custom_field (singular) and delete_custom_field by focusing on listing all fields. However, it doesn't explicitly name sibling alternatives, so it doesn't fully differentiate from other list_* tools, though the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: fetch all custom fields up front with a large page_size, cache them for the session, and search locally for matches by name before making further API calls. This tells the agent when and how to use the tool, and implicitly when not to (avoid repeated API calls). This is strong, actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_document_notesARead-only
List all notes for a specific document.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID | |
| page | No | Page number (1-based) | |
| page_size | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already signals a safe read operation. The description adds minimal context by specifying that all notes for one document are returned, but it does not disclose pagination behavior, ordering, or response contents. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, direct sentence with zero filler. The verb and target resource are front-loaded, making the tool's purpose immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with fully documented parameters and a readOnly annotation, the description is sufficient. The absence of an output schema means response shape is not described, but this is acceptable for such a straightforward listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description adds no parameter-level meaning beyond what the schema already provides. The baseline of 3 is appropriate because the schema carries the full documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'List', the resource 'notes', and the scope 'for a specific document'. This differentiates it from create_document_note, delete_document_note, and the broader list_documents sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: when notes for a specific document are needed. However, it does not explicitly state when to prefer this tool over alternatives or mention any exclusions, such as filtering or sorting behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_documentsARead-only
List and filter documents by fields such as title, correspondent, document type, tag, storage path, creation date, and more. IMPORTANT: For queries like 'the last 3 contributions' or when searching by tag, correspondent, document type, or storage path, you should FIRST use the relevant tool (e.g., 'list_tags', 'list_correspondents', 'list_document_types', 'list_storage_paths') to find the correct ID, and then use that ID as a filter here. Only use the 'search' argument for free-text search when no specific field applies. Using the correct ID filter will yield much more accurate results. Note: Document content is excluded from results by default. Use 'get_document_content' to retrieve content when needed. To find near-duplicates of one document use more_like_id; to list everything Paperless has flagged as a duplicate use has_duplicates=true.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| page | No | Page number (1-based) | |
| search | No | ||
| ordering | No | ||
| page_size | No | Number of items per page | |
| more_like_id | No | Find documents similar to the document with this ID | |
| storage_path | No | ||
| correspondent | No | ||
| document_type | No | ||
| has_duplicates | No | true = only documents Paperless flagged as possible duplicates (the same file as another document); false = only documents without. get_document lists the matching documents in duplicate_documents (list results leave that field empty). | |
| created__date__gte | No | ||
| created__date__lte | No | ||
| custom_field_query | No | Custom-field filter as a JSON expression passed as a string. A condition is [field, operator, value], where field is the custom field's name or ID. Combine conditions with ["AND", [cond, …]] or ["OR", [cond, …]], and negate with ["NOT", cond]. Valid operators depend on the field's data type (e.g. exact, in, isnull, exists, icontains, gt, gte, lt, lte, range); pick an invalid one and Paperless names the valid ones. Examples: '["Amount", "gte", 100]', '["AND", [["Due", "lt", "2026-10-01"], ["Paid", "exact", false]]]'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals safety, and the description adds meaningful behavioral context beyond that: document content is excluded by default, ID filters produce more accurate results than free text, and duplicate/similarity behavior is outlined. This exceeds what annotations alone provide, though it does not cover response shape or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence carries routing or behavioral information, and the high-priority ID-resolution guidance is clearly flagged with 'IMPORTANT'. It is somewhat dense, but the length is justified by 13 parameters and many sibling alternatives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers the major agent decision points: which filters need pre-resolved IDs, when to use free-text search, content exclusion, and duplicate/similarity options. It leaves ordering and exact date-filter formats to the schema, but those are secondary to correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 38% schema description coverage, the description compensates by explaining the semantic role of key parameters: tag/correspondent/document_type/storage_path should be IDs from listing tools, 'search' is only a free-text fallback, and has_duplicates/more_like_id address duplicates. It doesn't detail ordering or date formats, but it resolves the most important parameter ambiguities.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List and filter documents by fields...' naming a specific action, resource, and filter dimensions. It distinguishes itself from search_documents by restricting the 'search' argument to free-text when no specific field applies, and from content retrieval tools by noting document content is excluded. An agent can tell this apart from siblings like get_document or search_documents without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs the agent to first call list_tags, list_correspondents, list_document_types, or list_storage_paths to resolve IDs before filtering. It also states when 'search' is appropriate, when to use get_document_content, and how to handle duplicates via more_like_id or has_duplicates. This is explicit when-to-use and alternative-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_document_typesARead-only
List all document types. IMPORTANT: When a user query may refer to a document type or tag, you should fetch all document types and all tags up front (with a large enough page_size), cache them for the session, and search locally for matches by name or slug before making further API calls. This reduces redundant requests and handles ambiguity between tags and document types efficiently.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| is_empty | No | Filter to only document types with 0 documents (true) or only those with >=1 document (false). Paginates through all results so the filter is global, not page-scoped. | |
| ordering | No | ||
| page_size | No | Number of items per page | |
| name__iexact | No | ||
| name__icontains | No | ||
| name__iendswith | No | ||
| name__istartswith | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the caching/search-local strategy, which is a usage pattern rather than a behavioral trait of the tool itself. It doesn't disclose pagination behavior or that the tool returns a paginated list despite having page and page_size parameters. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences – the first is a direct statement of purpose, and the second is a practical usage tip. The core purpose is front-loaded. The IMPORTANT note is somewhat verbose but adds value. Overall concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should clarify return format or at least indicate it returns a list of document type objects. It doesn't. It also doesn't explain the filter parameters (name__* etc.) or pagination behavior. For a tool with 8 parameters and no output schema, this description is incomplete – an agent would not know how to use the filters or interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38%, meaning 5 of 8 parameters (ordering, name__iexact, name__icontains, name__iendswith, name__istartswith) lack descriptions. The description provides no parameter information at all, failing to compensate for the low coverage. It doesn't explain filtering semantics, ordering options, or how pagination works.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List all document types' – a specific verb and resource that clearly distinguishes it from sibling list tools like list_tags and list_documents. The name and first sentence make the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The IMPORTANT note provides clear guidance on when to use this tool: when a user query may refer to a document type or tag, fetch all types and tags up front, cache them, and search locally. This implicitly tells the agent to use this tool in combination with list_tags for efficient local matching. It doesn't explicitly mention alternatives or exclusions, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mail_accountsARead-only
List the IMAP accounts Paperless fetches mail from. Passwords are always masked.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| page_size | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers safety. The description adds valuable behavior beyond annotations: passwords are always masked, which reassures the agent about sensitive data handling. It also clarifies the scope of accounts (IMAP accounts Paperless fetches mail from). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler. The main action is front-loaded, and the security-relevant password masking note earns its place. Ideal length for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward paginated list tool, the description plus readOnlyHint and a fully documented schema are sufficient. No output schema exists, but the description provides an adequate picture of results (list of IMAP accounts with masked passwords). Slight gap: no explicit mention of pagination behavior, though parameters imply it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – both page and page_size are fully documented in the input schema. The description does not add any parameter-level meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List') and a specific resource ('the IMAP accounts Paperless fetches mail from'). This unambiguously differentiates it from sibling tools like get_mail_account (single account), create_mail_account, and list_mail_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: this tool is for listing all IMAP accounts, as opposed to retrieving a single account (get_mail_account) or mutating accounts (create/update/delete). However, it does not explicitly name alternatives or state 'when not to use,' so it falls short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mail_rulesARead-only
List mail rules: which mails Paperless imports from which account, and how it assigns title, tags, correspondent and document type.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| page_size | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the safety profile, so the description only needs to add context. It adds useful domain context about what each rule configures, but does not disclose pagination behavior, ordering, or other behavioral details. This is adequate for a simple read-only list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that leads with the action and resource, then adds a clarifying dependent clause. Every word earns its place, and no redundant or filler content exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two parameters, no output schema, and no nested objects, the description sufficiently explains what the tool returns: the mail rules and their configuration. It could mention pagination default behavior, but the schema-parameter presence makes this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters (page and page_size) with clear descriptions and ranges, giving 100% schema coverage. The description adds no parameter-specific information, but with full schema coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('mail rules'), then elaborates exactly what information each rule contains: the source account and how title, tags, correspondent, and document type are assigned. This clearly distinguishes it from siblings like list_mail_accounts and get_mail_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys that this is the list operation for mail rules, which implicitly tells an agent to use get_mail_rule for a single rule. However, it does not explicitly state when to prefer this over get_mail_rule or how it differs from list_mail_accounts, leaving the routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_viewsARead-only
List all saved views with optional pagination. Saved views store filter/sort configurations for quick access.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| page_size | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to restate that this is a read operation. It adds that saved views store filter/sort configurations and that pagination is optional, but it doesn't disclose return format or pagination defaults. With annotation coverage, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the action and scope, and the second sentence adds useful domain context without repeating schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema and fully documented optional parameters, this description is mostly complete. It tells the agent what the tool lists and that pagination is optional. A minor gap is the lack of pagination defaults or mention of the return shape, but the low complexity makes this acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the page/page_size parameters are already fully described in the schema. The description's mention of 'optional pagination' adds little beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List all saved views') and clarifies what saved views are. It doesn't explicitly name sibling tools like get_saved_view, but 'all' and 'optional pagination' make the scope clear enough to distinguish from single-view retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: use this tool when you need to list saved views, with optional pagination. However, it doesn't explicitly say when to prefer this over get_saved_view or other siblings, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_storage_pathsBRead-only
List all storage paths with optional filtering and pagination. Storage paths define where documents are stored on disk.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| ordering | No | ||
| page_size | No | Number of items per page | |
| name__iexact | No | ||
| name__icontains | No | ||
| name__iendswith | No | ||
| name__istartswith | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds light behavioral context by mentioning pagination and the domain purpose of storage paths, but it does not disclose return shape, defaults, or any additional behavior. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action first, no wasted words. The second sentence adds useful domain context that is not present in the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple, read-only list tool, but there are clear gaps: no output schema exists and the description does not describe the response shape, filter parameter behavior, or default pagination behavior. It is minimally viable but not richly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29%, so the description carries substantial responsibility for explaining parameters. It only says 'optional filtering and pagination' without naming the filter fields, their meanings, or ordering semantics. The name__* parameters and ordering remain effectively undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List'), a specific resource ('storage paths'), and scope ('all'), with optional filtering and pagination. It is readily distinguishable from get_storage_path by the plural 'all', though it does not explicitly name a sibling or contrast itself with the single-item lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: call this to list storage paths rather than to fetch one specific path, which would be get_storage_path. There is no explicit when-to-use/when-not-to-use guidance or mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsBRead-only
List all tags. IMPORTANT: When a user query may refer to a tag or document type, you should fetch all tags and all document types up front (with a large enough page_size), cache them for the session, and search locally for matches by name or slug before making further API calls. This reduces redundant requests and handles ambiguity between tags and document types efficiently.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| is_empty | No | Filter to only tags with 0 documents (true) or only those with >=1 document (false). Paginates through all results so the filter is global, not page-scoped. | |
| ordering | No | ||
| page_size | No | Number of items per page | |
| name__iexact | No | ||
| name__icontains | No | ||
| name__iendswith | No | ||
| name__istartswith | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already communicates that this is a safe read, so the bar for extra disclosure is lower. The description adds a caching/fetch-all strategy and notes the ambiguity handling, but doesn't describe result-set behavior like pagination totals or filter interactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in four words, and the capitalized usage block is dense but purposeful; each clause adds actionable guidance. It's slightly verbose for a list tool, but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter list tool with no output schema, the description adequately frames the intended pre-fetch workflow but leaves parameter semantics and pagination behavior largely to the schema. It's sufficient for a straightforward list-all call in the described scenario, but would not fully guide more nuanced filtering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38%, and the description doesn't explain the name__* filters, ordering values, or how filters combine. The only parameter-level nod is the passing mention of page_size, which doesn't compensate for five undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List all tags', a specific verb and resource that is immediately unambiguous among siblings. It alludes to the tag versus document type ambiguity but doesn't explicitly name list_document_types, so differentiation from that sibling relies on inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit when-to-use rule: when a query may refer to a tag or document type, fetch and cache all tags and document types up front, search locally, then make further calls. This is strong usage context, but it doesn't name the alternative tool or state when not to use list_tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksARead-only
List background tasks with their status, type, trigger source and results. Useful for monitoring document consumption and other async operations. Use the filters to narrow the list; limit sets how many are returned. For only pending/running tasks use list_active_tasks; for totals use get_task_status_counts or get_task_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of tasks to return (default 25) | |
| status | No | Filter by task state | |
| ordering | No | Field to order by, e.g. '-date_created' | |
| task_type | No | Filter by task type | |
| acknowledged | No | Filter by acknowledged status (false = unacknowledged tasks only) | |
| trigger_source | No | Filter by what triggered the task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the safety profile is already covered. The description adds behavioral context: it returns status/type/trigger/results, supports narrowing via filters, and limit controls the count. It doesn't cover response format or pagination, but given the annotation coverage, this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with the purpose first, followed by use case, usage note, and sibling routing. No redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description names the returned fields and provides the primary use case plus explicit alternatives. The optional filters are all documented in the schema, and the readOnly annotation covers side effects. An agent has enough to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter has a description. The tool description only adds generic guidance to 'use the filters' and that `limit` sets the count, which is already in the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description names the verb 'List', the resource 'background tasks', and enumerates the fields returned (status, type, trigger source, results). It also explicitly differentiates itself from list_active_tasks and the task summary tools, so an agent can distinguish it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames when to use it ('monitoring document consumption and other async operations') and gives direct routing: use list_active_tasks for pending/running tasks and get_task_status_counts/get_task_summary for totals. This is clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_trashARead-only
List documents in the trash (soft-deleted documents). Document content is left out, as in list_documents.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| page_size | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful behavioral context: the documents are soft-deleted and document content is left out of the response. This meaningfully informs the caller beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no fluff. The core purpose is front-loaded, and the parenthetical clarification plus the list_documents comparison are efficient and useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated list with full schema coverage and a read-only annotation, the description is nearly complete. It references list_documents for output shape rather than fully describing the response, so it is not entirely self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents both page and page_size parameters, so the description does not need to repeat them. The description adds no parameter-specific meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List documents in the trash (soft-deleted documents).' The scope is clear and distinguishes it from list_documents and destructive trash tools like empty_trash and restore_from_trash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is clear: call this when listing soft-deleted documents, and the content-omission note aligns it with list_documents. It does not explicitly enumerate exclusions or alternatives, but the selection context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workflow_actionsARead-only
List all workflow actions with optional pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| page_size | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description is consistent with that. It adds 'optional pagination' which is a minor behavioral detail already captured in the schema. No additional context about return format or filtering behavior is provided, but since annotations cover the read-only nature, a mid-range score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no fluff. The core purpose ('List all workflow actions') is front-loaded, and the pagination note is concise. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list endpoint with no output schema and two optional parameters, the description is largely sufficient. It clearly states the action and implies the result is a list. It could mention the response structure or any default pagination behavior, but that's not strictly necessary given the low complexity and the presence of a read-only annotation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters (page, page_size) are fully documented in the schema with descriptions and constraints. The description merely summarizes them as 'optional pagination', adding no meaningful information beyond what the schema already provides. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states the verb 'List' and the resource 'workflow actions' precisely, clearly distinguishing from sibling list tools like list_documents or list_workflows. The scope 'all' is explicit, leaving no ambiguity about what this endpoint does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for browsing all workflow actions but provides no explicit guidance on when to use it over get_workflow_action or other related tools. No exclusions or alternatives are mentioned, so agents must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workflowsARead-only
List workflows (each with its nested triggers and actions) with optional pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| page_size | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that the result includes nested triggers and actions, which is useful. However, it doesn't disclose pagination behavior (e.g., defaults, max page size) or whether the list is exhaustive, leaving minor gaps that annotations do not fill.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the action, resource, and key inclusion (nested triggers/actions), with zero filler words. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with two self-explanatory parameters and no output schema, the description covers the essential behavior (listing workflows with nested content and pagination). It doesn't address potential edge cases like empty results or authorization, but these are minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page and page_size are fully documented in the schema. The description only mentions 'optional pagination', which adds no new meaning beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a concrete resource ('workflows') and adds a distinguishing detail ('each with its nested triggers and actions'). This clearly separates it from siblings like get_workflow (single item) and list_workflow_triggers/actions (flat lists).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when you need a paginated list of workflows including their nested structure), but it does not explicitly reference alternatives or exclusions. Compared to higher-tier examples, it lacks a 'use X instead for Y' statement, but the purpose is self-evident and no misleading guidance exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workflow_triggersARead-only
List all workflow triggers with optional pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| page_size | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates the read-only nature, and the description is consistent with it. The description adds only the 'all triggers' scope and optional pagination, but does not disclose ordering, default page size, or response shape, which an agent might want to know for a tool without an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the core action front-loaded and the pagination qualifier placed immediately afterward. It contains no filler, no repetition of schema details, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with two optional, fully documented parameters, the description is largely complete. It does not specify return fields or default pagination behavior, but those details are not essential for an agent to select or invoke this tool correctly, especially given the read-only annotation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both page and page_size already have descriptive schema entries. The description's mention of 'optional pagination' adds no meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('list') and resource ('workflow triggers'), clearly identifying a read-only enumeration operation. It is distinct from the singular get_workflow_trigger and from sibling tools like list_workflow_actions, though it does not explicitly contrast itself with those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when all workflow triggers are needed, and mentions optional pagination. However, it provides no explicit guidance about when to choose this over get_workflow_trigger, list_workflow_actions, or list_workflows, and it does not state any exclusions or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_documents_as_versionsADestructive
⚠️ Fold other documents into one document as its versions: each document in merge_documents stops existing as a separate document and becomes a version of root_document_id. Use it when the same paper arrived twice (e.g. a scan and a later emailed copy). Runs asynchronously.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true — merged documents no longer exist as separate documents | |
| version_label | No | Label for the new versions | |
| merge_documents | Yes | Documents to turn into versions of the root | |
| root_document_id | Yes | The document that keeps existing and receives the versions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description reinforces and expands on this: it states that merged documents 'stop existing as a separate document' and that the operation 'runs asynchronously.' It also explains the confirm parameter's role. The only minor gap is not detailing what happens to the root document's existing versions or whether the operation can be reversed, but the core destructive behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The warning emoji and destructive consequence are front-loaded, the use case is given in the second sentence, and the async behavior is stated last. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, async operation with no output schema, the description covers the key facts an agent needs: what the tool does, when to use it, the destructive consequence, and the async nature. It doesn't mention return values or how to check completion, but the absence of an output schema and the presence of a task system (sibling tools like list_tasks) make that a minor gap. The description is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds context for merge_documents and root_document_id by explaining their relationship ('becomes a version of root_document_id') and for confirm by noting the consequence. However, it doesn't add detail about version_label beyond the schema's 'Label for the new versions.' Baseline 3 is appropriate because the schema carries the heavy lifting and the description adds only modest extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('fold'), a resource ('documents into one document as versions'), and the exact effect ('each document in merge_documents stops existing as a separate document and becomes a version of root_document_id'). It also gives a concrete use case ('same paper arrived twice'), which distinguishes it from sibling tools like upload_document_version or delete_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it ('Use it when the same paper arrived twice, e.g. a scan and a later emailed copy') and implicitly distinguishes it from alternatives like upload_document_version (which adds a version to an existing document) and delete_document (which removes documents). The destructive consequence is stated upfront, so an agent knows not to use it for simple version uploads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_documentA
Upload a new document file (PDF, image, etc.) to Paperless-NGX with optional metadata. Upload is asynchronous: by default returns a task UUID (use list_tasks to track consumer progress) — the actual document ID is assigned only after the consumer has processed the file. Set poll=true to wait for the consumer to finish and return the final result (the new document_id on success, or the consumer error on failure) in a single call. Optional metadata: title, created (date), correspondent, document_type, storage_path, tags, archive_serial_number, custom_fields.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Base64-encoded file content (the universal method — works for any deployment, since the bytes travel over the wire). Alternatively, an absolute file path (e.g. /tmp/invoice.pdf) that the server reads from its OWN filesystem — this only works when the server runs on the same machine as the file (local/stdio deployments). For a remote server, the path option will fail; use base64 instead. | |
| poll | No | If true, wait for the consumer to finish and return the final task status, the new document_id (on success), or the consumer error (on failure) — instead of just the task UUID. Default false (returns immediately). | |
| tags | No | ||
| title | No | ||
| created | No | ||
| filename | Yes | Original filename including extension (e.g. 'invoice.pdf') | |
| storage_path | No | ||
| correspondent | No | ||
| custom_fields | No | ||
| document_type | No | ||
| poll_timeout_seconds | No | When poll=true, max seconds to wait before returning the still-in-progress status (default 30). Increase for large scans where OCR is slow. | |
| archive_serial_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description exceeds what annotations convey. It discloses that upload is asynchronous, that the default returns a task UUID while the document ID is assigned only after consumer processing, and that poll=true changes the return to either document_id or error. This informs the agent about latency and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a tight, front-loaded paragraph. Each sentence earns its place: the core action, the critical async behavior, and the optional metadata list. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description explicitly explains return values for both default and poll modes, including error behavior. Combined with the schema's detailed file and poll parametersathe description is complete enough for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so the description should compensate. It lists the optional metadata fields (title, created, correspondent, document_type, storage_path, tags, archive_serial_number, custom_fields), but this mostly mirrors property names without adding semantics. The detailed file (base64 vs path) and poll descriptions live in the schema, not the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Upload a new document file ... to Paperless-NGX' with optional metadata. This clearly distinguishes from related siblings like upload_document_version (new document vs new version) and update_document (update vs create).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context is provided: use this to upload new documents, and the asynchronous behavior is explained with the poll=true option and the companion list_tasks tool for tracking consumer progress. It implies 'use for new uploads, not for editing existing ones' but does not explicitly exclude alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
process_mail_accountA
Fetch mail for one account now and run its rules, instead of waiting for the schedule. Runs in the background; see list_tasks with task_type mail_fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the description adds value by disclosing that it 'runs in the background' and how to track progress via list_tasks. It does not detail potential side effects of running rules, but the annotations already cover the basic safety profile. The added context is meaningful beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. It front-loads the core purpose and then adds essential behavioral context (background execution and monitoring) in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers the action, the asynchronous nature, and how to check results. It does not explicitly define the id parameter, but the meaning is inferable from the tool name and context. Minor gaps remain, but overall it is sufficiently complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the schema only defines 'id' as a number with no description). The tool description implies 'id' refers to the mail account but does not explicitly state 'the ID of the mail account to process.' Since coverage is low, the description should compensate, but it only loosely implies the meaning. It adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: 'Fetch mail for one account now and run its rules.' It names the resource (mail account) and distinguishes it from the scheduled behavior. This clearly separates it from sibling tools like list_mail_accounts or test_mail_account, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use it ('instead of waiting for the schedule') and directs the agent to list_tasks for monitoring. However, it does not mention any exclusions or alternatives (e.g., test_mail_account) or conditions under which it should not be used. The guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_from_trashAIdempotent
Restore documents from the trash back to the system.
| Name | Required | Description | Default |
|---|---|---|---|
| documents | Yes | Array of document IDs to restore |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate that this is mutating, idempotent, and non-destructive, so the description's job is lighter. It adds the contextual effect of returning documents to the system, but it does not describe edge cases such as restoring a document that is not in the trash, whether metadata is preserved, or what the API returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to explaining the action and its scope, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation operation, the description combined with the schema and annotations covers what an agent needs to call it correctly. It is slightly incomplete in not explaining result expectations or preconditions, but those gaps are minor given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the documents parameter already documented as 'Array of document IDs to restore.' The description adds no additional parameter meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Restore', and a clear resource, 'documents from the trash', then states the destination, 'back to the system.' This makes the tool's purpose unmistakable and distinguishes it from related operations like list_trash, empty_trash, and delete_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'from the trash' implies the tool should be used on trashed documents, but no alternatives are named and no explicit when-to-use or when-not-to-use guidance is provided. An agent must infer the contrast with empty_trash or delete_document rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_autocompleteARead-only
Get search term autocomplete suggestions based on the document index.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | The partial search term to autocomplete | |
| limit | No | Maximum number of suggestions (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this as a safe read operation, and the description's 'Get' wording aligns with that. The description adds minimal behavioral context—that suggestions derive from the document index—but does not go beyond the annotation in any meaningful way.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler and places the core action and resource up front. It could earn a 5 with explicit guidance on when to use it, but as written it is still appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter tool with a fully covered schema, this description is sufficient for an agent to invoke it correctly. A short mention of how it differs from search_documents would make it fully complete, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (term and limit) are already well documented in the schema. The description adds no additional parameter-level meaning beyond confirming the suggestions are index-based, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get') and a specific resource ('search term autocomplete suggestions based on the document index'), which clearly communicates what the tool returns. It is distinct enough from sibling tools like search_documents, though it does not explicitly draw that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'based on the document index' plus the parameter 'partial search term' implies when this tool is relevant (autocomplete during search entry), but there is no explicit guidance about when to choose it over alternatives such as search_documents or get_document_suggestions. Usage context is present but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_documentsARead-only
Full text search for documents. This tool is for searching document content, title, and metadata using a full text query. For general document listing or filtering by fields, use 'list_documents' instead. Note: Document content is excluded from results by default. Use 'get_document_content' to retrieve content when needed.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses a key behavioral detail: 'Document content is excluded from results by default.' This prevents an agent from assuming full content is returned, and it points to a follow-up tool. It doesn't address other potential behaviors like pagination or result count, but the most important surprise is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: purpose, alternative, and a critical behavioral note. The main purpose is front-loaded, and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter search tool with no output schema, the description covers purpose, routing to siblings, and a critical default behavior. It does not describe the shape of results or pagination, but the lack of an output schema makes that a minor gap. Overall, an agent has enough to decide when to call it and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the parameter is only typed as a string, so the description carries the burden of explaining 'query'. It clarifies that the query is a 'full text query' used to match against 'content, title, and metadata', which gives the parameter meaningful semantics beyond the bare type. It stops short of specifying query syntax or examples, but it is adequate for a single simple parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb-resource pair 'Full text search for documents' and elaborates that it searches 'document content, title, and metadata.' It also explicitly distinguishes itself from the sibling 'list_documents', so an agent can immediately tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear guidance: use this tool for full-text searches, 'use 'list_documents' instead' for listing or field filtering, and 'Use 'get_document_content' to retrieve content when needed.' This is an explicit when-to-use and when-not-to-use with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_mail_accountARead-only
Test IMAP connection settings without saving them. Pass the full account fields. To test a SAVED account, pass its id together with the masked password exactly as get_mail_account returns it (all asterisks) — Paperless then uses the stored password (without id it would try the literal asterisks and report a login failure). Note: Paperless 3.2 answers an unreachable server or refused connection with a bare HTTP 500 rather than a message — treat a 500 as 'could not connect'.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ID of a saved account whose stored password should be used | |
| name | Yes | ||
| owner | No | ||
| is_token | No | true when `password` is an OAuth/app token | |
| password | Yes | IMAP password or OAuth token. Write-only: Paperless returns it masked as all asterisks (at least 10, one per character), and sending any all-asterisks value back leaves the stored password unchanged. | |
| username | Yes | ||
| imap_port | Yes | Usually 993 (SSL) or 143 (STARTTLS / none) | |
| imap_server | Yes | ||
| account_type | No | 1=IMAP, 2=Gmail OAuth, 3=Outlook OAuth | |
| character_set | No | e.g. UTF-8 (default) or US-ASCII | |
| imap_security | No | 1=no encryption, 2=SSL, 3=STARTTLS |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description explains the masked-password round-trip behavior, the login failure that occurs if id is omitted, and the Paperless 3.2 HTTP 500 response for unreachable servers. These are exactly the non-obvious behaviors an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with the core purpose front-loaded, immediately followed by the two most important invocation caveats. The long second sentence is dense but information-rich, and the HTTP 500 warning is placed last as a trailing interpretive note. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers both new and saved account scenarios, explains the password masking trap, and clarifies how to interpret a bare 500 response. For a read-only test endpoint with no output schema, this provides everything an agent needs to call and evaluate the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds critical meaning for id and password: id switches to the stored password, and password must be sent as the exact asterisk-masked value returned by get_mail_account. The schema already describes most other parameters, so this adequately compensates for the 64% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states clearly that the tool 'Test[s] IMAP connection settings without saving them,' giving a specific verb and resource. This differentiates it from account creation/update tools and from process_mail_account by emphasizing the test-only, non-persisting nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage modes: pass full account fields for a new account, or pass id plus the masked password for a saved account, and tells the agent how to obtain that masked password from get_mail_account. It does not explicitly mention alternative test tools like test_storage_path, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_storage_pathARead-only
Test a storage path template to see how it would resolve for documents. Useful for validating path templates before creating or updating storage paths.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Storage path name | |
| path | Yes | The path template to test, e.g. '{{ created_year }}/{{ correspondent }}/{{ title }}' | |
| match | No | ||
| is_insensitive | No | ||
| matching_algorithm | No | Matching algorithm: 0=None, 1=Any word, 2=All words, 3=Exact match, 4=Regular expression, 5=Fuzzy word, 6=Automatic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals no mutation, and the description adds that this is a dry-run-style test ('would resolve') rather than an actual creation. However, it does not describe what the test returns, how resolution works, or any limitations, so it adds only modest behavioral context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The first sentence states the action and resource; the second adds practical usage context. The description is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple read-only test tool given the readOnlyHint annotation and schema coverage of the main parameters. However, it does not explain what the response looks like or how the optional matching parameters influence which documents are used for the test, which would help an agent use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 60%, and the description does not add meaning for the undocumented parameters ('match', 'is_insensitive') or otherwise clarify how parameters affect resolution. It mostly restates 'path template' without explaining parameter behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Test'), a clear resource ('a storage path template'), and the outcome ('how it would resolve for documents'). It also positions the tool as a validation step before creating or updating storage paths, which distinguishes it from sibling storage-path tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says it is useful for validating path templates before creating or updating storage paths, giving clear context on when to use it. It does not name alternative tools or state when not to use it, but the intended use is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_correspondentAIdempotent
Update fields on ONE correspondent (PATCH — only fields you supply are changed). Editable fields: name, match (matching pattern), matching_algorithm, is_insensitive. To assign this correspondent to documents, use edit_documents_bulk with method 'set_correspondent' or update_document instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| match | No | ||
| is_insensitive | No | Whether matching is case-insensitive | |
| matching_algorithm | No | Matching algorithm: 0=None, 1=Any word, 2=All words, 3=Exact match, 4=Regular expression, 5=Fuzzy word, 6=Automatic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds PATCH partial-update behavior ('only fields you supply are changed'), which is beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false). It also clarifies the scope to a single correspondent. No negative side effects are disclosed, but the core behavioral trait is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence gives the action and semantics, the second provides the crucial alternative. Information is front-loaded and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with annotations covering safety and idempotency, the description is complete: it states the target, editable fields, PATCH behavior, and an important edge case (document assignment). No output schema exists, so not documenting return values is acceptable. The agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has descriptions only for is_insensitive and matching_algorithm (40% coverage). The description compensates by enumerating all editable fields and giving extra meaning for 'match' as 'matching pattern'. It also clarifies that id is not an editable field (only a resource identifier). This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation: 'Update fields on ONE correspondent'. It specifies the PATCH semantics and lists the four editable fields, which unambiguously distinguishes it from bulk operations like edit_correspondents_bulk and from create/delete tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides an exclusion and alternative: 'To assign this correspondent to documents, use edit_documents_bulk with method set_correspondent or update_document instead.' This gives clear when-not-to-use guidance and points to the correct sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_custom_fieldAIdempotent
Update fields on ONE custom field definition (PATCH — only fields you supply are changed). Editable fields: name, data_type, extra_data. ⚠️ Changing data_type on a field that already has values on documents may render those values invalid or unreadable — change data_type only on unused fields. To set a custom-field VALUE on a document, use update_document or edit_documents_bulk with method 'modify_custom_fields' instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| data_type | No | ||
| extra_data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses PATCH behavior (only supplied fields change), a significant risk (changing data_type may invalidate existing values), and the recommended safe practice. It does not mention auth requirements or failure modes, but the annotations already carry the core safety profile, and the PATCH detail is valuable additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the action and scope, the second lists fields, the third warns about a dangerous operation, and the fourth routes to the correct alternative. Every sentence serves a distinct purpose, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no output schema, the description covers purpose, PATCH semantics, the editable fields, the key danger (data_type change), and the correct sibling tools for value-setting. It does not mention return values, but no output schema exists and the description's job is not to document those. It could add permission requirements or error behavior, but it is substantially complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by naming the editable fields (name, data_type, extra_data) and clarifying that only supplied fields are modified. It does not deeply explain each field's format, but the schema already provides data_type enum and extra_data schema; the description adds the crucial PATCH semantics and the data_type risk warning, which go beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update'), a specific resource ('ONE custom field definition'), and clarifies PATCH semantics. It explicitly distinguishes itself from setting custom-field values on documents by naming update_document and edit_documents_bulk, and the word 'ONE' contrasts with the bulk sibling edit_custom_fields_bulk.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit direction: use this tool to update the definition itself, and when the goal is to set values on documents, it names the exact alternative methods ('update_document or edit_documents_bulk with method 'modify_custom_fields''). It also includes a warning about when data_type changes are unsafe, which serves as a conditional usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_documentAIdempotent
Update fields on ONE document (PATCH — only fields you supply are changed). Editable fields: title, correspondent, document_type, storage_path, tags (replaces the array), content (raw searchable text), created (document date, YYYY-MM-DD), archive_serial_number, owner, custom_fields. For applying the same change to MANY documents, see edit_documents_bulk. To add a comment/annotation rather than change a field, see create_document_note.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the document to update | |
| tags | No | Array of tag IDs to assign to the document | |
| owner | No | The ID of the user who owns the document | |
| title | No | The new title for the document (max 128 characters) | |
| content | No | The raw text content of the document (used for searching) | |
| created | No | The creation date in YYYY-MM-DD format | |
| storage_path | No | The ID of the storage path to assign | |
| correspondent | No | The ID of the correspondent to assign | |
| custom_fields | No | Array of custom field values to assign | |
| document_type | No | The ID of the document type to assign | |
| archive_serial_number | No | The archive serial number (0-4294967295) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the description builds on that. It adds PATCH behavior (only supplied fields change) and notes that tags replaces the array, plus the exact date format and custom field value conventions. This is valuable context beyond the annotations, though it does not address failure modes or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: the first establishes the core operation and PATCH semantics, the second lists editable fields, and the third points to alternatives. It is front-loaded, information-dense, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters and no output schema, the description covers the key distinctions (single vs bulk, field change vs note) and the schema covers parameter details. It does not explain the response format, but that is not required given the schema and the tool's nature. It is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description lists editable fields and highlights that tags replaces the array, but the schema already documents every parameter with detailed explanations (including custom field formats). The description adds little beyond a summary, so it does not push the score above 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Update fields on ONE document' and explicitly notes PATCH semantics (only fields you supply are changed). This distinguishes it from bulk edit and comment creation, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when to use this tool (single document update) and explicitly points to edit_documents_bulk for many documents and create_document_note for adding comments/annotations, providing concrete alternatives and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_document_typeAIdempotent
Update fields on ONE document type (PATCH — only fields you supply are changed). Editable fields: name, match (matching pattern), matching_algorithm, is_insensitive. To assign this document type to documents, use edit_documents_bulk with method 'set_document_type' or update_document instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| match | No | ||
| is_insensitive | No | Whether matching is case-insensitive | |
| matching_algorithm | No | Matching algorithm: 0=None, 1=Any word, 2=All words, 3=Exact match, 4=Regular expression, 5=Fuzzy word, 6=Automatic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds PATCH semantics ('only fields you supply are changed'), which is valuable behavioral context beyond the annotations. It doesn't mention permissions or side effects, but the idempotentHint and non-destructive annotation cover the main safety profile. The PATCH disclosure is a meaningful addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core PATCH semantics and editable fields, then the alternative routing. Every sentence earns its place; no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-resource PATCH tool with idempotentHint=true and destructiveHint=false, the description covers the essential behavior and routes to alternatives. The main gap is that 3 of 5 parameters lack schema descriptions and the description doesn't add detail for them, but the tool is simple enough that an agent can infer the semantics from the field names. No output schema exists, but for a PATCH update the response format is typically the updated object, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 40% (2 of 5 params have descriptions: is_insensitive and matching_algorithm). The description lists the editable fields (name, match, matching_algorithm, is_insensitive) but doesn't add meaning beyond what the schema provides for the undocumented ones (id, name, match). The description does clarify that only supplied fields are changed, which is useful for understanding how parameters behave, but it doesn't compensate for the 3 undocumented parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update'), a specific resource ('ONE document type'), and the PATCH semantics ('only fields you supply are changed'). It also lists the editable fields, which distinguishes it from create/delete/bulk document type tools. This is a clear, specific purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool (updating fields on one document type) and when not to: 'To assign this document type to documents, use edit_documents_bulk with method 'set_document_type' or update_document instead.' This is explicit routing to alternatives, which is exactly what the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_document_versionAIdempotent
Rename a version of a document (change its version_label). Version IDs are listed in get_document's versions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document ID | |
| version_id | Yes | The version ID from the document's `versions` | |
| version_label | Yes | New label |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutation (readOnlyHint=false), idempotence (idempotentHint=true), and non-destruction (destructiveHint=false). The description adds that the change is limited to the version_label and that version IDs come from get_document, which is useful procedural context. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the main action front-loaded and no filler. Every sentence contributes either the operation or the dependency on get_document for version IDs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter rename with no output schema and clear annotations, the description covers the operation, the affected field, and how to find the required version_id. Return-value details are not specified, but they are not essential given the tool's simplicity and the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all three parameters with 100% coverage, so the baseline is 3. The description essentially restates the version_id provenance already present in the schema and names version_label, adding no meaningful parameter semantics beyond the structured definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Rename a version of a document') and the exact field affected ('change its version_label'), making the tool's purpose unmistakable. It also distinguishes this from sibling operations like upload_document_version and delete_document_version by focusing on the rename/label-only scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear prerequisite context: version IDs are obtained from get_document's `versions`, which tells the agent where to get the required version_id. It does not explicitly name alternatives or when-not-to-use cases, but the rename scope is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_mail_accountAIdempotent
Update fields on ONE mail account (PATCH — only fields you supply are changed). Omit password to keep the stored one.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| owner | No | ||
| is_token | No | true when `password` is an OAuth/app token | |
| password | No | IMAP password or OAuth token. Write-only: Paperless returns it masked as all asterisks (at least 10, one per character), and sending any all-asterisks value back leaves the stored password unchanged. | |
| username | No | ||
| imap_port | No | Usually 993 (SSL) or 143 (STARTTLS / none) | |
| imap_server | No | ||
| account_type | No | 1=IMAP, 2=Gmail OAuth, 3=Outlook OAuth | |
| character_set | No | e.g. UTF-8 (default) or US-ASCII | |
| imap_security | No | 1=no encryption, 2=SSL, 3=STARTTLS |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral details beyond the annotations: PATCH semantics, partial updates, and the special rule that omitting password preserves the stored one. The password masking behavior is already in the schema, but the description reinforces the key call-time behavior. There is no contradiction with the idempotentHint or destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single tight sentence that front-loads the core action and scope ('Update fields on ONE mail account') and then provides essential PATCH behavior. Every clause earns its place with no repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an update tool with 11 parameters, the description covers the most critical contextual rule: partial updates and password retention. The schema already documents required id, valid ranges, and most field meanings. The absence of an output schema is acceptable since the description and annotations provide sufficient information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful parameter behavior: only supplied fields are updated, and omitting password retains the existing one. However, schema description coverage is only 55%, and several parameters (id, name, owner, username, imap_server) remain undocumented in both the schema and description. The added PATCH semantics help, but the description does not fully compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update') and resource ('mail account'), and emphasizes 'ONE' account, which clearly distinguishes this from any bulk or list operation. Mentioning PATCH further clarifies the exact HTTP behavior. This is immediately actionable for an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys that this tool is for modifying a single existing mail account and that fields are only changed when supplied. It does not explicitly name alternatives, but the CRUD context and sibling list make the usage obvious. It provides enough context to decide when to call it without needing exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_mail_ruleAIdempotent
Update fields on ONE mail rule (PATCH — only fields you supply are changed). E.g. switch assign_correspondent_from to 4 to stop creating a correspondent per sender.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| order | No | Rules run in ascending order | |
| owner | No | ||
| action | No | What happens to processed mail: 1=delete, 2=move to action_parameter folder, 3=mark as read (default), 4=flag, 5=tag with action_parameter | |
| folder | No | IMAP folder (default INBOX); subfolders use the server's delimiter, e.g. INBOX.Invoices | |
| account | No | Mail account ID | |
| enabled | No | ||
| filter_to | No | ||
| pdf_layout | No | Mail-to-PDF layout: 0=system default, 1=text then HTML, 2=HTML then text, 3=HTML only, 4=text only | |
| assign_tags | No | ||
| filter_body | No | ||
| filter_from | No | ||
| maximum_age | No | Only mails younger than this many days (default 30) | |
| filter_subject | No | ||
| attachment_type | No | 1=attachments only (default), 2=all files including inline | |
| stop_processing | No | Skip later rules once this rule queued a document | |
| action_parameter | No | ||
| assign_title_from | No | 1=mail subject (default), 2=attachment filename, 3=don't assign | |
| consumption_scope | No | 1=attachments only (default), 2=whole mail as .eml, 3=.eml plus attachments as separate documents | |
| assign_correspondent | No | ||
| assign_document_type | No | ||
| assign_owner_from_rule | No | ||
| assign_correspondent_from | No | 1=don't assign (default), 2=sender mail address, 3=sender name (falls back to address), 4=the correspondent in assign_correspondent. ⚠️ 2 and 3 CREATE a new correspondent for every distinct sender string — the usual cause of duplicate correspondents. Prefer 4, or 1 plus matching rules on existing correspondents. | |
| filter_attachment_filename_exclude | No | Skip attachments whose whole filename matches | |
| filter_attachment_filename_include | No | Only attachments whose whole filename matches, e.g. *.pdf |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavioral context beyond annotations: PATCH semantics (only supplied fields change, no destructive full-object overwrite), and a warning about assign_correspondent_from values 2/3 creating duplicate correspondents. Annotations already say readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the description adds value without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core behavior (PATCH on ONE rule) and a concrete example. No filler or repetition of schema content. The warning example is dense but earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 26-parameter PATCH tool with no output schema, the description is adequate but leaves the agent to infer parameter meanings from the 50% schema coverage. It does not explain return values or error behavior, but the PATCH semantics and example cover the riskiest choice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, and the description does not enumerate or explain most parameters. However, the core parameter semantics (PATCH semantics, assign_correspondent_from values, stop_processing) are partially covered by the schema descriptions. The description adds an important warning example for assign_correspondent_from that goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Update fields on ONE mail rule'), the resource (mail rule), and the PATCH semantics (only supplied fields are changed), which clearly distinguishes it from create_mail_rule and delete_mail_rule siblings. It includes a concrete example that adds precision about the subtle assign_correspondent_from behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: use for updating a single rule, contrasted with one-rule scope ('ONE'). It does not explicitly name siblings create_mail_rule/delete_mail_rule or state when not to use it, but the PATCH semantics and example give clear enough guidance for an agent to select it over list/get/create/delete siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_saved_viewAIdempotent
Update fields on ONE saved view (PATCH — only fields you supply are changed). Editable fields: name, show_on_dashboard, show_in_sidebar, sort_field, sort_reverse, filter_rules. Supplying filter_rules replaces the entire rule array (not a merge).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| sort_field | No | ||
| filter_rules | No | ||
| sort_reverse | No | ||
| show_in_sidebar | No | ||
| show_on_dashboard | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say the call is mutating and idempotent; the description goes further by disclosing partial-update behavior and warning that filter_rules replaces the entire array. It also adds a not-a-merge caveat, which is exactly the kind of non-obvious behavior an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences front-load the most important fact (ONE saved view, PATCH) and then pack the field list and the filter_rules caveat with no filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating update tool with seven parameters and no output schema, this description covers partial update behavior, editable fields, and the one dangerous merge-vs-replace pitfall. It does not discuss return values or error cases, but those are not required to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by enumerating all editable fields and adding the key semantics that only supplied fields change. It also explains the special filter_rules replacement behavior. It does not elaborate on each field's meaning, but the property names and schema types make most of them self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource ('Update fields on ONE saved view') and immediately clarifies the PATCH semantics. It lists exactly which fields are editable, which distinguishes it clearly from create_saved_view, delete_saved_view, and list_saved_views.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The PATCH framing and 'only fields you supply are changed' make the intended use clear: partial modification of an existing saved view. It does not explicitly name alternatives or exclusions, but no agent could mistake this for creation, listing, or deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_storage_pathAIdempotent
Update fields on ONE storage path (PATCH — only fields you supply are changed). Editable fields: name, path (path template), match (matching pattern), matching_algorithm, is_insensitive. To assign this storage path to documents, use edit_documents_bulk with method 'set_storage_path' or update_document instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| path | No | The path template | |
| match | No | ||
| is_insensitive | No | Whether matching is case-insensitive | |
| matching_algorithm | No | Matching algorithm: 0=None, 1=Any word, 2=All words, 3=Exact match, 4=Regular expression, 5=Fuzzy word, 6=Automatic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a non-read-only, non-destructive, idempotent operation, and the description adds valuable PATCH semantics: only supplied fields are changed. This is important behavioral context beyond what the annotations convey, though it does not disclose error behavior or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the verb, resource, and PATCH behavior before listing fields and alternatives. Every sentence contributes meaningful guidance without repetition or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-resource partial update with no output schema, the description provides everything needed: what is updated, which fields are editable, the PATCH behavior, and where to go for a related but different action. Schema coverage handles the remaining parameter constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, so the description compensates by listing all editable fields and adding meaning to the previously undocumented 'match' parameter as a 'matching pattern.' It also clarifies 'path' as a path template, but some fields like name and matching_algorithm rely on their obvious names or existing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Update fields on ONE storage path,' making the tool's purpose immediately clear. It also distinguishes itself from related actions by noting that assigning a storage path to documents belongs to edit_documents_bulk or update_document, not this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this tool is for updating one storage path and explicitly names alternatives for the separate assignment use case. It does not enumerate all possible alternatives like create_storage_path or delete_storage_path, but the provided routing is clear enough for most agent decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tagAIdempotent
Update fields on ONE tag (PATCH — only fields you supply are changed). Editable fields: name, color, match (matching pattern), matching_algorithm, is_insensitive, parent (parent tag ID for hierarchy). To add or remove this tag on documents, use edit_documents_bulk with method 'add_tag' / 'remove_tag' / 'modify_tags' instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| color | No | ||
| match | No | ||
| parent | No | Parent tag ID for hierarchical tags | |
| is_insensitive | No | Whether matching is case-insensitive | |
| matching_algorithm | No | Matching algorithm: 0=None, 1=Any word, 2=All words, 3=Exact match, 4=Regular expression, 5=Fuzzy word, 6=Automatic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond annotations: it explicitly discloses PATCH semantics — only supplied fields are changed. This is valuable given the idempotentHint annotation already signals non-destructive update behavior, and no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core PATCH behavior, followed by helpful field enumeration and a targeted cross-reference. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-tag PATCH tool, the description covers the key behavioral distinction, editable fields, and routes document-tag operations elsewhere. It omits return-value details, but there is no output schema and the core calling context is sufficiently covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 43%, so the description partially compensates by listing editable fields and clarifying 'match' as a matching pattern and 'parent' as a hierarchy ID. However, it adds little for other parameters like color, is_insensitive, or matching_algorithm, which rely on the schema or naming.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: updating fields on exactly one tag, with PATCH semantics. It distinguishes itself from document-level operations by naming the sibling edit_documents_bulk and clarifying it is not for adding/removing tags on documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-not-to-use instruction: to add or remove tags on documents, use edit_documents_bulk with specific methods. It does not mention the sibling edit_tags_bulk for batch tag updates, so alternative usage guidance is slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_workflowAIdempotent
Update ONE workflow (PATCH). name/order/enabled change only when passed. ⚠️ triggers and actions, when passed, REPLACE the workflow's whole list: entries with an id update that existing item, entries without an id are created, and existing items you leave out are DELETED. To edit one action, call get_workflow first and send back the complete list with your change.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| order | No | ||
| actions | No | ||
| enabled | No | ||
| triggers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is highly transparent about the REPLACE-and-delete semantics, warning that existing items left out are DELETED. This directly contradicts the annotation destructiveHint=false, which claims no destructive behavior. Per the rubric, a description that contradicts an annotation receives a score of 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the purpose and the critical replacement warning, followed by actionable guidance. Every sentence earns its place, and the warning emoji draws appropriate attention to the destructive behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema and a large input schema, the description provides the essential behavioral context: PATCH semantics, which fields are partial, how triggers/actions are replaced, and the safe workflow for editing one action. The agent has what it needs to call the tool correctly, aside from the annotation contradiction noted above.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% at the top level, so the description must compensate. It does by explaining the partial-update semantics of name/order/enabled and the replace/update/create/delete semantics of actions and triggers. The nested schema descriptions already cover detailed subfields, so the description adds useful high-level meaning without repeating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Update ONE workflow (PATCH)', which clearly identifies the verb and resource. It distinguishes itself from siblings like create_workflow, delete_workflow, update_workflow_action, and update_workflow_trigger by focusing on the whole workflow object and its partial-update behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: name/order/enabled change only when passed, and triggers/actions replace the entire list. It explicitly instructs calling get_workflow first when editing one action. It does not explicitly name alternative tools like update_workflow_action or state when not to use this tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_workflow_actionAIdempotent
Update fields on ONE workflow action (PATCH — only fields you supply are changed). Use get_workflow_action first to see its current shape. To change the actions of a whole workflow, see update_workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| type | No | Action type: 1=assignment, 2=removal, 3=email, 4=webhook, 5=password removal (needs passwords), 6=move to trash, 7=remote OCR (its workflow must have a type-1 consumption-started trigger), 8=apply AI suggestions (needs ai_suggestion_fields; its workflow must have a trigger other than type 1) | |
| No | Type 3: email configuration | ||
| webhook | No | Type 4: webhook configuration | |
| passwords | No | Type 5 (required): PDF passwords to try, in order. The unlocked file is stored as a new version of the document. Tools return them masked ("**********"); send a masked list back unchanged to keep the stored passwords. | |
| assign_tags | No | ||
| remove_tags | No | ||
| assign_owner | No | ||
| assign_title | No | Type 1: Jinja2 title template | |
| remove_owners | No | ||
| remove_all_tags | No | ||
| ai_create_missing | No | Type 8: create suggested tags/correspondents/document types/storage paths that don't exist yet | |
| assign_view_users | No | ||
| remove_all_owners | No | ||
| remove_view_users | No | ||
| assign_view_groups | No | ||
| remove_view_groups | No | ||
| assign_change_users | No | ||
| assign_storage_path | No | ||
| remove_change_users | No | ||
| ai_suggestion_fields | No | Type 8 (required): which AI suggestions to apply. Needs AI enabled in Paperless. | |
| assign_change_groups | No | ||
| assign_correspondent | No | ||
| assign_custom_fields | No | Type 1: custom field IDs to add | |
| assign_document_type | No | ||
| remove_change_groups | No | ||
| remove_custom_fields | No | ||
| remove_storage_paths | No | ||
| ai_overwrite_existing | No | Type 8: apply suggestions even when the document already has a value | |
| remove_correspondents | No | ||
| remove_document_types | No | ||
| remove_all_permissions | No | ||
| remove_all_custom_fields | No | ||
| remove_all_storage_paths | No | ||
| remove_all_correspondents | No | ||
| remove_all_document_types | No | ||
| assign_custom_fields_values | No | Type 1: values for assign_custom_fields keyed by custom field ID, e.g. {"7": "2026-01-01"}. The value for the custom field. For monetary fields, use currency code prefix format (e.g., USD10.00, GBP123.45, EUR9.99) — NOT trailing symbol format (e.g., 10.00$). For documentlink fields, use a single document ID (e.g., 123) or an array of document IDs (e.g., [123, 456]). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond those hints: the PATCH semantics where only supplied fields are changed, which affects how an agent must construct calls (no need to resend unchanged fields). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: PATCH scope first, then the fetch-current-shape prerequisite, then the sibling alternative. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 37-parameter tool with 27% schema coverage and no output schema, the description is adequate but lean. It wisely points to get_workflow_action for the current shape, which mitigates the schema gaps, but it never says what the response looks like, how type-specific validation behaves, or what errors to expect. It covers selection and invocation basics but not the full complexity of this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 27%, well below 50%, so the description must compensate for undocumented parameters — but it adds no parameter-level meaning at all. It never mentions type-specific requirements (e.g., type 8 needs ai_suggestion_fields), prerequisite parameters, or which fields pair together. The schema's own descriptions cover only a fraction of the 37 parameters, and the description does nothing to close that gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb and resource ('Update fields on ONE workflow action') plus the PATCH partial-update semantics, and explicitly distinguishes itself from its sibling update_workflow ('To change the actions of a whole workflow, see update_workflow'). An agent can tell this from the workflow-level update tool without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ('Use get_workflow_action first to see its current shape') and an explicit alternative with the condition that selects it ('To change the actions of a whole workflow, see update_workflow'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_workflow_triggerAIdempotent
Update fields on ONE workflow trigger (PATCH — only fields you supply are changed). Use get_workflow_trigger first to see its current shape.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| type | No | Trigger type: 1=consumption started, 2=document added, 3=document updated, 4=scheduled | |
| match | No | ||
| sources | No | Consumption sources: 1=consume folder, 2=API upload, 3=mail fetch, 4=web UI (default [1,2,3]) | |
| filter_path | No | Path pattern, * wildcards allowed | |
| is_insensitive | No | ||
| filter_filename | No | Filename pattern (whole name must match), * wildcards allowed | |
| filter_has_tags | No | Document has ANY of these tags | |
| filter_mailrule | No | Only documents fetched by this mail rule ID | |
| matching_algorithm | No | Content match for `match`: 0=none, 1=any word, 2=all words, 3=exact, 4=regular expression, 5=fuzzy word | |
| filter_has_all_tags | No | Document has ALL of these tags | |
| filter_has_not_tags | No | Document has NONE of these tags | |
| schedule_date_field | No | Type 4: date the schedule is based on | |
| schedule_offset_days | No | Type 4: days to offset from schedule_date_field | |
| schedule_is_recurring | No | ||
| filter_custom_field_query | No | Custom-field filter as a JSON expression passed as a string. A condition is [field, operator, value], where field is the custom field's name or ID. Combine conditions with ["AND", [cond, …]] or ["OR", [cond, …]], and negate with ["NOT", cond]. Valid operators depend on the field's data type (e.g. exact, in, isnull, exists, icontains, gt, gte, lt, lte, range); pick an invalid one and Paperless names the valid ones. Examples: '["Amount", "gte", 100]', '["AND", [["Due", "lt", "2026-10-01"], ["Paid", "exact", false]]]'. | |
| schedule_date_custom_field | No | Type 4 with schedule_date_field=custom_field: the date custom field ID | |
| filter_has_any_storage_paths | No | Storage path is one of these | |
| filter_has_not_storage_paths | No | Storage path is none of these | |
| filter_has_any_correspondents | No | Correspondent is one of these | |
| filter_has_any_document_types | No | Document type is one of these | |
| filter_has_not_correspondents | No | Correspondent is none of these | |
| filter_has_not_document_types | No | Document type is none of these | |
| schedule_recurring_interval_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations by specifying that only supplied fields are changed, which is critical for a PATCH call. It also instructs read-before-write. It does not cover error behavior or permissions, but the annotations already declare idempotence and non-destructiveness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler: the first sentence states the operation and partial-update behavior, and the second gives a practical prerequisite. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 24-parameter mutation tool, this description is sufficient: it defines the operation, PATCH semantics, and the pre-read step, while the schema covers parameter meanings and annotations cover idempotence/safety. The absence of an output schema is not critical for invoking the update correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 79%, so the schema already documents most parameters and their meaning. The description does not add parameter-level detail beyond what the schema provides, and it does not clarify the few undocumented fields, but it also does not need to repeat the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update') and a precise resource ('ONE workflow trigger'), and immediately signals PATCH semantics. This clearly distinguishes it from create_workflow_trigger, delete_workflow_trigger, and update_workflow_action without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete precondition: use get_workflow_trigger first to inspect the current shape. It does not explicitly list alternatives or exclusions, but the context makes the intended workflow clear for an update operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_document_versionA
Add a new file version to an EXISTING document instead of creating a new document — e.g. a corrected scan, a signed copy, or an unlocked PDF. The new file becomes the current version: content, search and downloads follow it, and earlier versions stay listed in the document's versions (see get_document). Processing is asynchronous like post_document; set poll=true to wait. To strip a PDF password you don't need to re-upload: use edit_documents_bulk method remove_password with update_document=true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document to add the version to | |
| file | Yes | Base64-encoded file content (the universal method — works for any deployment, since the bytes travel over the wire). Alternatively, an absolute file path (e.g. /tmp/invoice.pdf) that the server reads from its OWN filesystem — this only works when the server runs on the same machine as the file (local/stdio deployments). For a remote server, the path option will fail; use base64 instead. | |
| poll | No | Wait for processing to finish (default false) | |
| filename | Yes | Filename including extension, e.g. 'contract-signed.pdf' | |
| version_label | No | Short label shown in the versions list, e.g. 'signed' | |
| poll_timeout_seconds | No | Max seconds to wait when poll=true (default 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits beyond the annotations: the new version becomes current for content/search/downloads, earlier versions remain listed, and processing is asynchronous with a poll option. This meaningfully informs the agent about side effects and timing without contradicting the readOnly/destructive hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: purpose, behavioral consequence, asynchronous behavior, and an alternative for a related scenario. Information is front-loaded with the core purpose before details. No redundant phrasing or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, rich schema descriptions, and no output schema, the description covers the essential operational context: when to use it, what happens to the version hierarchy, how to handle async processing, and when to use an alternative. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds contextual framing (e.g., existing document, versions list) but does not need to repeat parameter details. Baseline of 3 is appropriate because the schema carries the parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Add a new file version') and resource ('EXISTING document'), immediately distinguishing it from creating a new document. Concrete examples (corrected scan, signed copy, unlocked PDF) make the use case unmistakable. It clearly differentiates from sibling post_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool ('instead of creating a new document') and gives concrete example scenarios. It also provides a direct alternative for a related task ('use edit_documents_bulk method remove_password with update_document=true'), so an agent knows not to use this tool for that case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
108 tool updates
v3.2.0- First observed
acknowledge_tasks - First observed
create_correspondent - First observed
create_custom_field - First observed
create_document_note - First observed
create_document_type - First observed
create_mail_account - First observed
create_mail_rule - First observed
create_saved_view - First observed
create_share_link - First observed
create_share_link_bundle - First observed
create_storage_path - First observed
create_tag - First observed
create_workflow - First observed
create_workflow_action - First observed
create_workflow_trigger - First observed
delete_correspondent - First observed
delete_custom_field - First observed
delete_document - First observed
delete_document_note - First observed
delete_document_type - First observed
delete_document_version - First observed
delete_mail_account - First observed
delete_mail_rule - First observed
delete_saved_view - First observed
delete_share_link - First observed
delete_share_link_bundle - First observed
delete_storage_path - First observed
delete_tag - First observed
delete_workflow - First observed
delete_workflow_action - First observed
delete_workflow_trigger - First observed
download_document - First observed
download_documents_bulk - First observed
edit_correspondents_bulk - First observed
edit_custom_fields_bulk - First observed
edit_document_types_bulk - First observed
edit_documents_bulk - First observed
edit_tags_bulk - First observed
email_document - First observed
empty_trash - First observed
get_correspondent - First observed
get_custom_field - First observed
get_document - First observed
get_document_ai_suggestions - First observed
get_document_content - First observed
get_document_history - First observed
get_document_metadata - First observed
get_document_preview - First observed
get_document_suggestions - First observed
get_document_thumbnail - First observed
get_document_type - First observed
get_mail_account - First observed
get_mail_rule - First observed
get_next_asn - First observed
get_saved_view - First observed
get_share_link - First observed
get_share_link_bundle - First observed
get_statistics - First observed
get_storage_path - First observed
get_system_status - First observed
get_tag - First observed
get_task_status_counts - First observed
get_task_summary - First observed
get_workflow - First observed
get_workflow_action - First observed
get_workflow_trigger - First observed
list_active_tasks - First observed
list_correspondents - First observed
list_custom_fields - First observed
list_document_notes - First observed
list_document_share_links - First observed
list_document_types - First observed
list_documents - First observed
list_mail_accounts - First observed
list_mail_rules - First observed
list_saved_views - First observed
list_share_link_bundles - First observed
list_share_links - First observed
list_storage_paths - First observed
list_tags - First observed
list_tasks - First observed
list_trash - First observed
list_workflow_actions - First observed
list_workflow_triggers - First observed
list_workflows - First observed
merge_documents_as_versions - First observed
post_document - First observed
process_mail_account - First observed
rebuild_share_link_bundle - First observed
restore_from_trash - First observed
search_autocomplete - First observed
search_documents - First observed
test_mail_account - First observed
test_storage_path - First observed
update_correspondent - First observed
update_custom_field - First observed
update_document - First observed
update_document_type - First observed
update_document_version - First observed
update_mail_account - First observed
update_mail_rule - First observed
update_saved_view - First observed
update_storage_path - First observed
update_tag - First observed
update_workflow - First observed
update_workflow_action - First observed
update_workflow_trigger - First observed
upload_document_version
TDQS
Scored across 108 tools
Most tools follow a clear resource+action pattern with detailed descriptions that distinguish them, but the sheer scale and a few near-overlapping pairs (list_documents vs search_documents, update_document vs edit_documents_bulk, get_document_suggestions vs get_document_ai_suggestions) could cause misselection without careful reading.
Names are predominantly consistent verb_noun snake_case (list_documents, create_tag, update_document, delete_tag, edit_documents_bulk), with only minor deviations like post_document, restore_from_trash, empty_trash, and merge_documents_as_versions that don't undermine the overall pattern.
At 108 tools, this is far beyond the 25+ threshold that already feels heavy, and the volume risks overwhelming agents even though the Paperless-ngx domain is broad. The exhaustive endpoint-by-endpoint design explains the count, but it would benefit from consolidation into fewer multi-purpose tools.
The surface is remarkably complete, covering documents (single, bulk, versions, notes, trash, share links, downloads, previews), search, tasks, workflows, mail accounts/rules, and all configuration objects. The only minor gap is a missing update operation for document notes, which is easily worked around.
Maintenance
Related MCP Connectors
Connect an AI assistant to a Capacities space (objects, daily notes, search).
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Document sharing, invoicing, and personal finance platform. 15+ AI tools via OAuth 2.1.
Connect AI agents to Process Street workflows, tasks, runs, data sets, and operational records.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables interaction with Paperless-NGX API servers, supporting document management, tagging, and metadata operations through a natural language interface.65 npm235ISC
- AlicenseCqualityAmaintenanceEnables searching, tagging, uploading, and reading documents in Paperless-NGX, with management of tags, correspondents, document types, and custom fields via MCP tools and resources.501MIT
- AlicenseNot gradedqualityDmaintenanceEnables managing Paperless-NGX documents, tags, correspondents, and document types via natural language. Supports document searching, downloading, uploading, and bulk editing.65 npmISC
- AlicenseNot gradedqualityDmaintenanceEnables Claude AI to interact with Paperless-NGX document management through natural language, offering 50 tools for full CRUD operations and management.106 npmMIT