Skip to main content
Glama
tobee89

mcp-paperless-ngx


Built against REST API version 10, with three things it does differently:

  • Accounted coverage. Every one of the 92 documented endpoints is either exposed as a tool or listed in src/tools/coverage.ts with a written reason for leaving it out. A test enforces this, so a Paperless release that adds an endpoint fails CI instead of quietly going unsupported.

  • Token discipline. A Paperless document carries its full OCR text. Naive wrappers return it by default and a single search can exhaust the model's context. Here, list results are trimmed server-side via ?fields=, the text lives behind its own paginated tool, and no list endpoint hands the raw API response through — a test enforces that. See Context cost.

  • Scoped surface. 99 tools would drown a model's tool list. Toolsets let you expose only what a given client needs, and --read-only removes every write path entirely.

Paperless-ngx 2.x is not supported: API version 10 introduced endpoints (nested tags, document versions, share_link_bundles, the split PDF operations) that this server assumes exist.

Quick start

npx -y mcp-paperless-ngx --check   # verify connectivity, then exit

Claude Code

claude mcp add paperless --scope user \
  --env PAPERLESS_URL=https://paperless.example.com \
  --env PAPERLESS_TOKEN=your-api-token \
  -- npx -y mcp-paperless-ngx

Claude Desktop, Cursor, Cline, and other MCP clients

{
  "mcpServers": {
    "paperless": {
      "command": "npx",
      "args": ["-y", "mcp-paperless-ngx"],
      "env": {
        "PAPERLESS_URL": "https://paperless.example.com",
        "PAPERLESS_TOKEN": "your-api-token"
      }
    }
  }
}

Getting an API token

Paperless web UI → your username (top right) → My Profile → the circular arrow button next to the API token field.

Related MCP server: paperlessngx-mcp

Configuration

Variable

Required

Default

Purpose

PAPERLESS_URL

yes

Base URL the server talks to.

PAPERLESS_TOKEN

yes

API token. PAPERLESS_API_KEY also works.

PAPERLESS_PUBLIC_URL

no

PAPERLESS_URL

URL used when building links for the user, if the instance is reachable under a different name from outside.

PAPERLESS_TOOLSETS

no

see below

Comma-separated toolsets, or all.

PAPERLESS_READ_ONLY

no

false

Expose only tools that cannot change anything.

PAPERLESS_HEADERS

no

Extra request headers, as JSON ({"X-Auth":"…"}) or Name: value, Name: value. Needed behind forward-auth proxies such as Authentik or Authelia.

PAPERLESS_DOWNLOAD_DIR

no

system temp

Where downloaded files are written.

PAPERLESS_MAX_PAGE_SIZE

no

100

Hard ceiling on list page sizes, whatever the model asks for.

PAPERLESS_TIMEOUT_MS

no

60000

Request timeout.

PAPERLESS_API_VERSION

no

10

REST API version sent in the Accept header.

CLI flags --url, --token, --public-url, --toolsets and --read-only override the environment. --check verifies connectivity, --list-tools prints the enabled tools.

Toolsets

Toolset

Default

Contents

documents

on

Search, read, update, delete, upload, download, notes, bulk and PDF operations

metadata

on

Tags, correspondents, document types, storage paths

customfields

on

Custom field definitions

views

on

Saved views

sharing

on

Share links and share link bundles

workflows

on

Automation rules, triggers, actions

system

on

Global search, statistics, status, tasks, trash

mail

off

IMAP accounts, mail rules, processed mail

admin

off

Users, groups, profile, configuration, logs (read-only)

mail and admin are off by default because most sessions never need them and every extra tool costs context on every request. Enable them explicitly:

PAPERLESS_TOOLSETS=documents,metadata,system,mail
PAPERLESS_TOOLSETS=all

Context cost

Wrapping an API for a language model has a cost the API itself does not: everything the model sees is paid for on every request. Two places where that bites, and what this server does about them.

Responses. Three shapes are expensive in Paperless and easy to return by accident:

Source

Problem

Handling

Document lists

Every document carries its full OCR text in content

?fields= restricts the response server-side; get_document_content paginates the text separately

/api/search/

Returns hydrated Document objects, OCR text included, across all object types

Documents are summarised, other types reduced to id + name

Workflows, mail rules, groups, tasks

27–34 fields per object, nested trigger/action definitions inline

Summarised to identifying fields; nested lists collapse to counts. full: true returns everything

Tool definitions. These are the larger and less obvious cost: names, descriptions and JSON schemas ship with every request, whether or not any tool is called.

Toolsets

Tools

Approximate cost per request

all

99

~20,500 tokens

default

85

~18,500 tokens

documents,metadata

49

~12,900 tokens

There is no way to make that free — it is the price of a tool the model can use without guessing. But it is worth being deliberate: if your sessions only ever search and file documents, running PAPERLESS_TOOLSETS=documents,metadata saves more context than any response-trimming does.

Safety

The server exposes destructive operations, because a document manager without them is not much of a manager. It does not try to guess when they are appropriate — that judgment belongs to the client and the user. What it does instead:

  • Destructive tools are annotated destructiveHint: true, so MCP clients can require confirmation.

  • Tool descriptions state plainly what cannot be undone (empty_trash, delete_custom_field, delete_originals) and ask for confirmation before the call.

  • --read-only removes every write tool from the list, rather than refusing them at call time.

  • Bulk endpoints support an "apply to everything matching this filter" mode. This server does not expose it: bulk tools take explicit ID lists, so a wrong filter cannot silently affect the entire archive.

  • create_share_link produces a publicly reachable URL. Its description says so, and the audit_sharing prompt exists to review what is already exposed.

Credential-adjacent endpoints (token generation, TOTP enrolment, disabling someone's second factor) are deliberately not exposed. See EXCLUDED_ENDPOINTS for the full list and the reasoning.

Prompts

Registered as slash commands in clients that support MCP prompts:

Prompt

What it does

triage_inbox

Walks untriaged documents, proposes metadata preferring existing entries, applies nothing until the user approves.

find_document

Locates a document from a vague description, searching cheaply before searching broadly.

audit_sharing

Reviews every public share link and flags the ones that never expire.

Testing

Three layers, because they catch different things:

npm test                                        # logic — no network
PAPERLESS_URL=… PAPERLESS_TOKEN=… \
  node scripts/smoke-test.mjs                   # all 55 read-only tools, live
PAPERLESS_URL=… PAPERLESS_TOKEN=… \
  node scripts/write-test.mjs                   # writes, live — see the warning

npm test checks this server's own reasoning: endpoint coverage, enum values against the schema, that no list tool leaks raw API objects, that read-only mode really removes writes.

smoke-test.mjs checks the assumptions it makes about Paperless. It calls every read-only tool against a real instance, resolving IDs from list calls instead of hard-coding them, and prints response sizes so expensive tools stay visible. It writes nothing.

write-test.mjs covers the rest: upload and consumption, updating every field type, notes, bulk tag edits, share links, rotation, and a trash round trip.

It only touches objects it creates itself. Everything it makes is named with a zz-mcp-test prefix and deleted again at the end, and it never modifies a document it did not upload. If a run is interrupted, leftovers with that prefix are safe to delete. Prefer a test instance if you have one.

Keeping up with Paperless

PAPERLESS_URL=… PAPERLESS_TOKEN=… node scripts/sync-schema.mjs
npm test

sync-schema.mjs regenerates schema/endpoints.json from your own instance's OpenAPI document. The test suite then reports any endpoint that is neither exposed nor explicitly excluded. That is the whole maintenance loop: point it at a newer Paperless and the test tells you what changed.

Development

npm install
npm start          # run from source
npm run build      # compile to build/
npm test           # unit tests + coverage checks
npm run inspect    # build, then open the MCP inspector

Prior art

Several MCP servers for Paperless-ngx exist, and the two most active both work against 3.x: cubinet-code/paperless-ngx-mcp adapts between 2.x and 3.x automatically, and baruchiro/paperless-mcp lets you choose the API version (PAPERLESS_API_VERSION, default 9). If you need to support both majors from one install, use one of those.

This server takes the opposite trade: it assumes API version 10 and nothing older. That is what lets it reach the endpoints 3.x introduced — nested tags, document versions, share_link_bundles, the standalone PDF operations — and lets a test assert that all 92 documented endpoints are accounted for. It also trims list responses server-side via ?fields=, so OCR text does not ride along by default.

License

MIT. See LICENSE.


Available Tools

85 tools
acknowledge_tasksDismiss tasksA

Mark finished or failed tasks as acknowledged so they stop showing in the UI.

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYesTask database IDs, not UUIDs.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate the operation is not read-only and not destructive; the description adds that the effect is a state change that suppresses tasks from the UI. This goes beyond the annotations without contradicting them, though it doesn't discuss reversibility or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-locads the action, and contains no filler or repetition of schema/annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation with schema coverage and annotations, the description covers the action and its effect. It is slightly light on what happens to invalid or non-terminal tasks, but the tool is simple enough that this is not a major gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema documents that 'tasks' are database IDs, not UUIDs, so format is covered. The description adds the missing semantic filter: the IDs should correspond to finished or failed tasks, which an agent would not know from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Mark') and resource ('tasks'), identifies the state transition ('as acknowledged'), and states the observable outcome ('stop showing in UI'). This distinguishes it from sibling task tools like get_active_tasks, list_tasks, and get_task, which are read-only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the conditions for use: only 'finished or failed tasks' should be acknowledged, and the goal is to remove them from the UI. It doesn't explicitly mention when not to use or name alternative tools, but no sibling offers acknowledgment, so the context is sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_download_documentsBulk download documentsA
Read-onlyIdempotent

Download several documents as one zip archive, written to the download directory. Returns the archive path, not its contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentNoWhich file version(s) to include.archive
filenameNoArchive filename. Defaults to a timestamped name.
documentsYes
compressionNodeflated
follow_formattingNoLay the archive out according to the documents' storage path templates.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a safe, read-only, idempotent operation. The description adds useful behavior beyond that: the archive is written to a download directory and the response is the archive path, not file contents. This gives the agent a clear model of what happens when invoked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, tightly scoped, and front-loads the core action and key behavioral detail. Every sentence earns its place with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderate-complexity tool with five parameters and no output schema, the description covers the key behavioral contract: archive creation, destination, and return type. It does not detail all parameter interactions, but those are sufficiently documented in the schema, and annotations cover safety and idempotency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60%, with descriptions for content, filename, and follow_formatting; documents and compression rely on their names/enum values. The description itself adds no parameter-level detail, but the schema carries most of the needed meaning for those parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: downloading several documents as one zip archive, written to the download directory. It also clarifies the return value is the archive path, not contents. This clearly distinguishes it from siblings like download_document or bulk_edit_documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when downloading several documents as a single archive. It does not explicitly mention alternatives or exclusions, such as using download_document for a single file, but the bulk scope is clear from both title and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_edit_documentsBulk edit documentsA
Destructive

Apply one operation to many documents at once. Far cheaper than looping update_document, and the only way to add or remove individual tags without replacing the whole tag list. Methods: set_correspondent, set_document_type, set_storage_path, add_tag, remove_tag, modify_tags, modify_custom_fields, set_permissions, reprocess, delete, rotate, merge, split, delete_pages, edit_pdf, remove_password. The destructive methods (delete, delete_pages, split/merge with delete_originals) need explicit user confirmation first.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFor add_tag / remove_tag.
mergeNoFor set_permissions: merge with existing permissions instead of replacing.
ownerNoFor set_permissions.
pagesNoFor split: page groups such as '[1-2,3-4,5]'. For delete_pages: page numbers such as '[2,3,4]'.
methodYes
degreesNoFor rotate: clockwise rotation in degrees.
add_tagsNoFor modify_tags.
passwordNoFor remove_password: the PDF's current password.
documentsYesIDs of the documents to act on. Always an explicit list — never an unbounded selection.
remove_tagsNoFor modify_tags.
storage_pathNoFor set_storage_path.
correspondentNoFor set_correspondent.
document_typeNoFor set_document_type.
set_permissionsNoFor set_permissions.
delete_originalsNoFor merge/split: delete the source documents afterwards. Irreversible.
add_custom_fieldsNoFor modify_custom_fields: {custom_field_id: value}.
metadata_document_idNoFor merge: which source document's metadata the result inherits.
remove_custom_fieldsNoFor modify_custom_fields.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool destructive and non-read-only, but the description adds valuable detail beyond that: it names exactly which methods are destructive and states the confirmation requirement. It also adds a performance trait ('far cheaper') and explains the tag-list behavior. No contradiction with 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: two sentences deliver purpose, benefit, full method inventory, and the safety rule. The method list is long but scannable and does not repeat parameter details. It overlaps the schema enum slightly, but the overlap helps an agent scan capabilities without opening the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 18 parameters, a nested set_permissions object, and no output schema, the description plus the rich schema is mostly sufficient for correct invocation. It covers all methods and the destructive-confirmation workflow. The remaining gap is that it does not state return behavior or whether the operation completes synchronously, which would matter for a bulk mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 94% and each parameter already carries a 'For <method>' note, so the schema does the heavy lifting. The description adds little parameter-level meaning beyond mentioning delete_originals in the destructive list, which is already documented in the schema. The baseline 3 is therefore appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise action ('Apply one operation to many documents at once') and a clear resource, then lists every supported operation. It also distinguishes the tool from looping update_document and calls out the unique tag-add/remove capability, so an agent can tell it apart from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to prefer this over looping update_document for cost reasons and identifies the tag add/remove case as the only way to avoid replacing the whole tag list. It also states that destructive methods require explicit user confirmation. However, it does not disambiguate against overlapping dedicated siblings such as delete_documents, merge_documents, rotate_documents, or edit_pdf.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_edit_metadata_objectsBulk edit metadata objectsA
Destructive

Delete or set permissions on many tags, correspondents, document types or storage paths at once. Deletion here is permanent — confirm with the user before calling it.

ParametersJSON Schema
NameRequiredDescriptionDefault
mergeNoMerge with existing permissions instead of replacing them.
ownerNo
objectsYesIDs of the objects to act on.
operationYes
object_typeYes
permissionsNoObject-level permissions. Overwrites existing permissions entirely unless the endpoint supports merging.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The destructiveHint annotation already flags that this is destructive; the description adds operational value by specifying that deletion is permanent and instructing the agent to confirm with the user before calling. This is important behavioral context beyond the annotation. It does not elaborate on set_permissions overwrite behavior, but the schema already describes that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first states the operation and scope, the second delivers a critical safety warning. No wasted words, and the most important action verbs are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex bulk operation with six parameters, a nested permissions object, and no output schema, the description is minimal. The safety warning is excellent, and the schema covers parameter details, but the description lacks guidance about alternatives, prerequisites, or the response after deletion. It is adequate but leaves routing and edge-case decisions to the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description clarifies the meaning of the operation and object_type enums ('Delete or set permissions' and listing the object types), and adds the semantic that deletion is permanent. However, schema description coverage is only 50%, and the description does not compensate for undocumented parameters like owner or the full structure of permissions, though the schema's permissions field already carries some weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names specific verbs ('Delete or set permissions') and specific resources ('tags, correspondents, document types or storage paths'). The phrase 'many ... at once' clearly separates this bulk tool from the singular per-object sibling tools like update_tag or delete_correspondent, so an agent can identify what it does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for bulk edits by saying 'many ... at once', and the permanence warning gives an important conditional caution. However, it does not explicitly state when to choose this over individual update/delete tools, nor does it name alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_correspondentCreate correspondentA

Create a new correspondent. Check list_correspondents first: near-duplicate entries are hard to merge later.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name. Must be unique.
matchNoText this object matches against, interpreted per matching_algorithm.
ownerNoOwning user ID, or null for unowned.
is_insensitiveNoCase-insensitive matching. Defaults to true.
set_permissionsNoObject-level permissions. Overwrites existing permissions entirely unless the endpoint supports merging.
matching_algorithmNoMatching algorithm: 0=none, 1=any word, 2=all words, 3=exact, 4=regex, 5=fuzzy, 6=auto. Use 6 (auto) unless the user asked for a specific rule.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is a non-read-only, non-idempotent, non-destructive create operation. The description adds the practical risk of near-duplicates being hard to merge, which is helpful operational context, but it does not disclose error behavior, permission side effects, or return values. This is a fair extension of the annotations rather than a contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence states the core action minimally, and the second provides a high-value operational warning without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six parameters, nested permission objects, and no output schema, the description plus the richly documented schema is sufficient for correct invocation. The duplicate warning is important. It would be a 5 if it also described the returned object or duplicate-name error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 parameters like match, owner, is_insensitive, set_permissions, and matching_algorithm. The description adds no parameter-level detail, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action and resource: 'Create a new correspondent.' It also positions the tool against its sibling CRUD operations by instructing the agent to check list_correspondents first, making the creation entry point unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent to run list_correspondents before creating and explains why: 'near-duplicate entries are hard to merge later.' This is useful when-to-use guidance, though it stops short of explicitly saying to use update_correspondent when a matching entry already exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_custom_fieldCreate custom fieldA

Define a new custom field. The data type cannot be changed afterwards, so pick it deliberately.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
data_typeYesField type. 'select' requires extra_data.select_options; 'monetary' stores a currency-prefixed amount; 'documentlink' stores references to other document IDs.
extra_dataNoType-specific configuration. For 'select': {"select_options": [{"label": "Open"}, {"label": "Paid"}]}. For 'monetary': {"default_currency": "EUR"}.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds a valuable non-recoverable behavior: the data type cannot change after creation, which is not encoded in annotations or schema. Since annotations already signal that this is a mutating, non-idempotent operation, the extra permanence warning is strong added context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler; the core action comes first and the critical design constraint follows immediately. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the annotations and a schema that lists required parameters and extra_data examples, the description is nearly sufficient. It covers the one non-obvious constraint (type immutability), though it omits details such as return value and duplicate-name behavior, which are not critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 67% schema coverage, the schema already explains data_type and extra_data, including select/monetary requirements. The description adds meaningful semantics for data_type (immutability), but it does not explain the 'name' parameter or add details that the schema lacks for the remaining fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pairing ('Define a new custom field') and the word 'new' clearly distinguishes this creation action from sibling update_custom_field, get_custom_field, and delete_custom_field. There is no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage timing is implied by 'new' and the permanence warning suggests using this tool only when a custom field with a deliberate type is needed. However, it does not explicitly name alternatives like update_custom_field or say when not to use it, so the guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_document_noteAdd a note to a documentA

Attach a free-text note to a document. Use this to record context that belongs with the document rather than in the conversation — why it was kept, what was agreed, what to do next.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
noteYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating, non-idempotent operation, and the description does not contradict them or add significant behavioral details beyond 'attach.' It explains the purpose of the note but does not disclose, for example, whether repeated calls create multiple notes or how the note relates to the document record.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-load the action and resource, then immediately provide the intended use case with concrete examples. Every word earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter create operation with clear annotations and simple schema constraints, the description covers the essential context: what the tool does, when to use it, and what kind of content belongs in the note. No output schema is needed because the effect is straightforward.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by establishing that 'note' is free-text and the target is a 'document,' which makes the role of the 'id' parameter clear. No ambiguity remains about what the two parameters mean, even though the description does not restate schema constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Attach') and resource ('document'), and clearly defines the output as a free-text note. It also distinguishes this tool from siblings like delete_document_note and list_document_notes by emphasizing its purpose of storing context alongside the document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: 'record context that belongs with the document rather than in the conversation' with concrete examples. It does not explicitly name alternatives or exclusions, but the distinction between document-bound notes and conversational context is clear enough for selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_document_typeCreate document typeA

Create a new document type. Check list_document_types first: near-duplicate entries are hard to merge later.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name. Must be unique.
matchNoText this object matches against, interpreted per matching_algorithm.
ownerNoOwning user ID, or null for unowned.
is_insensitiveNoCase-insensitive matching. Defaults to true.
set_permissionsNoObject-level permissions. Overwrites existing permissions entirely unless the endpoint supports merging.
matching_algorithmNoMatching algorithm: 0=none, 1=any word, 2=all words, 3=exact, 4=regex, 5=fuzzy, 6=auto. Use 6 (auto) unless the user asked for a specific rule.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a non-readonly, non-idempotent write operation. The description adds a valuable behavioral warning about the long-term consequence of creating near-duplicates (hard to merge), which is not available from the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no wasted words. The core purpose is front-loaded in the first sentence, and the second sentence provides directly actionable guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with a fully described schema, the description covers the essential call-gating behavior (check for existing entries). It does not mention the return value or permission requirements, but those are less critical given the annotations and schema richness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains each parameter, including defaults and matching algorithm behavior. The tool description adds no parameter-level meaning, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb and resource ('Create a new document type') that clearly distinguishes it from sibling update/list/delete operations. The added warning about near-duplicates reinforces that this is a creation action, not a lookup or modification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit context: check list_document_types first, and warns that near-duplicate entries are hard to merge later. This effectively tells an agent when to pause before creating, though it does not explicitly name alternatives like update_document_type for modifications.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_saved_viewCreate saved viewA

Save a filter preset that shows up in the user's Paperless sidebar. filter_rules use the web UI's numeric rule types — copy the shape from an existing view via get_saved_view rather than guessing.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
page_sizeNo
sort_fieldNoe.g. 'created', 'title'.
filter_rulesNo
sort_reverseNo
show_in_sidebarNo
show_on_dashboardNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read/write profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds useful behavioral context: the saved view appears in the user's sidebar and filter_rules rely on numeric web UI rule types. It does not mention duplicate-name behavior or the return payload, but it adds enough context beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The first states the tool's purpose; the second flags the key gotcha and points to get_saved_view. Strong front-loading and every sentence carries weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with seven parameters and no output schema, the description covers the one genuinely tricky aspect (filter_rules) and explains the expected user-visible effect (appears in sidebar). It does not describe the return value or repeated-call behavior, but those are unlikely to block correct invocation. It is sufficiently complete for selection and basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 14%, so the description must compensate. It does meaningfully explain the most complex parameter, filter_rules, with the advice to copy an existing view's shape from get_saved_view instead of guessing. However, other parameters like page_size, sort_field, sort_reverse, show_in_sidebar, and show_on_dashboard are left entirely to the schema/type/name, so compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Save a filter preset that shows up in the user's Paperless sidebar.' This clearly indicates the tool creates a user-facing saved view. However, it does not explicitly contrast with update_saved_view or list_saved_views, and the verb 'Save' could ambiguously imply either create or update without the tool name carrying that weight.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete, actionable guidance: 'copy the shape from an existing view via get_saved_view rather than guessing.' This tells the agent exactly how to obtain valid filter_rules and identifies get_saved_view as the source. It does not, however, state when to use this tool versus update_saved_view or other siblings, so exclusions are not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_storage_pathCreate storage pathA

Create a new storage path. Check list_storage_paths first: near-duplicate entries are hard to merge later.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name. Must be unique.
pathYesFilename template, e.g. '{created_year}/{correspondent}/{title}'. Required when creating.
matchNoText this object matches against, interpreted per matching_algorithm.
ownerNoOwning user ID, or null for unowned.
is_insensitiveNoCase-insensitive matching. Defaults to true.
set_permissionsNoObject-level permissions. Overwrites existing permissions entirely unless the endpoint supports merging.
matching_algorithmNoMatching algorithm: 0=none, 1=any word, 2=all words, 3=exact, 4=regex, 5=fuzzy, 6=auto. Use 6 (auto) unless the user asked for a specific rule.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a write operation with open-world semantics, and the description adds a useful behavioral warning about near-duplicate merging difficulty. However, it does not disclose return behavior, permission requirements, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The primary action is front-loaded, and the caveat about checking list_storage_paths earns its place by preventing a costly mistake.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with no output schema, the description would benefit from stating what the tool returns (e.g., the created storage path object). The pre-check guidance and schema coverage make it minimally viable, but the missing return-value information leaves a gap for agents that need to chain operations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% parameter description coverage, so the schema already documents all parameters. The description adds no new parameter-level meaning beyond the general duplicate warning, which is acceptable but not exceptional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Create') and resource ('storage path'), and the phrase 'new storage path' distinguishes it from sibling operations like update_storage_path, delete_storage_path, and list_storage_paths. No ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent to check list_storage_paths first and explains why ('near-duplicate entries are hard to merge later'). This provides clear usage context, though it does not explicitly state when not to use this tool or name alternative create tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_tagCreate tagA

Create a new tag. Check list_tags first: near-duplicate entries are hard to merge later.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name. Must be unique.
colorNoHex colour such as '#a6cee3'.
matchNoText this object matches against, interpreted per matching_algorithm.
ownerNoOwning user ID, or null for unowned.
parentNoParent tag ID for nested tags (Paperless-ngx 3.x). Null for a top-level tag.
is_inbox_tagNoInbox tags are applied to newly consumed documents and mark them as untriaged.
is_insensitiveNoCase-insensitive matching. Defaults to true.
set_permissionsNoObject-level permissions. Overwrites existing permissions entirely unless the endpoint supports merging.
matching_algorithmNoMatching algorithm: 0=none, 1=any word, 2=all words, 3=exact, 4=regex, 5=fuzzy, 6=auto. Use 6 (auto) unless the user asked for a specific rule.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as non-read-only and non-destructive, so the bar is lower. The description adds valuable context that near-duplicate entries are hard to merge later, which is a non-obvious consequence not present in the schema. It does not cover permissions or return behavior, but the annotation coverage lessens that burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences with the core action front-loaded and a single high-value caveat following. No wasted words or redundant schema repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich 100%-covered schema and annotations, the description covers the key operational warning that is otherwise undiscoverable. The lack of output schema is not critical for a create operation, and the parameter semantics are fully handled elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter already has a meaningful description. The tool description adds no parameter-specific detail, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Create a new tag', which states a specific verb and resource and is immediately distinct from sibling tools like list_tags, update_tag, and delete_tag. The purpose is unambiguous and requires no inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit precondition: 'Check list_tags first', and explains why via the near-duplicate merge warning. This effectively tells the agent to avoid creating redundant tags, though it does not explicitly enumerate alternatives or exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_workflowCreate workflowA

Create an automation rule. Workflows run automatically against future documents, so a mistake here silently mis-files everything that arrives afterwards. Read an existing workflow with get_workflow to copy the exact shape, and confirm the rule with the user before creating it. Trigger object. type: 1=consumption started, 2=document added, 3=document updated, 4=scheduled. Common fields: sources (1=consume folder, 2=API upload, 3=mail fetch), filter_filename, filter_path, filter_mailrule, match + matching_algorithm, filter_has_tags / filter_has_all_tags / filter_has_not_tags, filter_has_any_correspondents, filter_has_any_document_types, filter_custom_field_query, and for scheduled triggers schedule_offset_days, schedule_is_recurring, schedule_recurring_interval_days, schedule_date_field (added|created|modified|custom_field). Action object. type: 1=assignment, 2=removal, 3=email, 4=webhook, 5=..., 6=... Assignment actions use assign_title, assign_tags, assign_correspondent, assign_document_type, assign_storage_path, assign_owner, assign_view_users/groups, assign_custom_fields. Removal actions use the remove_* counterparts. Email and webhook actions nest their own config object.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
orderNoLower numbers run first.
actionsYesAction object. type: 1=assignment, 2=removal, 3=email, 4=webhook, 5=..., 6=... Assignment actions use assign_title, assign_tags, assign_correspondent, assign_document_type, assign_storage_path, assign_owner, assign_view_users/groups, assign_custom_fields. Removal actions use the remove_* counterparts. Email and webhook actions nest their own config object.
enabledNo
triggersYesTrigger object. type: 1=consumption started, 2=document added, 3=document updated, 4=scheduled. Common fields: sources (1=consume folder, 2=API upload, 3=mail fetch), filter_filename, filter_path, filter_mailrule, match + matching_algorithm, filter_has_tags / filter_has_all_tags / filter_has_not_tags, filter_has_any_correspondents, filter_has_any_document_types, filter_custom_field_query, and for scheduled triggers schedule_offset_days, schedule_is_recurring, schedule_recurring_interval_days, schedule_date_field (added|created|modified|custom_field).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

This goes well beyond annotations by disclosing that workflows run automatically against future documents and that a mistake can silently mis-file everything afterward. That is behavioral context an agent cannot infer from readOnlyHint or destructiveHint alone, and it appropriately raises the caution level for this mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but packed with necessary detail for two complex nested objects. It is front-loaded with the most important warning before diving into field semantics. Some content duplicates the input schema descriptions, and the '5=..., 6=...' placeholders are weak, but overall the length is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of trigger/action configuration and the lack of an output schema, the description covers the critical invocation concerns: what to build, how to model it, and what risks to consider. It does not describe the return value or what happens after successful creation, which is a minor gap for a create operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description substantially compensates for incomplete schema coverage by enumerating trigger types, source filters, schedule fields, action types, and action-specific assignment/removal fields. It loses one point because action types 5 and 6 are left as '...' and a few fields like matching_algorithm are named but not explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'Create an automation rule.' It clearly identifies the workflow domain and is distinguishable from sibling tools like update_workflow, delete_workflow, and get_workflow. The mention of reading get_workflow to copy the shape reinforces what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong usage guidance: workflows act on future documents, mistakes are high-stakes because they silently mis-file, and the user should confirm the rule before creation. It also points to get_workflow as a way to model the correct shape, which is an explicit alternative/helper strategy.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_correspondentDelete correspondentA
Destructive

Permanently delete a correspondent. Documents are not deleted, but they lose this assignment and it cannot be restored. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark this as destructive, but the description adds important behavioral detail beyond that: the deletion is permanent, documents retain their data but lose the correspondent assignment, the assignment cannot be restored, and user confirmation is required. This fully discloses the key side effects and irreversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences with no filler. It front-loads the primary action, then immediately states the most important side effect and the user-confirmation requirement. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with no output schema, the description covers the essentials: permanence, non-deletion of documents, irreversible loss of assignment, and user confirmation. Nothing critical is missing for an agent to understand what invoking this tool will do.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required 'id' parameter with 0% description coverage, and the description does not explicitly explain what this id identifies or how to obtain it. The parameter's role is inferable from the tool name and the sentence 'delete a correspondent,' but the description itself adds no direct parameter-level meaning. Low schema coverage required more compensation than this.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action and resource: 'Permanently delete a correspondent.' It also differentiates from deleting documents by explicitly saying documents are not deleted, only the assignment is lost. This is a specific verb-plus-resource statement with no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when a correspondent should be permanently deleted. It also gives an explicit precondition by instructing to confirm with the user first. It does not name alternative tools such as update_correspondent, but the side-effect warning helps distinguish it from document deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_custom_fieldDelete custom fieldA
Destructive

Delete a custom field definition and every value stored in it, across all documents. This cannot be undone — confirm with the user, and check document_count first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint as true, but the description goes beyond that by specifying the cascading effect across all documents and the irreversible nature of the operation. This is exactly the behavioral context an agent needs before invoking a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The action and scope are front-loaded, followed by a concise safety warning. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with no output schema, the description captures the core behavior, scope, irreversibility, and a precondition ('check document_count first'). It could slightly improve by clarifying where document_count is obtained, but it is otherwise complete enough for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has a single required 'id' integer parameter with no schema description, so coverage is 0%. The description does not explicitly state that 'id' identifies the custom field to delete, but with only one parameter and the action phrase 'a custom field definition,' the parameter's role is reasonably inferable. Still, the description could have compensated more directly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Delete') and a specific resource ('a custom field definition') and adds the critical scope: 'every value stored in it, across all documents.' This clearly distinguishes it from create_custom_field, update_custom_field, and get_custom_field, and matches the tool's name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational context by warning that the action cannot be undone and instructing the agent to confirm with the user and check document_count first. It does not explicitly name an alternative like update_custom_field for non-destructive changes, so it stops short of an exhaustive when-to-use vs when-not-to-use guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_documentDelete documentA
Destructive

Move a document to the trash. It stays recoverable until the trash is emptied or the retention period expires. Always confirm with the user before deleting anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag this as destructive, but the description adds important behavioral context: deletion is reversible via trash, recovery is time-limited, and user confirmation is required. This is exactly the kind of nuance that annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences with no filler. The main action is front-loaded, the recovery behavior follows naturally, and the safety instruction earns its place. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive action, the description covers the operation, recovery semantics, retention caveat, and a usage rule. There is no output schema to explain, and the annotation set carries the destructive flag, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required `id` parameter with 0% description coverage, so the description carries the burden of explaining the parameter. 'Move a document' implies the id refers to the document to trash, but the description never explicitly states that `id` identifies the target document. For a single obvious integer parameter this is acceptable but still indirect.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Move to trash') and resource ('a document'), making it immediately clear this is a soft-delete operation rather than a permanent destructive delete. It also distinguishes itself from trash-related siblings like empty_trash by clarifying recovery behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: the document stays recoverable until the trash is emptied or a retention period expires, and it mandates user confirmation. It does not explicitly compare to alternatives like delete_documents or restore_from_trash, but the soft-delete framing is sufficient guidance for most cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_document_noteDelete a document noteA
Destructive

Remove a note from a document. Not recoverable.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
note_idYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive, and the description adds 'Not recoverable,' which is a useful permanence warning beyond the annotation. This gives an agent important behavioral context about irreversible side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences that front-load the primary action and then add a critical safety warning. No unnecessary words or repetitive content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 cover the essentatial safety and irreversibility aspects. While it omits return value details, it is still sufficiently complete for correct invocation in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no parameter details. The property names id and note_id are somewhat self-explanatory, but the description fails to clarify which id refers to the document vs. note, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Remove a note from a document') and resource, making its purpose immediately clear. It also distinguishes itself from sibling tools like delete_document and create_document_note by focusing on note deletion specifically.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 such as delete_document or list_document_note s. The context implies the intended use, but the description does not explicitly state exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_documentsDelete documentsA
Destructive

Move several documents to the trash at once. Recoverable until the trash is emptied. Requires explicit user confirmation — list what will be deleted before calling this.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentsYesIDs of the documents to act on. Always an explicit list — never an unbounded selection.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, but the description adds crucial context: the action is recoverable until trash is emptied, and it requires user confirmation. It also clarifies the batch scope. This goes beyond the structured 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: action+scope, recoverability, and the confirmation requirement. Every sentence earns its place and critical safety info is front-loaded in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch destructive tool with one well-schematized parameter, the description fully covers what an agent needs: what will happen, recoverability, confirmation requirement, and the explicit-list constraint. No output schema is present, but return-value details aren't critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is well documented in the schema. The description reinforces the explicit-list nature with 'several documents' and aligns with 'always an explicit list'. Slight deduction because it doesn't add additional format details, but the schema already carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Move'), a precise resource ('documents'), and the action's effect ('to the trash at once'). It distinguishes from the sibling 'delete_document' by signaling batch operation ('several documents'), and from 'empty_trash'/'restore_from_trash' by explicitly framing trash as recoverable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs that explicit user confirmation is required and that the tool must not be invoked without first listing what will be deleted. This provides a clear when-to-use and a safety gate, which is especially important given the destructive annotation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_document_typeDelete document typeA
Destructive

Permanently delete a document type. Documents are not deleted, but they lose this assignment and it cannot be restored. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, and the description adds important behavioral nuance beyond that: the deletion is permanent, documents retain existence but lose the assignment, the assignment cannot be restored, and user confirmation is required. This is exactly the kind of consequence disclosure that helps an agent safely invoke a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences carry the essential information: what the operation does, its permanence, its side effect on documents, and the confirmation requirement. There is no filler or redundant restating of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with a single parameter, no output schema, and no nested objects, the description covers the critical operational facts: permanence, irreversibility, side effects on associated documents, and user confirmation. Nothing needed to safely invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain the 'id' parameter or map it explicitly to the document type being deleted. The parameter name and tool context make it inferable, but the description does not compensate for the lack of schema documentation as required by the rubric.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 distinguishes itself from document deletion by stating 'Documents are not deleted, but they lose this assignment,' which is especially helpful given sibling tools like delete_documents and 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool: when a document type should be permanently removed. It adds a strong usage requirement by saying 'Confirm with the user first,' and clarifies that the deletion does not remove documents. It does not explicitly name alternative tools or when not to use it, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_saved_viewDelete saved viewA
Destructive

Remove a saved view. Documents are unaffected.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false. The description adds one useful behavioral detail beyond annotations: deleting a saved view does not affect documents. However, it does not explain what happens if the id does not exist or whether the deletion is reversible, though those are partially covered by 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and then a useful caveat. Every word earns its place, with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter destructive operation, the description covers the key purpose and the most relevant side-effect boundary (documents unaffected). The annotations cover idempotency and destructiveness. Missing details like return values or error behavior would be nice, but they are not critical given the simplicity and the existing annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the only parameter 'id' has no description in the schema. The tool name and description make it reasonably clear that 'id' represents the saved view to remove, but the description does not explicitly state this or add any format/precondition details beyond the schema. The parameter is simple enough that this is adequate but not exemplary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Remove a saved view') on a specific resource, and the added sentence 'Documents are unaffected' disambiguates it from other destructive tools like delete_document. This makes the tool's scope immediately obvious even among many sibling delete operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for deleting saved views but gives no explicit guidance on when to choose it over alternatives such as update_saved_view or get_saved_view, and no prerequisites or ownership conditions are mentioned. The distinction from document deletion is helpful but not a full usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_storage_pathDelete storage pathA
Destructive

Permanently delete a storage path. Documents are not deleted, but they lose this assignment and it cannot be restored. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations already mark this as destructive, the description adds important context: documents are not deleted, the assignment is lost, and it cannot be restored. This goes beyond the annotation and helps the agent anticipate side effects and irreversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences carry the core action, side-effect warning, and a usage instruction. There is no filler, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter destructive tool, the description is largely complete: it explains permanence, non-deletion of documents, and requires user confirmation. The main gap is the lack of parameter clarification, but annotations and schema cover the rest of the operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has a single id parameter with no description, and the tool description does not mention id at all. With 0% schema coverage, the description should compensate by indicating which identifier is needed, but it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Permanently delete') and the resource ('storage path'). It explicitly notes that documents are not deleted, only lose this assignment, which distinguishes it from sibling delete_document and other delete_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The instruction to 'Confirm with the user first' provides some usage guidance, but there is no explicit when-to-use versus alternatives or conditions that would make this tool inappropriate. The usage is mostly implied by the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_tagDelete tagA
Destructive

Permanently delete a tag. Documents are not deleted, but they lose this assignment and it cannot be restored. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses important behavioral consequences: documents lose the tag assignment, the deletion cannot be restored, and user confirmation is required. This goes well beyond the bare destructiveHint and provides exactly the kind of context an agent needs before invoking a 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with no wasted words. The primary purpose is front-loaded, followed by the two most important caveats: documents lose the assignment and the action cannot be undone.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter destructive tool with no output schema, the description covers all essential context: what is deleted, what happens to associated documents, irreversibility, and confirmation requirement. Nothing crucial is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage for its only parameter, and the description does not explain that the required 'id' refers to the tag being deleted. While the parameter name is somewhat self-evident, the description provides no explicit mapping or additional meaning, so it fails to compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Permanently delete a tag') and clearly distinguishes the resource from siblings like update_tag or create_tag. It also clarifies the scope by explaining that documents themselves are not deleted, which differentiates it from delete_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when permanently removing a tag, and it emphasizes irreversibility and the need to confirm with the user first. It does not explicitly name alternative tools or exclusions, but the destructive purpose is unmistakable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_workflowDelete workflowA
Destructive

Delete an automation rule permanently. Consider update_workflow with enabled:false instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive (destructiveHint=true) and non-idempotent, but the description adds the crucial behavioral detail 'permanently,' indicating irreversibility. It also hints at a safer alternative, which is valuable context beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, purposeful sentences with no filler. The primary action is front-loaded and the alternative guidance is concise, making the description easy to parse and act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter delete operation, the description covers the essential points: what it deletes, permanence, and a safer alternative. With no output schema, return behavior isn't specified, but this is a minor omission for a delete action and the description remains functional.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden of explaining the 'id' parameter. It does clarify that 'id' refers to an automation rule/workflow, but it adds no further detail about types, meaning, or requirements beyond what the schema already defines. The compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Delete'), resource ('automation rule'), and a defining qualifier ('permanently'). It clearly distinguishes from siblings like update_workflow by naming the alternative, so there is no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the alternative tool (update_workflow with enabled:false) and advises considering it instead. While it doesn't spell out exact conditions for when each is appropriate, the word 'instead' implies the choice between soft-disabling and permanent deletion, giving useful guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_documentDownload documentA
Read-onlyIdempotent

Save a document's file to disk on the machine running this MCP server and return the path. Files are written to PAPERLESS_DOWNLOAD_DIR (defaults to the system temp directory). The bytes are deliberately not returned inline — a PDF as base64 would consume the entire context.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
versionNo'archive' is the OCR'd PDF/A Paperless generated; 'original' is the file as it was consumed.archive
filenameNoOverride the filename. Relative names are resolved inside the download directory.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds meaningful behavior beyond annotations: files are written to PAPERLESS_DOWNLOAD_DIR (default temp), and the bytes are intentionally not returned to avoid context exhaustion. This is highly relevant for an agent deciding whether to call this tool and what to expect. No contradiction with readOnly/idempotent/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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the action and return value, the disk location, and the reason for not inlining bytes. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description states the return value (path), the side-effect location, and the rationale for not returning content. Together with annotations it covers safety, idempotency, and operational expectations. This is complete for a simple download operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and version and filename already have descriptions in the schema. The description adds little param-specific meaning beyond implying that 'id' identifies the document to save. id's semantics are fairly obvious from the tool name, but the description does not explicitly connect it to the document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action — 'Save a document's file to disk' — and identifies the resource and output shape ('return the path'). It clearly distinguishes itself from content-returning siblings by noting the bytes are deliberately not returned inline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the intended use clear: use this when you need the document saved to disk on the MCP server machine and want the path back. It explains why it avoids returning base64 inline, but does not explicitly name sibling alternatives such as get_document_content or bulk_download_documents. This is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_pdfEdit a PDFA
Destructive

Reorder, rotate, remove or split out pages of a single document, producing a new document. operations is a list of page instructions; each entry names a source page and what to do with it. Consult the Paperless API docs for the exact operation shape before using this.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentsYesExactly one document ID.
operationsYes
delete_originalNoIrreversible — confirm first.
update_documentNoReplace the existing document instead of creating a new one.
include_metadataNoCarry metadata over to the result.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds useful context by clarifying that it generates a new document and that the operations shape is non-trivial, but it does not explain side effects of delete_original or what happens on partial failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it opens with the action verbs, explains the core parameter, and closes with a necessary caution to consult the API docs for the exact operation shape. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives enough high-level context for selecting the tool and understanding its purpose, and the schema documents most parameters. However, with no output schema and a complex `operations` parameter, the definition delegates critical invocation details to external docs and does not describe the return value or error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so most parameters are already documented. The description adds meaningful semantics for the under-documented `operations` parameter, calling it 'a list of page instructions' where 'each entry names a source page and what to do with it,' which materially improves the agent's understanding beyond the generic schema object.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific set of actions ('Reorder, rotate, remove or split out pages') on a specific resource ('a single document') and clarifies the output ('producing a new document'). This clearly distinguishes it from siblings like rotate_documents or merge_documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes the scope ('single document') and that this produces a new document, which implies when it might not be appropriate, but it never names alternatives or gives explicit when-to-use/not-to-use guidance. The instruction to consult the Paperless API docs is a usage caution, not a comparison to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

email_documentsEmail documentsA

Send one or more documents by email from the Paperless instance. This sends real mail to real people — only call it after the user has confirmed the recipients, subject and body.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes
subjectYes
addressesYesComma-separated recipient addresses.
documentsYes
use_archive_versionNoAttach the archived PDF/A rather than the original.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as open-world, non-read-only, and non-idempotent. The description adds meaningful behavioral context by stating 'This sends real mail to real people,' which emphasizes the real-world side effect and justifies the confirmation requirement. This goes beyond the annotation flags and is valuable for an agent deciding whether to call the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The core action is front-loaded in the first sentence, and the critical safety warning is placed immediately in the second. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a side-effecting email tool, the description covers the essential purpose, the real-world impact, and the key user-confirmation precondition. The absence of an output schema is acceptable because the tool's observable effect is the email itself. A minor gap is that the confirmation precondition lists recipients, subject, and body but omits explicit mention of confirming the documents to be sent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, with `documents`, `subject`, and `message` lacking descriptions, but the tool description partially compensates by referencing 'one or more documents' and 'recipients, subject and body.' These phrases map to the main parameters and clarify their roles. However, `use_archive_version` is not explained anywhere, and no additional format or constraint details are added for the undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Send one or more documents by email from the Paperless instance.' This clearly identifies both the action and the object. It also distinguishes the tool from sibling document operations by emphasizing actual email delivery, and there is no other email-sending sibling that could be confused with it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear precondition: 'only call it after the user has confirmed the recipients, subject and body.' This tells the agent when it is appropriate to invoke the tool and explicitly warns against calling without user confirmation. It does not mention alternatives such as share links or bulk downloads, so it stops short of a full when/alternatives comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

empty_trashEmpty the trashA
Destructive

Permanently destroy trashed documents. There is no recovery after this — the files are gone. Never call this without the user explicitly asking for it in the current conversation, and list what is in the trash first.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentsNoSpecific document IDs to purge. Omit to purge the entire trash.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, but the description adds meaningful behavioral context: there is no recovery, files are gone, and explicit consent is required. This goes beyond the annotation by warning about irreversibility and the need for prior listing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with each sentence earning its place: what it does, why it is dangerous, and when it may be called. The warning is front-loaded and no words are wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity destructive action with one optional parameter and no output schema, the description is complete enough. It covers irreversibility, consent requirements, and the need to inspect trash first. The optional documents parameter semantics are already fully covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the schema already documents the documents parameter completely. The tool description does not need to restate the parameter semantics. The baseline of 3 applies because the description adds no further param meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Permanently destroy trashed documents.' It clearly distinguishes this from other document operations like delete, restore, or list. The title and description align without being tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage conditions: never call without the user explicitly asking in the current conversation, and list what is in the trash first. This is strong guidance for a destructive irreversible action and helps an agent decide whether to proceed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_active_tasksCurrently running tasksA
Read-onlyIdempotent

Tasks executing right now. Tells you whether the instance is busy.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds that tasks are those 'executing right now', a useful temporal scoping. However, it leaves the return representation ambiguous (a list of tasks vs. a boolean busy flag), which is a behavioral detail an agent would need.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no redundancy: the first states what is returned, the second states its operational meaning. Every word earns its place and the key scoping ('executing right now') is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 annotations covering safety, the description is mostly sufficient. The meaningful gap is the output shape: are running tasks returned as a list, or is the result a boolean busy indicator? The name and first sentence suggest a list, but 'tells you whether' suggests boolean, leaving an agent to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 trivially 100%. There is nothing for the description to add about parameters, so the zero-parameter baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description conveys that the tool retrieves tasks currently executing and augments that with a practical purpose ('tells you whether the instance is busy'). It is specific about the resource and state, though it does not explicitly name sibling tools to differentiate from list_tasks or get_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Tells you whether the instance is busy' gives a clear use case: checking if the system is occupied before proceeding. It does not mention alternatives or exclusions, but the context is direct enough for an agent to select it for busy-state checks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_correspondentGet correspondentA
Read-onlyIdempotent

Fetch a single correspondent by ID, with all fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose that the tool is read-only, idempotent, and non-destructive, so the description does not need to cover safety. The description adds that the response includes all fields of the correspondent, which is useful, but it does not mention what happens if the ID does not exist or how errors are surfaced. For a simple getter with a strong annotation profile, this is acceptable but not 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one clear sentence with no redundancies or filler. 'Fetch a single correspondent by ID' is front-loaded, and 'with all fields' adds meaningful return-value information. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one parameter, no output schema, and no nested objects, the description is mostly complete: it identifies the resource, the lookup key, and the return scope ('all fields'). The only notable omission is behavior for a non-existent ID, such as a 404 vs a null result. Given the low complexity, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has a single required `id` integer with bounds but no property description, and schema description coverage is 0%. The description's 'by ID' matches the parameter name and clarifies that the integer is the correspondent identifier, but it adds no further semantics such as where the ID comes from or what formats are valid. This is the minimum compensation for the missing schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says 'Fetch a single correspondent by ID, with all fields,' which names a specific verb, a specific resource, and a precise selection criterion. This clearly distinguishes it from list_correspondents, which would return multiple correspondents, and from create/update/delete mutations of correspondents. An agent can confidently tell what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case: when you already have a single correspondent ID and need the full corresponding record. However, it does not explicitly say to prefer this over list_correspondents when only one ID is needed, nor does it describe how to obtain the ID. The guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_custom_fieldGet custom fieldB
Read-onlyIdempotent

One custom field definition including its select options, if any.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral value by specifying that the response includes the definition and any select options, clarifying the return content beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler or redundant phrasing. It front-loads the key information and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 rich read-only annotations, the description is adequate. It conveys the return type and a key inclusion (select options), though without an output schema it could elaborate on other fields of the custom field definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description does not mention the required 'id' parameter or explain what it identifies. Although the parameter name is self-explanatory, the description fails to compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a single custom field definition as the resource and notes the inclusion of select options, distinguishing it from list_custom_fields. However, it lacks an explicit action verb (e.g., 'Retrieves'), relying on the tool name to convey the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 alternative guidance. While 'One custom field definition' hints at singular retrieval versus list_custom_fields, it does not state when to choose this tool over siblings or mention prerequisites such as requiring the custom field's id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_documentGet documentA
Read-onlyIdempotent

Fetch one document's metadata by ID: title, correspondent, type, tags, dates, custom fields, notes and available versions. Does not include the OCR text unless include_content is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
include_contentNoInclude the full OCR text. Can be very large — prefer get_document_content.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a safe, read-only, idempotent operation. The description adds value by specifying the exact metadata payload and the conditional behavior that OCR content is excluded unless include_content is set, which is meaningful context beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The core purpose and return fields are front-loaded, and the critical content-exclusion caveat is stated immediately after, making the description economical and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-document fetch with no output schema, the description names the expected output fields and the only important conditional behavior. More detail about the shape of versions or notes would be useful but is not essential for correctly invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only 50% of the parameters are described in the schema (id lacks a description), but the description compensates by making 'by ID' explicit and by explaining that include_content controls whether OCR text is returned. The behavior of both parameters is inferable even with the incomplete schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Fetch one document's metadata by ID' and enumerates the returned fields (title, correspondent, type, tags, dates, custom fields, notes, versions). This clearly identifies the tool's scope and distinguishes it from content-focused siblings like get_document_content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this to retrieve metadata for one document, with OCR text only when explicitly requested. It doesn't fully articulate when not to use it or name alternatives directly, but the exclusion of OCR content and the pointer in the include_content parameter make the primary use case clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_document_ai_suggestionsGet AI filing suggestionsA
Read-onlyIdempotent

Suggestions from the instance's configured LLM backend (Paperless-ngx 3.x, only if AI features are enabled server-side). Returns 404 or an error when AI is disabled — that is expected, not a bug.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context beyond that: the tool is tied to a specific version (Paperless-ngx 3.x), depends on server-side AI features, and will return 404/error when disabled. This failure-mode disclosure is valuable and not present in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. The primary behavior is stated first, followed by a critical caveat about expected failure modes. All information is relevant and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one simple parameter, no output schema, and strong annotations covering safety, the description is nearly complete. It covers the feature dependency, version, and expected error behavior. The only gap is that it does not describe the shape of a successful response, but this is minor for such a simple read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the single parameter 'id' is a standard integer with exclusiveMinimum. The description does not explicitly say id refers to a document ID, though the tool name makes it inferable. The description adds no parameter-level semantics, but the meaning is clear enough given the context, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title 'Get AI filing suggestions' and description 'Suggestions from the instance's configured LLM backend' clearly state the core function and resource. It differentiates from the sibling get_document_suggestions by the 'AI' and 'LLM backend' qualifiers, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States a clear precondition: 'only if AI features are enabled server-side.' It also gives explicit guidance on the expected 404/error result when AI is disabled, telling the agent this is normal. It does not explicitly mention the sibling get_document_suggestions or say 'use this instead when...', but the conditional context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_document_contentGet document textA
Read-onlyIdempotent

Return the OCR/extracted text of one document. Deliberately a separate tool: this is the most expensive thing you can pull from Paperless, so fetch it only for documents you have already narrowed down. Supports offset/limit for long documents.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
limitNoMaximum characters to return.
offsetNoCharacter offset to start from.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds a meaningful behavioral trait: the high cost/latency of this operation and the need to limit its use. It also discloses the content type (OCR/extracted text) and offline/lim support, which goes beyond the sterile schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first defines the return, the second explains why this tool is separate and when to use it, the third notes pagination. No filler. The most important scoping constraint is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool and the strong annotation safety profile, the description is nearly complete. It covers what is returned, the cost warning, and offset/limitt. The absence of an output schema is mitigated by 'OCR/extracted text' clearly indicating a text string. A slight gap is guidance on handling truncated output or iterative fetching, but this is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes limit and offset with default/min/max values. The id parameter is self-evident given 'one document' and is not described in the schema, but the description doesn't need to elaborate. The description's mention of offset/limitt aligns with the schema without adding new semantics. With 67% schema coverage and obvious id, this hits the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Return the OCR/extracted text of one document.' It also says it is deliberately a separate tool and the most expensive thing to pull, clearly distinguishing it from siblings like get_document, get_document_thumbnail, and download_document. An agent can immediately understand what this tool does and how it differs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit usage rule: fetch this only for documents you have already narrowed down, because it is the most expensive operation. This is a clear when-to-use directive. It also implies when not to use by framing it as a last-step retrieval, though it doesn't name specific alternatvives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_document_historyGet document historyA
Read-onlyIdempotent

Audit trail of changes to a document — who changed which field, and when. Requires audit logging to be enabled on the instance. Returns the most recent entries first; raise limit to see further back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
limitNoMaximum number of history entries to return, newest first.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that the operation is read-only, idempotent, and non-destructive. The description adds genuine behavioral context beyond that: it requires audit logging to be enabled, returns newest entries first, and implies pagination via the limit parameter. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. It front-loads the core purpose, then states the prerequisite and ordering/limit behavior, all in a compact and readable way.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with two well-understood parameters and no output schema, the description covers purpose, prerquisitie, result ordering, and limit usage. It is essentially complete for calling the tool correctly, though it omits explicit details about the exact response shape or behavior when audit logging is disabled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% because the id parameter has no description. The description compensates partially by explaining that limit controls how far back the audit trail is viewed, but it adds little about id beyond the term 'document' in the purpose statement. The limit schema already documents the default and max, so the added semantic value is modest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as an audit trail of document changes, specifying who changed which field and when. This meaningfully distinguishes it from sibling tools like get_document or get_document_metadata, though it does not name alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the intended use case through 'audit trail of changes' and gives a prerequisite: audit logging must be enabled. However, it does not contrast with nearby tools such as get_document_metadata or get_document_content, so an agent gets only indirect guidance for selecting this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_document_metadataGet document file metadataA
Read-onlyIdempotent

Technical file metadata for a document: checksums, byte sizes, MIME type, stored filename, whether an archived PDF/A version exists, and embedded PDF metadata. Not the Paperless tags/correspondent — use get_document for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value beyond annotations by disclosing the scope of the metadata retrieved and clarifying what is excluded, which helps set expectations about the result. It does not describe error conditions or edge cases, but for a read-only metadata getter the added context is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence front-loads the concrete metadata fields, and the second immediately provides the exclusion and alternative. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 rich annotations and no output schema, the description sufficiently covers what the tool returns and how it differs from get_document. It lacks explicit return-structure details or parameter clarification, but the enumerated metadata fields largely compensate for the missing output schema. A slightly more complete description would connect 'id' to the document identifier.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description carries the full burden of explaining the 'id' parameter. It never explicitly states that 'id' is the Paperless document ID or how it relates to the document resource. While the tool name and title make this inferable, the description itself adds no direct parameter meaning beyond what the generic 'id' integer property already implies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair ('Technical file metadata for a document') and enumerates exactly what it returns: checksums, byte sizes, MIME type, stored filename, archived PDF/A presence, and embedded PDF metadata. It actively differentiates itself from get_document by explicitly excluding tags/correspondent, so an agent can disambiguate without inspecting either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names the sibling alternative explicitly: 'Not the Paperless tags/correspondent — use get_document for those.' This states both when not to use the tool and which tool to use instead, giving clear routing guidance with no reliance on inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_document_suggestionsGet filing suggestionsA
Read-onlyIdempotent

Paperless' own suggestions for a document — correspondents, tags, document types and dates its classifier considers likely. Useful as a starting point when triaging, but the suggestions are only as good as the trained model; verify before applying.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive. Description adds useful behavior beyond them: the result is model-dependent and not authoritative, so it must be verified. This is honest about output variability and aligns with 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences deliver the content, purpose, and an important caveat with no filler. The substantive detail comes first and the verification warning follows naturally.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity read-only tool with one param and strong annotations, the description is largely complete: it names the output categories and reliability caveat. It does not describe the exact response structure, but no output schema exists and the listed suggestion types give enough orientation for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one id parameter with zero schema description coverage. Description references 'a document' but never explicitly states that id is the document identifier or how invalid ids behave. The id is simple and self-evident, but the description does not truly compensate for the missing schema property text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb-resource relationship: it returns Paperless' classifier suggestions for a document, enumerating the fields (correspondents, tags, document types, dates). It is clear, but does not explicitly name the nearby sibling get_document_ai_suggestions, relying on the phrase 'Paperless' own' to imply the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states clear use context: useful as a starting point when triaging. It also tells agent to verify before applying because suggestions depend on model quality. It does not name alternative tools/exclusion conditions, so it misses the full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_document_thumbnailGet document thumbnailA
Read-onlyIdempotent

Return the document's thumbnail image inline so it can actually be looked at. Useful for confirming what a document is without reading its whole OCR text.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, non-destructive profile. The description adds behavioral context beyond the annotations by specifying that the return is an inline thumbnail image meant to be viewed, which helps the agent anticipate the response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. The primary action is front-loaded, and the use-case rationale is expressed in one clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one parameter and no output schema, the description covers the main purpose, the return nature, and the practical use case. It does not detail image format or size, but this is not critical given the simple signature and read-only annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for its single 'id' parameter. The description implies that 'id' refers to the document whose thumbnail is returned, but it does not explicitly document the parameter's meaning or any special formatting. For a single obvious integer id, this is adequate but not exemplary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Return the document's thumbnail image inline') and the resource (the document's thumbnail). It conveys the practical purpose of visually confirming a document, which differentiates it from content-retrieval tools, though it does not explicitly name sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: use it when you want to see what a document is without reading its OCR text. It does not explicitly list alternatives or exclusions, but the implied when-to-use is strong enough for an agent to select it appropriately 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_typeGet document typeA
Read-onlyIdempotent

Fetch a single document type by ID, with all fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds 'with all fields,' indicating the response includes the complete object, but does not disclose behavior for missing/invalid IDs or other edge cases. This is acceptable given the strong annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence that starts with the core action and resource, then adds the scope and return expectation. Every word earns its place, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-ID read operation, the description covers what the tool does, what it returns ('all fields'), and which input identifies the target. Annotations cover safety and idempotency, and no output schema is present, so the description's return note is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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. It mentions 'by ID' but does not explain the id parameter's meaning beyond what the schema already states. Since there is only one obviously named parameter, the gap is minor, but the description still adds little semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Fetch'), the resource ('a single document type'), and the scope ('by ID, with all fields'). This distinguishes it from list_document_types and other singular getters like get_tag or get_storage_path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this when you have a specific document type ID and need its full record. It does not explicitly contrast with list_document_types or mention when not to use it, but the singular 'by ID' provides adequate implied guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_metadata_overviewMetadata overviewA
Read-onlyIdempotent

One compact snapshot of all tags, correspondents, document types and storage paths with their IDs and document counts. Cheaper than four separate list calls and the right first step before filing or triaging documents.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context about being 'one compact snapshot' and cheaper than four calls, but does not disclose additional details such as response size limits or consistency guarantees. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence defines the resource and its contents, and the second sentence provides the use context and cost benefit, making it highly efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only tool with no output schema, the description is complete enough. It tells the agent what data will be returned, when to use it, and why it is preferable to multiple sibling calls, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the empty schema places no burden on the description. The description still adds meaning by enumerating what the returned snapshot covers: tags, correspondents, document types, and storage paths with their IDs and counts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as a compact metadata overview aggregating tags, correspondents, document types, and storage paths, including IDs and document counts. It also differentiates this tool from the many sibling list tools by emphasizing it is one combined snapshot rather than four separate calls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says this is the 'right first step before filing or triaging documents' and points out it is 'cheaper than four separate list calls,' making the intended context clear. It does not explicitly state when not to use it, but the comparison to separate list calls strongly implies the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_next_asnGet next archive serial numberA
Read-onlyIdempotent

The next free archive serial number, for filing a physical document alongside its scan.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already cover the safety profile: readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds the 'next free' semantics and the filing use case, but it does not clarify whether the returned number is reserved or how it should be applied to a document afterward. This is useful context but not rich behavioral disclosure beyond what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-constructed sentence with no wasted words. The core result is front-loaded, and the intended context is appended compactly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only, idempotent helper, the description plus annotations are almost sufficient. The only thing left implicit is the exact output format—likely an integer serial number—but with no output schema and a simple return value, the omission is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the baseline is 4. The description adds meaning to the empty schema by explaining that the tool returns the next free archive serial number rather than a generic or arbitrary value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title supplies the verb 'Get' and the description names the specific resource: the next free archive serial number. The appended purpose—'for filing a physical document alongside its scan'—distinguishes this tool from all document-management siblings, none of which claim this responsibility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the intended use case: obtaining a serial number when filing a physical document with its scan. It does not discuss alternatives, but no sibling tool serves this purpose, so the lack of exclusions is not a significant gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_remote_versionCheck for Paperless updatesA
Read-onlyIdempotent

The latest Paperless-ngx release, and whether an update is available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this as read-only, idempotent, open-world, and non-destructive. The description adds that the tool reports the latest release and update availability, but it does not disclose whether this involves a network call, how failures are handled, or the exact shape of the response. With strong annotation coverage, this is acceptable 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and free of filler, but it is a sentence fragment rather than a complete, front-loaded statement of action. It conveys the key information efficiently, though a verb would improve its structural quality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 strong annotations, the description covers the essential outcome: the latest release and whether an update is available. There is no output schema, so a bit more detail about the return format would be helpful, but an agent can still select and invoke this tool correctly with the information provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema already covers everything needed for invocation. The description adds semantic context about what the result represents, which is useful, but parameter-related information is inherently complete due to the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title 'Check for Paperless updates' supplies the missing verb, and the description names the resource: the latest Paperless-ngx release plus update availability. This is distinct enough from siblings like get_server_status or get_statistics, though the description itself is a noun phrase rather than an explicit action statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The title implies the use case: checking for Paperless updates. However, the description gives no explicit when-to-use guidance, no mention of alternatives, and no context about how this relates to other status/statistics tools. 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_saved_viewGet saved viewA
Read-onlyIdempotent

One saved view including its filter rules, so you can reproduce it as a search.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds useful context beyond those annotations by revealing the return payload: the saved view includes its filter rules, which is the key behavioral detail for callers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-ordered sentence delivers the resource, its key content, and the reason it matters without any filler. Every part of the description earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only getter with strong annotations, the description covers what is returned and why it is useful. It omits edge cases like not-found behavior, but that is minor for a safe, idempotent lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the required id parameter at all. The agent must infer from the schema and tool name that id selects which saved view to retrieve.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly identifies the resource as a single saved view and explains the value-add: it includes filter rules so the view can be reproduced as a search. This also differentiates it from list_saved_views, which returns a collection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'one saved view' and the purpose clause 'so you can reproduce it as a search' give a clear context for when to call this tool. It does not explicitly name alternatives or exclusions, but the intended use is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_selection_dataSummarise a document selectionA
Read-onlyIdempotent

For a set of document IDs, return how many of them carry each tag, correspondent, document type and storage path. Answers 'what is in this pile?' in one call instead of fetching every document.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentsYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior, so the safety profile is covered. The description adds useful semantics about aggregated counting and the one-call efficiency, but does not discuss edge behavior such as missing IDs, duplicate IDs, or how the open-world hint affects result completeness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences fully convey the operation and use case with no redundant wording. The core behavior is front-loaded and the explanatory analogy is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, the description adequately conveys what the result represents: counts of documents per tag, correspondent, type, and storage path. Given the single-parameter surface and rich annotations, this is nearly complete, though exact response structure is left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only the type and constraints for the single `documents` parameter, with no description. The tool description adds that these are document IDs and that they form a selection, which is meaningful but minimal; it does not explain duplicate handling, limits, or invalid-ID behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: given a set of document IDs, return counts per tag, correspondent, document type, and storage path. The use-case phrasing "what is in this pile?" makes the tool's role immediately clear and distinguishes it from individual document-fetching tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates when to use this tool: when aggregate summaries of a document selection are needed, and contrasts it with fetching every document. It does not name sibling alternatives explicitly, nor note when to avoid it, so it falls just short of full explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_server_statusServer statusA
Read-onlyIdempotent

Instance health: Paperless version, database and index status, whether Redis and the task workers are reachable, and whether the search index is up to date.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that the tool is read-only, idempotent, open-world, and non-destructive. The description adds value by revealing exactly which subsystems are examined and that the search index freshness is part of the health signal, giving the agent a clearer behavioral picture without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the key concept ('Instance health') and then lists the covered components efficiently. Every word adds useful information; there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only health check, the description is complete: it states the resource, enumerates the checked subsystems, and the annotations cover safety and side-effect expectations. No output schema exists, but the description sufficiently characterizes the status information the tool provides.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema has 100% coverage, so there is nothing meaningful for the description to add about parameter usage. The baseline of 4 applies because no parameter ambiguity exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's purpose: assessing instance health and enumerates the specific components covered (Paperless version, database, index, Redis, task workers, search index freshness). This distinguishes it from siblings like get_statistics, get_remote_version, and get_active_tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance about when to use this tool versus alternatives, such as get_statistics for usage metrics or get_active_tasks for operation status. The intended use as a health check is implied by the description, but no exclusions or sibling routing are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_statisticsArchive statisticsA
Read-onlyIdempotent

Totals for the archive: document count, inbox count, characters, file type breakdown. A cheap orientation call at the start of a session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior, so the bar is lower. The description adds useful transparency about cost and purpose: it is 'cheap' and suited for orientation, which is meaningful beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences deliver the resource, the exact data returned, and the use case with no filler. The core statement is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only statistics tool, the description is complete: it names the output fields and the intended call context. Annotations cover the safety profile, and siblings are unlikely to be confused with it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the description to clarify. Schema description coverage is 100%, and the baseline for a zero-parameter tool is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Totals for the archive') and enumerates exactly what is returned: document count, inbox count, characters, and file type breakdown. This makes the tool clearly distinct from siblings like get_server_status or get_metadata_overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'A cheap orientation call at the start of a session' explicitly tells an agent when to use it. It does not name alternatives or exclusions, but the context is clear enough to make a correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_storage_pathGet storage pathA
Read-onlyIdempotent

Fetch a single storage path by ID, with all fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safe, non-mutating nature is covered. The description adds modest context by saying the response contains 'all fields,' but it does not disclose not-found behavior, error semantics, or authentication requirements. This is acceptable given the simple single-fetch nature but not richly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It efficiently conveys the action, resource, selection method, and return scope, earning every word it uses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, one required parameter, rich safety annotations, and no output schema, the description is largely complete for correct invocation. It could optionally mention not-found behavior or explicitly name list_storage_paths as the alternative, but nothing critical is missing for an agent to select and call this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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. The phrase 'by ID' does clarify that the sole parameter identifies which storage path to fetch, which is meaningful. However, for a single integer 'id' parameter, this is only minimal compensation; the description does not explain expected format, source of the ID, or edge cases.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch'), identifies the resource ('storage path'), and clearly specifies cardinality ('a single') and selector ('by ID'). This distinguishes it from sibling tools like list_storage_paths, which would retrieve multiple storage paths. 'With all fields' also clarifies the expected response scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the tool should be used when the caller has a specific storage path ID and wants that single object. It does not explicitly mention alternatives such as list_storage_paths for listing, so it lacks an explicit exclusion, but the 'single... by ID' phrasing provides adequate contextual guidance for routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tagGet tagA
Read-onlyIdempotent

Fetch a single tag by ID, with all fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and a non-destructive profile, so this is clearly a safe read operation. The description adds the useful behavioral note that the full tag object is returned ('with all fields'), but it does not describe error cases or response shape. This is adequate but not rich 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.

Conciseness5/5

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 meaning: fetch, single tag, ID, all fields. It is appropriately minimal for a simple get-by-id operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-resource lookup with strong annotations, the description is complete enough: it states the operation, the input, and that all fields are returned. It does not enumerate the tag fields, but the domain context and sibling tools provide adequate grounding, and no complex behavior needs explaining.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, 'id', is self-descriptive and its type and constraints are fully specified in the input schema. The description confirms its role via 'by ID' but adds no additional semantic detail. With one trivial parameter this meets the minimum viable standard, though schema description coverage is technically 0%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch'), a specific resource ('a single tag'), and the access mechanism ('by ID'), which clearly distinguishes it from sibling tools like list_tags, update_tag, and delete_tag. The added 'with all fields' further clarifies the expected return scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'a single tag by ID' gives a clear context: use this when you have a known tag ID and need that tag's data, not when listing or searching tags. It does not explicitly name alternatives or exclusions, but the usage context is clear enough for this simple operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_taskGet a background taskA
Read-onlyIdempotent

One background task by database ID, including its result. Use this to find out whether an upload or merge actually succeeded.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey read-only, idempotent, and non-destructive behavior. The description adds meaningful context by stating that the response includes the task result and can be used to verify success, which goes beyond the schema and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the core behavior and then add a practical purpose. Every word earns its place, with no redundant restatement of the tool name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only getter with rich annotations, the description covers the identifying information, the result payload, and a practical use case. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no parameter descriptions, so the description carries the burden. Saying the tool fetches a task 'by database ID' clarifies that the sole required parameter is the task's database ID, not just any integer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation: fetching one background task by database ID, including its result. This clearly distinguishes it from list_tasks and get_active_tasks, which retrieve collections of tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly identifies a concrete use case: checking whether an upload or merge actually succeeded. It does not explicitly name alternatives or say when not to use it, but the 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_workflowGet workflowA
Read-onlyIdempotent

One workflow with its full trigger and action definitions.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a safe, read-only, idempotent operation. The description adds that the response contains complete trigger and action definitions, giving the agent useful expectations about payload richness. Error or authentication behavior is not mentioned, but the annotation coverage removes much of the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence with no filler. The core scope and return content are front-loaded, and every word adds meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with one id parameter, comprehensive annotations, and no output schema, the description supplies the key expectation: the returned workflow includes full trigger and action definitions. Nothing significant is missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, and the description does not explicitly document the id parameter. The single required id is trivially inferable from the tool name and property name, and its constraints are clear, so this is a minor gap rather than a critical one.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what is returned: one workflow, and it adds that the response includes full trigger and action definitions. This distinguishes it from list_workflows, which returns multiple workflows, and from the separate trigger/action list tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The singular phrasing implies fetch-by-id, so an agent can infer this is the right tool when a single workflow is needed. However, there is no explicit guidance about when to use this over list_workflows or the standalone trigger/action endpoints, leaving the routing mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_correspondentsList correspondentsA
Read-onlyIdempotent

List correspondents. A correspondent is the sender or counterparty a document came from. Returns id, name and document_count for each. Call this before creating anything — reusing an existing correspondent is almost always correct.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn every field instead of the id/name/document_count summary.
pageNo1-based page number.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, open-world, and non-destructive aspects, so the description doesn't need to repeat those. It adds useful behavioral context by defining the domain concept and stating the exact return shape (id, name, document_count). This goes beyond the schema and 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences each carry distinct value: the action, the domain clarification plus return fields, and the usage guidance. The most important information is front-loaded ('List correspondents'), 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list endpoint with no required parameters and a fully documented schema, the description is largely complete: it states the purpose, the meaning of a correspondent, the return fields, and when to call it. It doesn't explicitly mention pagination behavior in prose, but the schema already documents page/page_size, and the annotations cover safety, so the remaining gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all five parameters, including filters, pagination, ordering, and the full flag. The description adds no parameter-specific meaning beyond that, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource pair ('List correspondents') and clarifies exactly what a correspondent is ('the sender or counterparty a document came from'). It also specifies the return fields (id, name, document_count), which makes the tool's purpose and scope unambiguous and distinguishes it from sibling tools like get_correspondent or create_correspondent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit situational guidance: 'Call this before creating anything — reusing an existing correspondent is almost always correct.' This tells an agent when to use the tool and effectively steers it away from create_correspondent unless necessary, which is exactly the kind of alternative-routing 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.

list_custom_fieldsList custom fieldsA
Read-onlyIdempotent

Custom fields defined on this instance, with their IDs, data types and how many documents use them. You need the IDs before you can read or write custom field values on a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn every field instead of the identifying summary.
pageNo1-based page number.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds that the response includes IDs, data types, and usage counts, and that IDs are a prerequisite for document field operations. It does not disclose pagination or ordering behavior, but that is minor given 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence states the output and result, the second gives the practical purpose. Information is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers what the tool returns and why it should be used (to obtain IDs before document field operations). Pagination and filtering are left to the fully documented schema, and while there is no output schema, the description adequately summarizes return content.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 adds no parameter-specific meaning beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States it lists custom fields defined on the instance, with IDs, data types, and usage counts. This clearly differentiates it from singular get_custom_field and management tools like create/update/delete_custom_field.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent that IDs are required before reading or writing custom field values on a document, which is a clear use case. It does not explicitly name alternatives such as get_custom_field for a single field, so it falls short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_document_notesList document notesA
Read-onlyIdempotent

Notes attached to a document, with authors and timestamps. Notes hold context the OCR text does not contain — worth reading before drawing conclusions about a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds that notes include authors and timestamps and that they may contain non-OCR context, which is useful, but it does not disclose pagination, ordering, empty-result behavior, or what the returned structure looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler: the first states the resource and key output fields, and the second provides genuinely useful context about when the notes matter. The most actionable information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter, read-only list tool with no output schema, the description covers the core need: what the tool returns (notes with authors/timestamps) and why it is valuable. It does not describe the exact JSON array shape, but the annotations and low complexity make this a moderate rather than critical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description should clarify the parameter, and it only loosely implies that the single 'id' refers to a document. The phrase 'attached to a document' plus the tool name makes the parameter inferable, but the description does not explicitly say 'the id of the document whose notes should be listed.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource as 'notes attached to a document' and indicates the content includes authors and timestamps, so an agent can tell this is a read operation on document notes. However, it relies on the tool name/title for the actual verb 'list' and does not explicitly contrast itself with sibling read tools like get_document_content or search_documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: 'worth reading before drawing conclusions about a document' because notes contain information the OCR text lacks. It does not name specific alternatives or state when not to use the tool, but it does convey a concrete scenario where this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_document_typesList document typesA
Read-onlyIdempotent

List document types. A document type says what kind of document it is (invoice, contract, payslip). Returns id, name and document_count for each. Call this before creating anything — reusing an existing document type is almost always correct.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn every field instead of the id/name/document_count summary.
pageNo1-based page number.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the read-only, idempotent, non-destructive profile, lowering the bar. The description adds useful behavioral context by defining the return shape (id, name, document_count) and clarifying the domain concept, giving the agent an accurate expectation of what the tool produces beyond what the annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no wasted words: purpose, domain definition with examples, and actionable usage guidance. The key behavioral and procedural 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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list endpoint with zero required parameters and a well-detailed schema, the description covers purpose, output shape, and when to call it. The schema handles pagination, ordering, and filtering details, while annotations cover safety, leaving nothing essential missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All five parameters are fully described in the input schema (100% coverage), including the 'full' parameter which mirrors the summary fields mentioned in the description. The description adds no parameter-level information 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the operation directly with a specific verb and resource ('List document types'), defines what a document type is with concrete examples, and specifies the output fields. It is unambiguous and easily distinguished from sibling tools like get_document_type, create_document_type, update_document_type, and delete_document_type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'Call this before creating anything' and a decision rule that 'reusing an existing document type is almost always correct.' This effectively steers the agent away from create_document_type, though it does not name the alternative tool explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_saved_viewsList saved viewsA
Read-onlyIdempotent

Saved views are the filter presets the user built in the Paperless web UI. Reading them is the fastest way to learn how this person actually organises their archive — check here before inventing your own filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn every field instead of the identifying summary.
pageNo1-based page number.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already state readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is fully covered. The description adds useful domain context about where saved views come from, but does not disclose any additional behavioral traits such as pagination 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both purposeful: the first defines the resource, the second explains why and when to use it. There is no filler or redundant repetition of the tool name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, parameter-light listing tool, the description plus rich annotations and 100% schema coverage gives an agent enough to call it correctly. The only minor gap is no explicit statement of what the response contains, but the tool name and title already indicate a list of saved views.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented. The description adds the general notion that saved views have filters and names, which lightly reinforces name__icontains, but it does not meaningfully extend the schema's parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies saved views as user-built filter presets and describes the tool as a way to read them, which conveys the listing action even though it doesn't literally say 'list.' It distinguishes this from inventing new filters, but does not explicitly contrast it with the sibling get_saved_view tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete guidance: check saved views before inventing your own filters, positioning this as the default way to discover the user's organizational patterns. It does not mention specific sibling alternatives like get_saved_view, but the 'before inventing your own filters' condition is a clear usage cue.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_storage_pathsList storage pathsA
Read-onlyIdempotent

List storage paths. A storage path is a filename template controlling where Paperless stores the file on disk. Returns id, name and document_count for each. Call this before creating anything — reusing an existing storage path is almost always correct.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn every field instead of the id/name/document_count summary.
pageNo1-based page number.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the bar is lower. The description adds useful context: storage paths are filename templates controlling on-disk location, the default return shape is a summary, and reuse is the recommended behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences carry the action, the domain definition, and the usage recommendation. The opening 'List storage paths' is slightly redundant with the title, but there is no filler or bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with rich annotations and a fully described schema, the description supplies the missing context: what a storage path is, what the default response contains, and when to call this tool. It would be slightly stronger if it named the specific sibling for creating a path, but the guidance implies it clearly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter has its own description, so the baseline is 3. The tool description adds no parameter-level meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List storage paths'), defines what a storage path is, and names the default return fields (id, name, document_count). This clearly distinguishes it from siblings such as get_storage_path or create_storage_path by its collection-level read action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs 'Call this before creating anything' and notes that reusing an existing path is 'almost always correct', which implies the alternative (creating a new storage path) should be avoided unless necessary. It does not enumerate sibling tools or other exclusions, so it stops short of full 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_tagsList tagsA
Read-onlyIdempotent

List tags. Tags are the primary way documents are categorised, and can be nested via parent. Returns id, name and document_count for each. Call this before creating anything — reusing an existing tag is almost always correct.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn every field instead of the id/name/document_count summary.
pageNo1-based page number.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the behavior that tags are nested via `parent` and that the response is a summarized set of fields unless `full` is set, which is useful context. However, it does not discuss pagination behavior or the clamping of page_size, which are relevant for a listing endpoint. With annotations 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, all information-dense: core behavior, domain context about nesting, return shape, and actionable usage guidance. Front-loaded with the primary purpose and ends with the most useful guidance. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a read-only list endpoint. Safety is covered by annotations, parameters are fully described in schema, the return summary is stated in the description, and guidance about when to call it is provided. No output schema exists, but the description covers the important return fields without enumerating all possible fields, which is acceptable given `full` exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter already has a description in the schema. The tool description adds meaning by explaining the return fields (id, name, document_count) which helps interpret the `full` parameter's contrast. It doesn't add syntax or format details beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists tags, identifies tags as the primary categorization mechanism, and notes they can be nested via `parent`. The return fields are specified. The guidance to call this before creating anything distinguishes it from create_tag and other tag-related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to call this before creating anything, with the rationale that reusing an existing tag is almost always correct. This provides clear when-to-use guidance and implicitly steers away from create_tag. It helps an agent decide to list existing tags before creating a new one, which is valuable edge guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksList background tasksA
Read-onlyIdempotent

Background tasks — consumption, merges, reprocessing — with their state and result. This is where an upload's outcome shows up, including the ID of the document it created.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn every field instead of the identifying summary.
pageNo1-based page number.
statusNoPaperless reports these lower-case; 'success' and 'failure' are the interesting ones.
task_idNoFilter to one task UUID, e.g. the one upload_document returned.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
acknowledgedNofalse shows only tasks the user has not dismissed.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds context that tasks are returned with their state, result, and the ID of any created document — useful for understanding what the call surfaces. It does not discuss pagination behavior, the default acknowledged filter, or how 'full' affects the payload, but with strong annotations 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The scope ('background tasks — consumption, merges, reprocessing — with their state and result') is front-loaded, and the second sentence earns its place by linking the tool to the upload workflow. Nothing is redundant with the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 optional parameters, a read-only/idempotent annotation set, and no output schema, the description supplies the essential return semantics an output schema would otherwise provide: state, result, and the created document ID. The only material gap is the absence of routing guidance among list_tasks, get_active_tasks, and get_task, which would make selection deterministic without opening schemas.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — all 8 parameters have individual descriptions, several of which are unusually helpful (e.g., status: "'success' and 'failure' are the interesting ones"; task_id: 'e.g. the one upload_document returned'). Per the rubric, the baseline is 3 when the schema does the heavy lifting, and the description adds no parameter-level detail beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('background tasks'), the categories covered ('consumption, merges, reprocessing'), and the returned data ('state and result'). The second sentence adds a genuinely distinguishing function — this is where an upload's outcome appears, including the created document ID. It lacks an explicit contrast with closely related siblings like get_active_tasks and get_task, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'This is where an upload's outcome shows up' provides a clear implied usage context: after calling upload_document, check this tool for the resulting document ID and status. However, there is no explicit when-to-use versus alternatives — notably get_active_tasks (only running tasks) and get_task (a single task by UUID) — and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_trashList trashed documentsA
Read-onlyIdempotent

Documents in the trash, with the date each was deleted and when it will be purged for good.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn every field instead of the identifying summary.
pageNo1-based page number.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only, idempotent, and non-destructive, so the safety burden is covered. The description adds useful output semantics by stating that deletion and purge dates are returned, going beyond the structured 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short, front-loaded sentence that states the resource and the key returned fields without wasted words. It is efficient, though phrased as a noun phrase rather than a full verb-led sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 100% documented parameters and strong safety annotations, the description is sufficient for an agent to understand what the tool returns. The lack of an output schema is partially compensated by naming the important fields, though the overall response envelope is not described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All five parameters have detailed descriptions in the input schema, so the schema carries the parameter-level meaning. The tool description adds no parameter-specific detail beyond establishing the trash-list context, which is consistent with the 100% schema coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title supplies the verb 'List' and the description identifies the exact resource: trashed documents. It also names distinguishing output fields (deletion date and purge date), which helps separate it from restore_from_trash and empty_trash, though no sibling is explicitly called out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is meant for viewing trash contents and conveys the relevant use case through the deleted/purge date detail. However, there is no explicit when-to-use or when-not-to-use guidance, and no alternatives such as restore_from_trash or empty_trash are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workflow_actionsList workflow actionsA
Read-onlyIdempotent

Action definitions across all workflows. Useful for auditing what gets assigned automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn the complete definitions. Triggers carry 27 fields and actions 34, so keep this off until you need the details of a specific rule — get_workflow is usually the better way.
pageNo1-based page number.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already fully declare the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the bar for added value is lower. The description still contributes: 'across all workflows' reveals the global scope (no per-workflow filter exists), and the full parameter warns about verbose payloads ('Triggers carry 27 fields and actions 34'), which is genuinely useful behavioral context beyond what annotations state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler: the first states scope, the second states purpose. The core information is front-loaded before the use case, and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 5 optional parameters, 100% schema coverage, and a complete annotation set, the definition is nearly sufficient. The remaining gap is minor: nothing clarifies how actions differ from triggers when a caller is choosing between list_workflow_actions and list_workflow_triggers. With no output schema, a brief note on what an 'action definition' contains would round it out, but the auditing purpose partially covers this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 even though the tool description itself adds no parameter detail. The schema's parameter descriptions are strong — full even names an alternative tool and quantifies payload size — but that credit belongs to the schema, not the description. The description neither compensates for nor detracts from the schema's coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the resource and scope precisely: 'Action definitions across all workflows' — an agent knows it lists workflow action definitions globally. The auditing line adds intent ('what gets assigned automatically'). However, it never explicitly distinguishes itself from the close sibling list_workflow_triggers, so the difference between actions and triggers is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a concrete use case: 'Useful for auditing what gets assigned automatically.' The full parameter description adds routing guidance, telling the agent 'get_workflow is usually the better way' when details of a specific rule are needed. This is good, but the exclusion is scoped to the full-parameter decision rather than the tool as a whole, and no sibling like list_workflow_triggers is contrasted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workflowsList workflowsA
Read-onlyIdempotent

Automation rules on this instance, each with its triggers and actions inlined. Read these before changing filing behaviour — a workflow may already be doing what the user is asking you to do by hand.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn the complete definitions. Triggers carry 27 fields and actions 34, so keep this off until you need the details of a specific rule — get_workflow is usually the better way.
pageNo1-based page number.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond those hints: workflows include their triggers and actions inline, and the agent should treat the list as a prerequisite check before mutating filing behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The core subject is front-loaded, and the second sentence gives actionable advice that justifies checking this endpoint before making changes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given rich annotations and fully documented parameters, the description is nearly complete for a read-only list endpoint. It communicates the payload shape and a practical use case; a minor gap is the slight ambiguity about how much trigger/action detail is present when full=false.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented. The tool description adds little parameter-specific meaning, though the mention of inlined triggers and actions loosely relates to the full parameter; the full parameter's own description provides the more useful guidance about when to keep it off.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource clearly as "automation rules on this instance" and specifies that triggers and actions are inlined, so an agent can tell this is a list endpoint for workflow definitions. It does not explicitly name a sibling such as get_workflow or list_workflow_triggers, but the resource and scope are unambiguous enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage context: read these workflows before changing filing behavior so you do not duplicate an existing rule by hand. It does not exclude alternatives or explicitly say when to prefer get_workflow, though that guidance appears in the full parameter description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workflow_triggersList workflow triggersB
Read-onlyIdempotent

Trigger definitions across all workflows. Useful for auditing what fires when.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn the complete definitions. Triggers carry 27 fields and actions 34, so keep this off until you need the details of a specific rule — get_workflow is usually the better way.
pageNo1-based page number.
orderingNoField to order by. Prefix with '-' to reverse, e.g. '-created'.
page_sizeNoItems per page. Clamped by the server's configured ceiling.
name__icontainsNoCase-insensitive substring filter on the name.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering safety. The description adds the scope 'across all workflows,' which tells the agent there is no per-workflow filtering at the top level, a useful behavioral detail beyond the annotations. It does not mention pagination or output shape, but the annotations carry the main behavioral burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences: the first defines the resource and scope, the second gives a suggested use. It is tightly written and front-loaded with the essential fact, though it does not pack as much routing information as the strongest definitions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with five parameters and no output schema, the description states the high-level scope but does not describe the response structure or pagination behavior. The schema covers parameters and annotations cover safety, so the definition is minimally viable but leaves the agent to infer the return format from the name and parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter (full, page, ordering, page_size, name__icontains) has its own description. The main description adds no parameter-specific meaning, so the baseline of 3 for full schema coverage applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource as trigger definitions and scopes it across all workflows, which distinguishes it from sibling tools like list_workflows and list_workflow_actions. However, the action verb 'list' only appears in the title/name, not in the description itself, so the description relies on those for full clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Useful for auditing what fires when' supplies a general use case, which loosely implies when this tool might be selected. It does not name alternatives or provide any exclusion criteria, so the guidance remains 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.

merge_documentsMerge documentsA
Destructive

Merge several documents into one new PDF, in the order given. The originals stay unless delete_originals is set. Runs asynchronously — poll the returned task with get_task.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentsYesDocument IDs in the order the pages should appear.
archive_fallbackNoFall back to the archived PDF/A version when an original cannot be merged.
delete_originalsNoDelete the source documents after a successful merge. Irreversible — confirm first.
metadata_document_idNoCopy tags, correspondent and type from this document onto the merged result.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description discloses the async execution model ('Runs asynchronously — poll the returned task with get_task') and the safe-by-default behavior ('The originals stay unless delete_originals is set'). These are material behavioral traits an agent must know before invoking, and they are consistent with the annotations. It does not discuss partial-failure behavior, but the archive_fallback parameter in the schema partially covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: the first states the core operation and ordering requirement, the second the safety default, the third the async contract and follow-up. Each sentence carries unique information and the main verb is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by stating that a task is returned and how to follow up (get_task), which is the key missing piece. It covers purpose, ordering, safety default, and async flow. Gaps are minor: no statement of failure/partial-merge semantics and no permission prerequisites, though the destructive hint and archive_fallback schema description mitigate these.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 adds value beyond the schema by clarifying the default behavior of delete_originals ('The originals stay unless delete_originals is set'), which the schema's parameter description does not state (it only describes the effect and warns it is irreversible). This resolves a real ambiguity for an agent deciding whether to pass the flag.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Merge several documents into one new PDF, in the order given.' It names the output format (PDF), the ordering constraint, and by implication the resource (multiple documents → one new document). This cleanly distinguishes it from sibling PDF operations like rotate_documents and edit_pdf, which modify rather than combine.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: ordering is the caller's responsibility, originals are preserved unless the flag is set, and the operation is asynchronous so the agent should poll with get_task. It provides a direct follow-up instruction referencing a sibling tool, though it does not name explicit when-not conditions or alternatives. Since no near-equivalent merge sibling exists among the listed tools, this is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_pdf_passwordRemove a PDF passwordA

Decrypt password-protected PDFs so Paperless can OCR them. The password is sent to your Paperless instance over its API; only use it against an instance you control.

ParametersJSON Schema
NameRequiredDescriptionDefault
passwordYes
documentsYesIDs of the documents to act on. Always an explicit list — never an unbounded selection.
delete_originalNo
update_documentNo
include_metadataNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that the password is sent to the Paperless instance over its API and warns to use it only on a controlled instance. However, it does not explain side effects of delete_original, update_document, or include_metadata, nor what happens to the original file after decryption.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words, front-loaded with the action and purpose, followed by a relevant security note. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and five parameters, the description omits the semantics of the three boolean parameters and the post-decryption flow. An agent cannot infer when to set update_document or delete_original or what response to expect, leaving significant gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%; only 'documents' has a schema description. The description adds meaning for 'password' (sent over the API to the instance), but it leaves delete_original, update_document, and include_metadata entirely unexplained, failing to compensate for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Decrypt password-protected PDFs' with a specific verb and resource, and adds the purpose 'so Paperless can OCR them'. This clearly distinguishes it from siblings like rotate_documents or merge_documents, even without naming an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context: use this when you need to make password-protected PDFs processable by Paperless OCR. The caveat 'only use it against an instance you control' gives an important restriction, though it doesn't explicitly enumerate alternatives or when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reprocess_documentsReprocess documentsA

Re-run OCR and the archive generation for the given documents, e.g. after changing OCR settings. Queued asynchronously; the documents keep their metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentsYesIDs of the documents to act on. Always an explicit list — never an unbounded selection.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnly=false, non-idempotent), the description discloses two important behaviors: the operation is queued asynchronously and existing metadata is preserved. This adds value that annotations alone do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the main operation and a clarifying example plus key behavioral caveats. No filler or duplication of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, no-output-schema tool, the description covers what an agent needs: what happens, when to use it, and that it is asynchronous with metadata preservation. The array parameter is already fully documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the single documents parameter is well described in the schema, including the requirement for an explicit list. The tool description adds no parameter-level syntax beyond referring to 'given documents', so the schema carries the burden and baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific operation — re-running OCR and archive generation — on a concrete resource (documents) and gives a realistic trigger ('after changing OCR settings'). This distinguishes it from sibling tools like rotate_documents or update_document by functional intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context with the OCR-settings example and states the asynchronous queueing behavior. It does not explicitly name alternatives or exclusion cases, but the action is distinctive enough that an agent can infer when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_from_trashRestore documents from trashA

Bring deleted documents back. The safe counterpart to delete_document.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentsYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that the operation is non-read-only and non-destructive; the description adds the 'safe' and 'bring back' framing, which clarifies it is an undo operation. However, it does not go into further behavioral detail such as preconditions, error handling, or what happens to documents that aren't in trash.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, and the main action is stated first. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single array parameter, the description plus annotations cover the core action and safety profile. It does not explain return values or invalid-ID behavior, but given the low complexity and that no output schema is declared, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no description for the 'documents' parameter and the description itself never explains that the array contains document IDs to restore. Schema coverage is 0%, so the tool description must compensate, and it doesn't. The parameter name is somewhat self-explanatory, which prevents a score of 1.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('bring back') and resource ('deleted documents'), and explicitly positions the tool as the 'safe counterpart to delete_document,' which distinguishes it from the destructive sibling. There is no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

By calling it the counterpart to delete_document, the description implicitly tells the agent to use it when an earlier deletion needs to be undone. It does not explicitly state when not to use it versus empty_trash or other alternatives, but the context is clear enough for routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rotate_documentsRotate documentsA

Rotate every page of the given documents clockwise by 90, 180 or 270 degrees.

ParametersJSON Schema
NameRequiredDescriptionDefault
degreesYes
documentsYesIDs of the documents to act on. Always an explicit list — never an unbounded selection.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a mutating operation (readOnlyHint=false), and the description adds valuable behavioral detail: the operation affects every page, rotates clockwise, and only supports 90/180/270-degree turns. It does not mention permanence or whether a new document is created, but given the annotation coverage, the added context is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, focused sentence placed directly after the title. It states the operation, the scope ('every page'), the direction ('clockwise'), and the allowed values ('90, 180 or ​270 degrees'). No filler or redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutating tool, the description gives enough information to select and invoke it correctly: what it rotates, how it rotates, and what angle choices are valid. It does not describe the return value or side effects, but there is no output schema and annotations cover the write behavior, so this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: the 'documents' parameter has a description, but 'degrees' is just a bare number type. The description compensates by constraining degrees to 90, 180, or 270 and specifying clockwise direction. It does not add anything for documents, but the schema already covers that parameter adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific action verb ('Rotate') with a clear resource ('the given documents'), and adds precise constraints: every page, clockwise, 90/180/270 degrees. This clearly distinguishes it from sibling tools like edit_pdf or merge_documents, since the scope and axis of the operation are explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case: rotate all pages of specified documents by a fixed angle. However, it does not explicitly state when to prefer this over sibling tools such as edit_pdf, nor does it mention any exclusions or alternatives. The context is understandable but not explicitly routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_autocompleteAutocomplete a search termA
Read-onlyIdempotent

Completions for a partial search term, ranked by importance in the full-text index. Helpful when the user's spelling of a name or term may not match what is in the archive.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYes
limitNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds that results are ranked by full-text index importance and that partial terms are accepted. No safety-relevant behavior is hidden, and there is no contradiction with 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences front-load the core behavior and then add the practical use case. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only autocomplete tool, the description is nearly sufficient: it explains the term, the ranking, and when to use it. It could be more complete with an explicit statement about the returned completion list format, but that is not required to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description clarifies that 'term' is a partial search term, which adds meaning beyond the bare schema. However, with no schema-level descriptions and no mention of what 'limit' controls, it only partially compensates for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation: returning completions for a partial search term, ranked by importance in the full-text index. This distinguishes it from the document-returning search tools among its siblings 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear context for use: when the user's spelling may not match archive terms. It does not name alternative tools or state when not to use it, so it stops short of a full when/when-not guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_documentsSearch documentsA
Read-onlyIdempotent

Find documents by full-text search, metadata filters, or both. This is the main entry point for every 'which documents ...' question. Returns a compact summary per document (id, title, IDs of correspondent/type/tags, dates) — NOT the OCR text, which would flood the context. Use get_document_content for the text of a specific document.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
queryNoFull-text search across document content and metadata. Supports the Paperless query syntax, e.g. 'invoice AND 2024', 'correspondent:telekom', 'created:[2024-01-01 TO 2024-12-31]'. Prefer this for 'find documents about X' questions.
orderingNoSort field, '-' prefixed for descending. Common: -created, -added, title, archive_serial_number.-created
is_taggedNofalse returns documents with no tags at all — the untriaged pile.
owner__idNoOnly documents owned by this user ID.
page_sizeNoDefault 25.
is_in_inboxNotrue returns documents still carrying an inbox tag. The usual starting point for triage.
more_like_idNoReturn documents similar to this document ID. Ignores the other filters.
tags__id__inNoOnly documents carrying AT LEAST ONE of these tag IDs.
extra_filtersNoAny additional Django-style filter the documents endpoint accepts, e.g. {'content__icontains': 'kündigung', 'created__year': 2024, 'mime_type': 'application/pdf'}. Use this for filters not listed above.
tags__id__allNoOnly documents carrying ALL of these tag IDs.
tags__id__noneNoExclude documents carrying any of these tag IDs.
content_previewNoInclude this many characters of OCR text per document. 0 disables it. Keep small.
added__date__gteNoAdded to Paperless on or after this date (YYYY-MM-DD).
added__date__lteNoAdded to Paperless on or before this date (YYYY-MM-DD).
storage_path__idNoExact storage path ID.
title__icontainsNoCase-insensitive substring match on the title only. Cheaper and stricter than query.
correspondent__idNoExact correspondent ID.
document_type__idNoExact document type ID.
created__date__gteNoCreated on or after this date (YYYY-MM-DD).
created__date__lteNoCreated on or before this date (YYYY-MM-DD).
custom_field_queryNoJSON-encoded custom field filter, e.g. '["due","range",["2024-08-01","2024-09-01"]]' or '["customer","icontains","acme"]'. See the Paperless API docs for the operator list.
archive_serial_numberNoExact archive serial number.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds meaningful behavior beyond them: it returns a compact per-document summary and deliberately omits full OCR text to avoid flooding context. This is useful operational context for an agent deciding whether the result will fit the conversation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The core purpose, expected return shape, and the key alternative (get_document_content) are all present and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 23-parameter tool with no output schema, the description covers the essential selection information: search modes, response summary structure, and the alternate tool for full text. Filtering and pagination details are carried by the schema, and the enumerated summary fields compensate for the missing output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 96%, so the schema already documents nearly every parameter; the baseline of 3 applies. The tool description adds a high-level statement about full-text and metadata filters but does not need to repeat individual parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Find documents') plus the two search modes (full-text and metadata filters), so the resource and operation are unambiguous. It also distinguishes itself from get_document_content by noting it returns summaries, not OCR text. The 'main entry point for every "which documents..." question' framing makes the purpose immediately usable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly tells the agent this is the default for document-finding questions and explicitly points to get_document_content when OCR text is needed. It does not contrast with sibling tools like global_search or search_autocomplete, so some alternative routing remains implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_storage_pathTest a storage path templateA
Read-onlyIdempotent

Render a storage path template against an existing document to see the resulting file path. Use this to validate a template before saving it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe storage path template to render.
documentYesID of the document to render the template against.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive; description adds minor context ('against an existing document') but no additional behaviors like error/edge-case handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core operation and followed by the usage rationale; no filler or duplication.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete enough for a simple read-only validation tool with fully documented parameters and strong annotations. No output schema, but the outcome ('resulting file path') is stated; minor gap on error/output structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters fully (100%); description adds no significant detail beyond 'path' and 'document' as described in schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Render') and resource ('storage path template') plus outcome ('see the resulting file path'), clearly distinguishing it from create/update storage path siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States explicit use case ('validate a template before saving it'), giving clear context. Does not name alternative tools or exclusion criteria, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_correspondentUpdate correspondentA

Partially update a correspondent. Only the fields you pass are changed; omitted fields keep their current value.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
matchNoText this object matches against, interpreted per matching_algorithm.
ownerNoOwning user ID, or null for unowned.
is_insensitiveNoCase-insensitive matching. Defaults to true.
set_permissionsNoObject-level permissions. Overwrites existing permissions entirely unless the endpoint supports merging.
matching_algorithmNoMatching algorithm: 0=none, 1=any word, 2=all words, 3=exact, 4=regex, 5=fuzzy, 6=auto. Use 6 (auto) unless the user asked for a specific rule.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safety profile (readOnlyHint=false, destructiveHint=false), so the description's job is to add behavior beyond that. It does add the key fact that omitted fields retain their current values — a genuine behavioral trait not present in the annotations. But it discloses nothing about permissions required, reversibility, or what happens with the overwriting set_permissions behavior (which the schema, not the description, covers).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, roughly 18 words, with the operative qualifier 'partially' front-loaded in the very first phrase. There is zero filler, no restating of the title, and no repetition of schema details — every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter write operation with a nested set_permissions object and no output schema, the description covers the core partial-update semantics but omits return-value behavior, authorization requirements, and routing guidance relative to create/get/delete_correspondent. The rich schema descriptions for matching_algorithm and set_permissions partially compensate, but the tool description alone would leave an agent guessing on several call-relevant points.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 71%, with id and name lacking descriptions; the tool description adds no parameter-specific meaning for any of the 7 fields. The generic partial-update statement applies uniformly but does not compensate for the 29% undocumented parameters. Baseline 3 is appropriate given the schema carries most of the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('partially update') and resource ('correspondent'), and the partial qualifier adds crucial meaning beyond the title by clarifying PATCH-style semantics. This distinguishes it from sibling tools for the same resource (create/get/delete_correspondent) and from other update_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence ('omitted fields keep their current value') implies a usage rule: only pass fields you intend to change. However, the description never explicitly says when to use this vs. alternatives like create_correspondent or delete_correspondent, and gives no exclusions or 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.

update_custom_fieldUpdate custom fieldA

Rename a custom field or adjust its extra_data (e.g. add select options). Changing data_type is not supported by Paperless.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
extra_dataNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating, non-idempotent operation. The description adds meaningful behavioral context by explicitly stating that data_type cannot be changed in Paperless, preventing an agent from attempting an unsupported modification.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence that front-loads the primary actions, gives an example, and states a key limitation. Every part adds value with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description plus schema provide enough for an agent to make a correct update call: required id, optional name and extra_data, and a clear restriction on data_type. It does not describe the return value, but there is no output schema and this is a simple mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the meaning. It explains that name is the new field name and extra_data supports modifications like adding select options. The id parameter is not explicitly described, though it is clearly the identifier of the custom field being updated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific operations: renaming a custom field or adjusting its extra_data, with a concrete example. This clearly identifies the resource and action, and distinguishes it from create/get/delete custom field siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this tool is for modifying an existing custom field's name or extra_data. It also warns that data_type changes are not supported, which is a useful when-not constraint, though it does not explicitly point to alternatives like create_custom_field for new fields.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_documentUpdate documentA

Change metadata on a single document. Only the fields you pass are modified. Pass numeric IDs for correspondent, document_type and storage_path — resolve names via get_metadata_overview first. Setting tags replaces the whole tag list; to add or remove individual tags across documents use bulk_edit_documents.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
tagsNoComplete replacement list of tag IDs.
ownerNo
titleNoGive documents a descriptive title, never a scanner filename.
created_dateNoDocument date as YYYY-MM-DD.
storage_pathNoStorage path ID, or null to clear.
correspondentNoCorrespondent ID, or null to clear.
custom_fieldsNoComplete replacement list of custom field values.
document_typeNoDocument type ID, or null to clear.
archive_serial_numberNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark this as a write operation (readOnlyHint false) but carry little behavioral detail; the description supplies the important nuances: non-destructive partial update, full replacement of the tag list, and the need for pre-resolved numeric IDs. It also clarifies that omitted fields are left untouched, which goes beyond what annotations provide and prevents an agent from assuming a full overwrite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero waste; every sentence carries instructionally useful information. The core action is front-loaded in the first clause, and the description does not repeat schema field descriptions or annotation flags.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation tool with no output schema, the description covers the essentials: scope, partial-update behavior, the tag replacement trap, and the alternative for multi-document tag edits. It does not describe return values or permission requirements, but those are less critical given the annotations and the resource-focused wording.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 70% with descriptions for most fields, and the description adds meaningful cross-parameter semantics: the partial-update rule applies to every parameter, and the tag replacement contract is explicitly stated. It also explains the ID-resolution requirement for correspondent, document_type, and storage_path, which the schema does not convey. Owner and archive_serial_number remain implicit, but the description compensates well for the schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Change metadata on a single document', giving a specific verb and resource. It clearly distinguishes the tool from sibling bulk_edit_documents by contrasting single-document scope with cross-document operations. The title alone would be ambiguous, but the description resolves that completely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the partial-update rule ('Only the fields you pass are modified'), so the agent knows when this tool is appropriate for surgical changes. It explicitly routes tag add/remove to bulk_edit_documents, providing a when-not-to-use instruction with the exact alternative. It also gives the prerequisite to resolve names via get_metadata_overview before passing numeric IDs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_document_typeUpdate document typeA

Partially update a document type. Only the fields you pass are changed; omitted fields keep their current value.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
matchNoText this object matches against, interpreted per matching_algorithm.
ownerNoOwning user ID, or null for unowned.
is_insensitiveNoCase-insensitive matching. Defaults to true.
set_permissionsNoObject-level permissions. Overwrites existing permissions entirely unless the endpoint supports merging.
matching_algorithmNoMatching algorithm: 0=none, 1=any word, 2=all words, 3=exact, 4=regex, 5=fuzzy, 6=auto. Use 6 (auto) unless the user asked for a specific rule.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish that this is a mutating operation (readOnlyHint=false, idempotentHint=false), so the description does not need to restate that. It does add the important behavioral detail that omitted fields keep their current values, which prevents destructive misunderstandings. It does not address authorization, response contents, or the open-world side effects hinted by openWorldHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The primary action is front-loaded, and the clarifying partial-update behavior immediately follows.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema carries substantial detail for the nested set_permissions object and matching_algorithm. However, there is no output schema, and the description does not mention what the endpoint returns, whether side effects exist beyond the document type object, or how openWorldHint=true should be interpreted. Adequate for a basic call, but not fully complete for an agent deciding whether this tool has broader consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents most parameters well (71% coverage), including match, owner, is_insensitive, set_permissions, and matching_algorithm. The description adds value beyond the schema by explaining partial-update semantics: fields not passed are preserved, which is crucial for callers deciding which parameters to include. It does not compensate for the undocumented id and name properties, but the partial-update framing reduces the risk.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Partially update a document type', which names a specific action and resource, and clarifies the partial-update behavior. This is enough to distinguish it from create_document_type, delete_document_type, and get_document_type, and from update_document, which targets documents rather than document types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The partial-update wording clearly implies the tool is for modifying an existing document type, and the 'only fields you pass are changed' guidance is useful. However, there is no explicit when-to-use guidance or mention of alternatives such as create_document_type for new types.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_saved_viewUpdate saved viewA

Change a saved view's name, sorting, visibility or filter rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
page_sizeNo
sort_fieldNo
filter_rulesNo
sort_reverseNo
show_in_sidebarNo
show_on_dashboardNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating operation (readOnlyHint=false, idempotentHint=false), and the description aligns with that. It adds the specific mutable fields, but it does not disclose whether the update is partial or full-replacement, how omitted fields behave, or any side effects consistent with openWorldHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly written sentence with no filler. It front-loads the action, names the resource, and enumerates the affected aspects efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with eight parameters, zero schema descriptions, and no output schema, a one-sentence summary is not sufficient. An agent can identify the tool's purpose but lacks guidance on required id, whether page_size is supported, partial-update behavior, and the expected response or side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 eight undocumented parameters. It groups some fields well ('sorting' implies sort_field/sort_reverse, 'visibility' implies show_in_sidebar/show_on_dashboard, 'filter_rules' maps directly), but it omits page_size and the required id parameter, and gives no detail on update semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Change') and names the resource ('a saved view') plus the exact aspects that can be modified: name, sorting, visibility, and filter rules. This clearly distinguishes it from sibling tools like create_saved_view, delete_saved_view, and get_saved_view.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The wording 'Change a saved view's...' implies this tool is for modifying an existing saved view, which provides basic usage context. However, it does not explicitly contrast with alternatives or state conditions for when to use this tool over create_saved_view or delete_saved_view.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_storage_pathUpdate storage pathA

Partially update a storage path. Only the fields you pass are changed; omitted fields keep their current value.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
pathNoFilename template, e.g. '{created_year}/{correspondent}/{title}'. Required when creating.
matchNoText this object matches against, interpreted per matching_algorithm.
ownerNoOwning user ID, or null for unowned.
is_insensitiveNoCase-insensitive matching. Defaults to true.
set_permissionsNoObject-level permissions. Overwrites existing permissions entirely unless the endpoint supports merging.
matching_algorithmNoMatching algorithm: 0=none, 1=any word, 2=all words, 3=exact, 4=regex, 5=fuzzy, 6=auto. Use 6 (auto) unless the user asked for a specific rule.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The sentence 'Only the fields you pass are changed; omitted fields keep their current value' reveals important merge behavior not captured by annotations. It complements the annotation profile (readOnlyHint=false) and adds value by explaining the update semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the core action and followed immediately by the most important behavioral qualifier. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers partial-update semantics but says nothing about return values, errors, or authorization requirements, and there is no output schema to fill that gap. The schema handles parameters well, so this is adequate for a CRUD update but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, and the schema already documents the parameters well, including path templates, matching_algorithm values, and permissions behavior. The tool description adds no parameter-level guidance, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Partially update a storage path,' which states a specific verb, resource, and semantic nuance. This clearly distinguishes it from sibling tools like create_storage_path, delete_storage_path, get_storage_path, and test_storage_path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when modifying an existing storage path and clarifies partial-update semantics, but it never names alternatives or states when not to use this tool. It lacks explicit routing guidance versus create_storage_path or other storage-path operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_tagUpdate tagA

Partially update a tag. Only the fields you pass are changed; omitted fields keep their current value.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
colorNoHex colour such as '#a6cee3'.
matchNoText this object matches against, interpreted per matching_algorithm.
ownerNoOwning user ID, or null for unowned.
parentNoParent tag ID for nested tags (Paperless-ngx 3.x). Null for a top-level tag.
is_inbox_tagNoInbox tags are applied to newly consumed documents and mark them as untriaged.
is_insensitiveNoCase-insensitive matching. Defaults to true.
set_permissionsNoObject-level permissions. Overwrites existing permissions entirely unless the endpoint supports merging.
matching_algorithmNoMatching algorithm: 0=none, 1=any word, 2=all words, 3=exact, 4=regex, 5=fuzzy, 6=auto. Use 6 (auto) unless the user asked for a specific rule.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only provide generic hints (readOnly=false, idempotent=false, destructive=false). The description adds a concrete behavioral guarantee: omitted fields keep their current value and only passed fields are changed. This is meaningful disclosure beyond the annotations, though it does not cover permissions requirements or validation failures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first states the purpose, the second states the key operational nuance. Every word earns its place, and the most important behavioral detail is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 10-parameter update tool with nested objects, the description plus a well-described schema is largely sufficient for correct invocation. It does not mention response format or nested permission overwrite behavior, but no output schema exists and the schema documents permission semantics itself.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers about 80% of the 10 parameters with descriptions, so the baseline is 3. The description reinforces that all optional parameters follow partial-update semantics, but it does not add per-parameter meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly names the resource ('tag') and the action ('partially update'), and the second sentence explains the exact update semantics. This unmistakably distinguishes it from create_tag, delete_tag, and other update_* siblings without requiring the agent 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: modify an existing tag while preserving unspecified fields. However, it does not explicitly state alternatives, prerequisites, or exclusions, such as using create_tag for new tags or delete_tag for removal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_workflowUpdate workflowA

Update a workflow. Passing triggers or actions replaces the existing list wholesale — fetch the current definition with get_workflow, modify it, and send the complete list back. To simply switch a rule off, pass enabled:false and nothing else.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
orderNo
actionsNo
enabledNo
triggersNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing that passing triggers or actions replaces the existing list wholesale, not merges. It also warns that enabled:false should be sent alone, which is critical behavioral nuance. There is no contradiction with readOnlyHint=false or destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry all the critical information with no filler. The main purpose is front-loaded, and the most important behavioral caveat follows immediately. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's six parameters and the absence of an output schema, the description covers the key non-obvious behaviors and gives a safe pattern for partial updates. It leaves name and order semantics to be inferred, but overall an agent has enough to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden. It adds essential meaning for triggers, actions, and enabled, explaining replacement semantics and the toggle case. It does not clarify id, name, or order, but these are largely self-evident from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 a workflow.' It also distinguishes behaviorally from siblings like get_workflow and create_workflow by describing the update semantics. This is 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives actionable guidance: fetch the current definition with get_workflow, modify it, and send the complete list back. It also explains the special enabled:false case. However, it never explicitly contrasts with create_workflow or delete_workflow, so the 'when not to use' guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_documentUpload a documentA

Hand a file to Paperless for consumption. Provide either path (a file on the machine running this server — the cheap option) or content_base64 (works for remote deployments but costs context proportional to the file size; avoid for anything over a few hundred kilobytes). Consumption is asynchronous: the returned task ID can be polled with get_task.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAbsolute path to the file on the server's filesystem.
tagsNo
titleNo
createdNoDocument date, e.g. '2024-04-19'.
filenameNoFilename to present to Paperless. Required with content_base64.
storage_pathNo
correspondentNo
document_typeNo
content_base64NoBase64-encoded file contents.
archive_serial_numberNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations only indicating non-readOnly, non-idempotent, and non-destructive, the description adds meaningful behavior: consumption is asynchronous, a task ID is returned, and content_base64 incurs context cost proportional to file size. This goes beyond the schema and helps the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler, with the core purpose and critical operational details front-loaded. Every sentence earns its place: purpose, input-mode tradeoffs, and asynchronous behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no output schema, the description covers the key decision (path vs content_base64), flags file-size limits, and explains the return value and follow-up path. It doesn't explain all optional metadata parameters, but those are largely inferable from names/schema. The main gap is not mentioning accepted file types or mutual-exclusivity constraints beyond 'provide either'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, so the description carries extra responsibility. It adds important semantics for the two primary parameters (`path` vs `content_base64`), but it does not clarify relationships between other optional parameters like `filename` being required with `content_base64` — though the schema does cover that. The optional metadata fields are self-evident from names, but the description does not compensate for all low-coverage parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a clear verb and resource: 'Hand a file to Paperless for consumption.' It distinguishes upload_document from sibling document actions by specifying ingestion of a file, and the path/content-mode detail reinforces the purpose. No ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly guides when to use `path` vs `content_base64`, labeling path as the cheap local option and content_base64 for remote deployments with a size caveat. It also directs the agent to get_task after the asynchronous upload. It doesn't name a sibling alternative, but the guidance within the tool is clear.

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.

  1. 85 tool updatesv0.1.1
    • First observedacknowledge_tasks
    • First observedbulk_download_documents
    • First observedbulk_edit_documents
    • First observedbulk_edit_metadata_objects
    • First observedcreate_correspondent
    • First observedcreate_custom_field
    • First observedcreate_document_note
    • First observedcreate_document_type
    • First observedcreate_saved_view
    • First observedcreate_share_link
    • First observedcreate_share_link_bundle
    • First observedcreate_storage_path
    • First observedcreate_tag
    • First observedcreate_workflow
    • First observeddelete_correspondent
    • First observeddelete_custom_field
    • First observeddelete_document
    • First observeddelete_document_note
    • First observeddelete_document_type
    • First observeddelete_documents
    • First observeddelete_saved_view
    • First observeddelete_share_link
    • First observeddelete_share_link_bundle
    • First observeddelete_storage_path
    • First observeddelete_tag
    • First observeddelete_workflow
    • First observeddownload_document
    • First observededit_pdf
    • First observedemail_documents
    • First observedempty_trash
    • First observedget_active_tasks
    • First observedget_correspondent
    • First observedget_custom_field
    • First observedget_document
    • First observedget_document_ai_suggestions
    • First observedget_document_content
    • First observedget_document_history
    • First observedget_document_metadata
    • First observedget_document_suggestions
    • First observedget_document_thumbnail
    • First observedget_document_type
    • First observedget_metadata_overview
    • First observedget_next_asn
    • First observedget_remote_version
    • First observedget_saved_view
    • First observedget_selection_data
    • First observedget_server_status
    • First observedget_statistics
    • First observedget_storage_path
    • First observedget_tag
    • First observedget_task
    • First observedget_workflow
    • First observedglobal_search
    • First observedlist_correspondents
    • First observedlist_custom_fields
    • First observedlist_document_notes
    • First observedlist_document_share_links
    • First observedlist_document_types
    • First observedlist_saved_views
    • First observedlist_share_link_bundles
    • First observedlist_share_links
    • First observedlist_storage_paths
    • First observedlist_tags
    • First observedlist_tasks
    • First observedlist_trash
    • First observedlist_workflow_actions
    • First observedlist_workflow_triggers
    • First observedlist_workflows
    • First observedmerge_documents
    • First observedremove_pdf_password
    • First observedreprocess_documents
    • First observedrestore_from_trash
    • First observedrotate_documents
    • First observedsearch_autocomplete
    • First observedsearch_documents
    • First observedtest_storage_path
    • First observedupdate_correspondent
    • First observedupdate_custom_field
    • First observedupdate_document
    • First observedupdate_document_type
    • First observedupdate_saved_view
    • First observedupdate_storage_path
    • First observedupdate_tag
    • First observedupdate_workflow
    • First observedupload_document

TDQS

A3.6/5.0

Scored across 85 tools

Disambiguation3/5

Most CRUD tool families are clearly separated by resource type, but bulk_edit_documents overlaps with rotate_documents, merge_documents, edit_pdf, reprocess_documents, and delete_documents by exposing the same operations as methods. get_document with include_content also partially duplicates get_document_content, so an agent must read descriptions carefully to pick the right tool.

Naming Consistency5/5

Nearly every tool follows the verb_noun snake_case pattern, with predictable list/get/create/update/delete families for each resource type. Minor exceptions like global_search and search_autocomplete still fit the general verb-first style and do not create confusion.

Tool Count1/5

85 tools is an extreme surface for an MCP server, far beyond the practical range for agent tool selection. Even for a broad domain like Paperless-ngx, this exceeds the 50+ threshold that constitutes an extreme mismatch.

Completeness4/5

The server covers nearly the entire Paperless lifecycle: document search, content retrieval, metadata editing, OCR reprocessing, merging, trash management, share links, workflows, tasks, and full CRUD for all metadata objects. Minor gaps remain, such as no note update tool, no share-link update tool, and no direct user or mail-rule management.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    An MCP (Model Context Protocol) server for interacting with a Paperless-NGX API server. This server provides tools for managing documents, tags, correspondents, and document types in your Paperless-NGX instance.
    44
    730
    141
    TypeScript
    ISC
  • F
    license
    A
    quality
    B
    maintenance
    A privacy-first MCP server for Paperless-ngx that lets an LLM agent search, organize, tag, and reference documents without exposing full text unless explicitly requested.
    13
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    A read-only and write MCP server for Paperless-ngx, enabling document listing, metadata retrieval, and creation of tags, correspondents, document types, and sorting workflows via natural language.
    MIT