Skip to main content
Glama
pvliesdonk
by pvliesdonk

Paperless MCP

CI codecov PyPI Python License Docker Docs llms.txt Template

Paperless-NGX document management over MCP: search, tag, upload, and read documents; manage tags, correspondents, document types, and custom fields.

Documentation | Config wizard | PyPI | Docker

Features

  • Document search & retrieval: full-text and filtered list queries against Paperless-NGX, plus access to extracted OCR text, metadata, and thumbnails.

  • Tag, correspondent, document-type, custom-field management: full CRUD and bulk-edit for every classification dimension Paperless exposes.

  • Document lifecycle supports uploads, field changes, notes, audit history, and AI-suggested tags/correspondents/types.

  • Operational introspection covers saved views, storage paths, share links, background tasks (with wait_for_task), statistics, and remote Paperless-NGX version.

  • MCP tools: 50 LLM-visible tools with Lucide icons and read-only gating; see src/paperless_mcp/tools/.

  • MCP resources: 20 URIs exposing documents and domain collections; see src/paperless_mcp/resources/.

  • Read-only mode: flip PAPERLESS_MCP_READ_ONLY=true to disable every mutating tool at startup.

Related MCP server: mcp-paperless-ngx

What you can do with it

With this server mounted in an MCP client (Claude, etc.), you can:

  • "Find last quarter's invoices from ACME." Composes search_documents with a correspondent filter, then streams matches via paperless://documents/{id}/content.

  • "Tag these three documents as 'reviewed' and move them to the Accounting correspondent." Uses bulk_edit_documents in a single call.

  • "Upload this PDF and wait until OCR finishes." Composes upload_document + wait_for_task so the assistant only reports back once the document is indexed.

  • "What changed on document 4213 in the last week?" Reads paperless://documents/4213/history and summarises the audit trail.

Installation

From PyPI

pip install pvliesdonk-paperless-mcp

If you add optional extras via the PROJECT-EXTRAS-START / PROJECT-EXTRAS-END sentinels in pyproject.toml, document them below:

  • pip install pvliesdonk-paperless-mcp[docs]: installs mkdocs-material and mkdocstrings[python] for building the documentation site locally (uv run mkdocs serve).

From source

git clone https://github.com/pvliesdonk/paperless-mcp.git
cd paperless-mcp
uv sync --all-extras --all-groups

Docker

docker pull ghcr.io/pvliesdonk/paperless-mcp:latest

To run the newest merged code instead of the newest release, use the rolling edge tag. It is rebuilt on every merge to main and carries no version identity. See Image tags for the full tag list.

docker pull ghcr.io/pvliesdonk/paperless-mcp:edge

A compose.yml ships at the repo root as a starting point. Copy .env.example to .env, edit, and docker compose up -d.

To attach a remote Python debugger (development only; the protocol is unauthenticated), see Remote debugging.

Linux packages (.deb / .rpm)

Download .deb or .rpm packages from the GitHub Releases page. Both install a hardened systemd unit; env configuration is sourced from /etc/paperless-mcp/env (copy from the shipped /etc/paperless-mcp/env.example).

Claude Desktop (.mcpb bundle)

Download the .mcpb bundle from the GitHub Releases page and double-click to install, or run:

mcpb install paperless-mcp-<version>.mcpb

Claude Desktop prompts for required env vars via a GUI wizard, with no manual JSON editing needed.

For manual Claude Desktop configuration and setup options, see Claude Desktop deployment.

Release channels

Artifacts ship on three channels. Each row lists exactly what that channel publishes.

Channel

Version identity

Artifacts

edge (rolling)

None; the commit is the identity

Docker image :edge rebuilt on every merge to main; .mcpb bundle as the mcpb-bundle-edge workflow artifact; Claude Code plugin .zip as the plugin-zip-edge artifact; rolling unstable docs version. It leaves no git tag, GitHub release, or PyPI entry behind.

Pre-release

vX.Y.Z-rc.N, computed and reviewed in its release pull request

PyPI (as the pre-release X.Y.ZrcN); GitHub release with wheels, sdist, .deb/.rpm packages, .mcpb bundle, plugin .zip, and SBOM attached; Docker image under its immutable vX.Y.Z-rc.N tag plus the ordering-aware rolling rc tag. Skips the plugin marketplace, the MCP registry, and the docs deploy.

Stable

vX.Y.Z

Everything: PyPI, Docker (version tag plus ordering-aware latest / vX / vX.Y), .deb/.rpm, GitHub release assets (wheels, sdist, .mcpb bundle, plugin .zip, SBOM), plugin marketplace and MCP registry entries (when the release is the newest stable), versioned docs with an ordering-aware latest alias.

Pre-releases reach PyPI so that a candidate's .mcpb bundle installs: the bundle points at PyPI rather than carrying the code. Ordinary installers never see them, because a PEP 440 resolver skips pre-releases unless the requirement pins one or you pass --pre. Ask for a candidate by name with pip install pvliesdonk-paperless-mcp==X.Y.ZrcN. PyPI spells it in the PEP 440 canonical form, while tags use SemVer. Rolling pointers are ordering-aware, so a patch release cut from an old release/X.Y branch never moves latest-style tags back to older content, and a candidate for an already-released version never moves rc. See Release process for the full model.

Quick start

paperless-mcp serve                                # stdio transport
paperless-mcp serve --transport http --port 8000   # streamable HTTP

For library usage (embedding the domain logic without the MCP transport), import from the paperless_mcp package directly. See the project's domain modules under src/paperless_mcp/ for entry points.

Server info

The server registers a built-in get_server_info tool (via fastmcp_pvl_core.register_server_info_tool) so operators can confirm the deployed version with a single MCP call. The default response carries server_name, server_version, and core_version. Servers that talk to a remote upstream wire upstream version reporting inside the DOMAIN-UPSTREAM-START / DOMAIN-UPSTREAM-END sentinel in src/paperless_mcp/server.py; see CLAUDE.md for the wiring pattern.

Configuration

All settings come from environment variables with the PAPERLESS_MCP_ prefix.

Required

Variable

Description

PAPERLESS_MCP_PAPERLESS_URL

Base URL of the Paperless-NGX REST API (no trailing slash).

PAPERLESS_MCP_API_TOKEN

Paperless service-account token.

Optional (with defaults)

Variable

Default

Description

PAPERLESS_MCP_PAPERLESS_PUBLIC_URL

(same as PAPERLESS_MCP_PAPERLESS_URL)

Public-facing Paperless UI URL used to construct user-visible links, including web_url and share_url. Defaults to the API URL when unset.

PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS

30

Per-request HTTP timeout (seconds).

PAPERLESS_MCP_HTTP_RETRIES

2

Retries (not counting the initial attempt) on 5xx/network errors.

PAPERLESS_MCP_DEFAULT_PAGE_SIZE

25

Default page_size for list tools. Clamped [1, 100].

PAPERLESS_MCP_READ_ONLY

false

When true, disables every writable tool.

PAPERLESS_MCP_INSTRUCTIONS

(built-in)

Operator-supplied description appended to MCP instructions.

See the Transport & Auth section below for the inherited transport, auth, and logging variables.

Transport & Auth

The following variables are inherited unchanged from fastmcp-server-template:

Variable

Description

PAPERLESS_MCP_TRANSPORT

Server transport: stdio (default), http, or sse.

PAPERLESS_MCP_HOST

Bind host for HTTP/SSE transport (default 127.0.0.1).

PAPERLESS_MCP_PORT

Bind port for HTTP/SSE transport (default 8000).

PAPERLESS_MCP_HTTP_PATH

URL path prefix for HTTP transport (default /mcp).

PAPERLESS_MCP_BASE_URL

Public base URL for OIDC and public HTTP server metadata.

PAPERLESS_MCP_OIDC_*

OIDC provider settings when OIDC auth is enabled.

PAPERLESS_MCP_BEARER_TOKEN

Static bearer token for simple token auth.

PAPERLESS_MCP_LOG_LEVEL

Log level: DEBUG, INFO, WARNING, ERROR.

PAPERLESS_MCP_LOG_FORMAT

Log format: rich (default) or json.

Tools

Documents

Tool

Description

list_documents

List documents with optional filtering; OCR content stripped by default (include_content=True for full text). notes[].note and custom_fields[].value are always stripped on listings. Use single-document endpoints to fetch them.

search_documents

Full-text search across documents; OCR content stripped by default (include_content=True for full text). notes[].note and custom_fields[].value are always stripped on search hits.

get_document

Retrieve a document by ID; OCR content stripped by default (include_content=True for full text)

get_document_content

Get the extracted text content of a document

get_document_thumbnail

Get the thumbnail image of a document

get_document_metadata

Get metadata (original filename, checksums, etc.)

get_document_notes

List notes attached to a document

get_document_history

Get the audit history of a document

get_document_suggestions

Get AI-generated tag/correspondent/type suggestions

update_document

Update document fields (title, tags, correspondent, etc.); response OCR content stripped by default (include_content=True to retain)

delete_document

Delete a document

upload_document

Upload a new document for processing

bulk_edit_documents

Apply a bulk operation to multiple documents

add_document_note

Add a note to a document

delete_document_note

Delete a note from a document

get_document, list_documents, search_documents, and update_document include a web_url field pointing to the document in the Paperless UI, such as https://paperless.example.com/documents/42/. Set PAPERLESS_MCP_PAPERLESS_PUBLIC_URL if the public URL differs from the API URL; otherwise the API URL is used.

Paginated tools return next/previous as bare page=N markers (never full URLs). Callers pass page=N explicitly when walking pages. None means no further page.

Tags

Tool

Description

list_tags

List all tags

get_tag

Get a tag by ID

create_tag

Create a new tag

update_tag

Update a tag

delete_tag

Delete a tag

bulk_edit_tags

Bulk edit tags

Correspondents

Tool

Description

list_correspondents

List all correspondents

get_correspondent

Get a correspondent by ID

create_correspondent

Create a new correspondent

update_correspondent

Update a correspondent

delete_correspondent

Delete a correspondent

bulk_edit_correspondents

Bulk edit correspondents

Document Types

Tool

Description

list_document_types

List all document types

get_document_type

Get a document type by ID

create_document_type

Create a new document type

update_document_type

Update a document type

delete_document_type

Delete a document type

bulk_edit_document_types

Bulk edit document types

Custom Fields

Tool

Description

list_custom_fields

List all custom fields

get_custom_field

Get a custom field by ID

create_custom_field

Create a new custom field

update_custom_field

Update a custom field

delete_custom_field

Delete a custom field

Observability

Tool

Description

list_storage_paths

List storage paths

get_storage_path

Get a storage path by ID

list_saved_views

List saved views

get_saved_view

Get a saved view by ID

list_share_links

List share links (includes share_url; uses PAPERLESS_MCP_PAPERLESS_PUBLIC_URL if set, otherwise PAPERLESS_MCP_PAPERLESS_URL)

get_share_link

Get a share link by ID (includes share_url; uses PAPERLESS_MCP_PAPERLESS_PUBLIC_URL if set, otherwise PAPERLESS_MCP_PAPERLESS_URL)

list_tasks

List background tasks. Paginates (page, page_size up to 100). By default returns only unacknowledged tasks. Pass include_acknowledged=True to include acknowledged tasks, or acknowledged=True to return only acknowledged ones.

get_task

Get a task by ID

wait_for_task

Wait until a task completes

get_statistics

Get server statistics

get_remote_version

Get the Paperless-NGX version

Resources

URI

Description

config://paperless

Server configuration snapshot

stats://paperless

Document statistics

remote-version://paperless

Paperless-NGX version

tags://paperless

All tags

correspondents://paperless

All correspondents

document-types://paperless

All document types

custom-fields://paperless

All custom fields

storage-paths://paperless

All storage paths

saved-views://paperless

All saved views

tasks://paperless

All background tasks

paperless://documents/{document_id}

Document by ID

paperless://documents/{document_id}/content

Extracted text content

paperless://documents/{document_id}/metadata

File metadata

paperless://documents/{document_id}/notes

Document notes

paperless://documents/{document_id}/history

Audit history

paperless://documents/{document_id}/thumbnail

Thumbnail image

paperless://documents/{document_id}/preview

PDF preview

paperless://documents/{document_id}/download

Original file download

Shared template variables

Inherited from fastmcp-pvl-core across all services built on the template:

Variable

Default

Description

PAPERLESS_MCP_KV_STORE_URL

file:///data/state

Persistent-state backend URL shared by every pvl-core subsystem that needs state. memory:// is in-process and lost on restart; file:///path persists on one server; redis://, dynamodb:// and mongodb:// each need their matching extra. When unset, defaults to file:///data/state (the volume family Docker images mount), or to memory://; with a warning; on a host where that directory is not usable.

FASTMCP_LOG_LEVEL

INFO

Log level for FastMCP internals and app loggers (DEBUG / INFO / WARNING / ERROR / CRITICAL). The -v CLI flag overrides to DEBUG.

FASTMCP_ENABLE_RICH_LOGGING

true

Set false for plain or structured JSON log output.

Domain-specific variables go below under Domain configuration.

Authentication

Callers authenticate via a bearer token or OIDC (mutually exclusive). See the Authentication guide for setup, mapped multi-subject tokens, OIDC, and troubleshooting.

Post-scaffold checklist

After copier copy and gh repo create --push:

  1. Fill in the DOMAIN blocks (every section marked with a DOMAIN sentinel comment) in this README and in CLAUDE.md. The GENERATED-ENV-TABLE-* regions are not DOMAIN blocks; the config generator owns them and rewrites them on every run.

  2. Configure GitHub secrets (see below).

  3. Install dev + docs tooling: uv sync --all-extras --all-groups.

  4. Install pre-commit hooks: uv run pre-commit install.

  5. Run the gate locally: uv run pytest -x -q && uv run ruff check --fix . && uv run ruff format . && uv run mypy src/ tests/.

  6. Push the first commit. CI should be green.

GitHub secrets

CI workflows reference three repository secrets. Configure them via Settings → Secrets and variables → Actions or with gh secret set:

Secret

Used by

How to generate

RELEASE_TOKEN

release-prepare.yml, release.yml, release-notes.yml, copier-update.yml, renovate.yml, bootstrap.yml

Fine-grained PAT at https://github.com/settings/personal-access-tokens/new with contents: write, pull_requests: write, and administration: write (bootstrap applies the repository rulesets + auto-merge). Must belong to a repository admin: the shipped rulesets grant bypass to the admin role, and the release tag + GitHub release that knope creates after a release pull request merges rely on it (pull requests the token opens also need it so their CI runs). Scoped to this repo.

CODECOV_TOKEN

ci.yml

https://codecov.io: sign in with GitHub and add the repo. The upload token is on its settings page.

CLAUDE_CODE_OAUTH_TOKEN

claude.yml, claude-code-review.yml, release-notes.yml

Run claude setup-token locally and paste the result.

gh secret set RELEASE_TOKEN
gh secret set CODECOV_TOKEN
gh secret set CLAUDE_CODE_OAUTH_TOKEN

Dependency updates are handled by Renovate (renovate.yml), which reuses RELEASE_TOKEN. It maintains uv.lock and auto-merges patch/minor bumps once the CI Success check is green; bootstrap.yml enables auto-merge and applies the repository rulesets (.github/rulesets/) on first push. See Repository Protection for the per-branch posture and bypass model. GitHub Actions are updated in the copier template and arrive via copier update, not per-repo.

GITHUB_TOKEN is auto-provided; no action needed.

Local development

The PR gate (matches CI):

uv run pytest -x -q                                  # tests
uv run ruff check --fix . && uv run ruff format .    # lint + format
uv run mypy src/ tests/                              # type-check

Pre-commit runs a subset of the gate on each commit; see .pre-commit-config.yaml for details, or CLAUDE.md for the full Hard PR Acceptance Gates.

Troubleshooting

Moving a scaffolded project

uv sync creates .venv/bin/* scripts with absolute shebangs pointing at the venv Python. If you move the repo after scaffolding (mv /old/path /new/path), uv run pytest fails with ModuleNotFoundError: No module named 'fastmcp' because the stale shebang resolves to a different interpreter than the venv's site-packages.

Fix:

rm -rf .venv
uv sync --all-extras --all-groups

uv run python -m pytest also works as a one-shot workaround (bypasses the stale entry-script shim).

uv.lock refresh after copier update

When copier update introduces new dependencies (such as a new extra added to pyproject.toml.jinja), the CI install step runs uv sync --locked, which fails against a stale lockfile. Run uv lock locally and commit the refreshed uv.lock alongside accepting the copier-update PR.

CI installs with --locked (and the review workflow with --frozen) so no job ever rewrites uv.lock in its own workspace: a job that re-locks hides the drift it just repaired, and a dirty workspace breaks any later git checkout in the same job. Lockfile drift then shows up as a red install step with a clear message, not as a silent mutation.

Domain configuration

Domain environment variables use the PAPERLESS_MCP_ prefix:

Variable

Default

Required

Description

PAPERLESS_MCP_PAPERLESS_URL

(none)

Yes

Base URL of the Paperless-NGX REST API, without a trailing slash.

PAPERLESS_MCP_API_TOKEN

(none)

Yes

Paperless service-account token used for outbound API requests.

PAPERLESS_MCP_HTTP_TIMEOUT_SECONDS

30.0

No

Per-request HTTP timeout in seconds.

PAPERLESS_MCP_HTTP_RETRIES

2

No

Retries for idempotent requests after network errors or 5xx responses.

PAPERLESS_MCP_DEFAULT_PAGE_SIZE

25

No

Default page size for list tools, from 1 through 100.

PAPERLESS_MCP_PAPERLESS_PUBLIC_URL

(none)

No

Public Paperless UI URL for user-visible links; defaults to PAPERLESS_URL.

Domain-config fields are composed inside src/paperless_mcp/config.py between the CONFIG-FIELDS-START / CONFIG-FIELDS-END sentinels; env reads go through fastmcp_pvl_core.env(_ENV_PREFIX, "SUFFIX", default) so naming stays consistent, and field invariants go in __post_init__ between the CONFIG-VALIDATE-START / CONFIG-VALIDATE-END sentinels. Each field's metadata help and tags generate the table above directly, so keep them accurate and complete.

Key design decisions

  • Read-only gating at startup, not per-call. PAPERLESS_MCP_READ_ONLY=true skips registration of every mutating tool so they simply are not part of the advertised tool surface. Clients cannot invoke a write that will be refused.

  • HTTP layer retries idempotent reads only. PAPERLESS_MCP_HTTP_RETRIES applies to GETs on 5xx/network errors; writes never retry automatically, to avoid double-applying bulk edits or uploads.

  • Tool icons come from Lucide. Every tool carries a Lucide icon hint so MCP clients that render icons (Claude Desktop) get a coherent visual surface. See src/paperless_mcp/tools/_icons.py.

  • Models accept unknown upstream fields. Pydantic models use lenient validation for list-endpoint responses so newer Paperless-NGX versions do not break the client (the Document.some_future_paperless_field test pins this behaviour).

  • No prompts ship in v1. prompts.py is intentionally empty; prompts land as concrete user-workflow patterns emerge in practice.

Available Tools

50 tools
add_document_noteB

Append a note to a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYes
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
noteNo
userNo
createdYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate non-read-only, non-destructive, non-idempotent behavior. The description adds no extra behavioral context, but does not contradict 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?

Single efficient sentence with no unnecessary words. Perfectly concise.

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 append operation with an output schema available, the description is largely sufficient. Lacks details on error conditions but overall complete.

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?

With 0% schema description coverage, the description must compensate but fails to explain the note parameter (e.g., length, format) or the document_id beyond types. No added value over 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 clearly states the action (append) and the target (a document). It effectively distinguishes from sibling tools like delete_document_note and get_document_notes.

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 provided on when to use this tool versus alternatives, such as updating a document's notes field. Also missing prerequisites like document existence.

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

bulk_edit_correspondentsC
Destructive

Apply a bulk operation to a set of correspondents.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
operationYes
parametersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true, but the description adds no behavioral context beyond 'applying a bulk operation.' It does not disclose potential side effects or consequences, leaving the agent uninformed.

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

Conciseness2/5

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

The description is a single sentence, which is concise, but it is too vague to be useful. It does not earn its place because it could apply to many different tools.

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

Completeness1/5

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

Given the tool's complexity (bulk operation with freeform parameters) and the presence of an output schema, the description is severely incomplete. The agent has no information about valid operations, parameter structure, or return values.

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?

Schema coverage is 0%, and the description fails to explain any parameters. 'operation' is a freeform string with no allowed values specified, and 'parameters' is undocumented. The description adds no value to the schema.

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

Purpose3/5

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

The description states 'Apply a bulk operation to a set of correspondents,' which indicates a verb and resource but does not specify what the bulk operation does (e.g., delete, update). It vaguely distinguishes from singular tools like update_correspondent.

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 provided on when to use this tool versus alternatives (e.g., update_correspondent, delete_correspondent). There is no mention of prerequisites or typical use cases.

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

bulk_edit_documentsC
Destructive

Apply a bulk operation to a set of documents.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
operationYes
parametersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.3/5.0
Behavior2/5

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

Annotations already indicate destructive and non-read-only behavior. The description adds no additional behavioral context beyond 'bulk operation', such as potential side effects or operational constraints.

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

Conciseness2/5

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

Extremely brief, but at the cost of missing essential information. Not efficiently structured; a single under-specified sentence does not earn its place.

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

Completeness1/5

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

Despite having an output schema and annotations, the description provides no context about return values, batch limits, atomicity, or differentiation from sibling tools. Severely incomplete for a complex tool.

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?

Schema description coverage is 0%, but the description does not explain any of the parameters (ids, operation, parameters). The agent must rely solely on the schema, which lacks descriptive 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 clearly states the tool applies a bulk operation to documents, which is a specific verb and resource. It distinguishes from bulk_edit_correspondents and similar siblings.

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 provided on when to use this tool versus alternative tools like update_document or delete_document. There is no context or exclusions.

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

bulk_edit_document_typesC
Destructive

Apply a bulk operation to a set of document types.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
operationYes
parametersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2/5.0
Behavior2/5

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

The description minimally adds to the annotations by calling the operation a 'bulk operation,' but it does not explain what actions are performed, whether it is destructive (already hinted by destructiveHint=true), or what side effects occur. It does not provide behavioral 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.

Conciseness2/5

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

While the description is short, it is under-specified and lacks essential details, making it insufficient rather than appropriately concise. It does not front-load key discriminating information.

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

Completeness1/5

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

Given three parameters and an output schema, the description is extremely incomplete. It does not describe return values, the nature of the operation, or parameter constraints, leaving the agent without enough context to use the tool correctly.

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?

Schema description coverage is 0%, yet the description does not explain the meaning or expected values of any parameters (ids, operation, parameters). The agent receives no additional semantic information about how to use these parameters.

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

Purpose3/5

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

The description states 'Apply a bulk operation to a set of document types,' which identifies a verb and resource but fails to specify what kinds of operations are possible (e.g., delete, update, etc.). It does not differentiate from sibling bulk_edit tools like bulk_edit_correspondents 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 Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as update_document_type or other bulk_edit tools. There is no mention of use cases, prerequisites, or exclusions.

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

bulk_edit_tagsC
Destructive

Apply a bulk operation to a set of tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
operationYes
parametersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2/5.0
Behavior2/5

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

The annotations indicate destructiveHint=true and readOnlyHint=false, so the tool is potentially destructive. The description adds no behavioral context beyond this, such as whether changes are reversible or what happens to tag associations.

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

Conciseness2/5

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

The description is a single sentence, which is concise but too vague. It lacks structure and fails to front-load key details such as supported operations or constraints.

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

Completeness1/5

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

Despite having an output schema, the description is extremely thin. It does not cover error conditions, side effects, or the meaning of 'bulk operation,' making it insufficient for correct tool invocation.

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?

Schema description coverage is 0%, meaning the description must explain parameters, but it does not. It fails to clarify what 'ids,' 'operation,' or 'parameters' represent, leaving the agent to infer from names alone.

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

Purpose3/5

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

The description states 'Apply a bulk operation to a set of tags,' which identifies the action and resource, distinguishing it from single-tag operations. However, it does not specify what kind of bulk operations are supported (e.g., delete, rename), leaving ambiguity.

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 guidance on when to use this tool versus alternatives such as delete_tag or update_tag. The description does not mention any prerequisites, context, or exclusions.

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

create_correspondentC

Create a new correspondent.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
slugNo
matchNo
ownerNo
document_countNo
is_insensitiveNo
user_can_changeNo
matching_algorithmNo
last_correspondenceNo

TDQS

C2.4/5.0
Behavior2/5

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

Annotations indicate it is not readOnly, not idempotent, and not destructive, which is consistent with creation. However, the description adds no further behavioral context (e.g., side effects, rate limits, or required permissions).

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

Conciseness3/5

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

The description is very short (one sentence), which is concise, but it omits important information. It is not front-loaded with key details and fails to earn its place given the lack of value.

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?

Given the tool's complexity (nested object, multiple optional fields), the description is incomplete. It does not mention the output schema, nor does it cover edge cases or required fields beyond what's in the schema.

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?

Schema description coverage is 0%, but the description does not explain the 'body' parameter or its nested fields (name, match, etc.). The description adds no meaning beyond the schema, leaving the agent without guidance on how to use the parameters.

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?

Description clearly states 'Create a new correspondent', providing a specific verb and resource. However, it does not differentiate from siblings like 'update_correspondent' or 'bulk_edit_correspondents', missing an opportunity to clarify scope.

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 provided on when to use this tool versus alternatives such as 'update_correspondent' or 'bulk_edit_correspondents'. The description lacks context-specific recommendations.

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

create_custom_fieldA

Create a new custom field.

extra_data depends on data_type:

  • string, longtext, integer, boolean, float, date, url, documentlink — unused; omit or pass null.

  • monetary — optional {"default_currency": "USD"} (ISO-4217).

  • select — extra_data required: {"select_options": [{"label": "Low"}, {"label": "Medium"}]}. Paperless assigns each option a stable id on creation.

Unknown shapes are rejected by Paperless with a 400.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
data_typeYes
extra_dataNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already mark this as not read-only, not destructive, and not idempotent. The description adds that Paperless rejects unknown extra_data shapes with a 400 error, which is helpful context for error handling. This is beyond annotations but still limited.

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 efficiently structured with a clear purpose sentence followed by bullet points for extra_data. It is front-loaded and each line adds value, though it could be slightly more concise.

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 presence of an output schema (handling return values), the description covers input parameters well. It misses usage context and behavioral details beyond error conditions, but overall it is adequate for a create tool.

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

Parameters5/5

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

With schema description coverage at 0%, the description compensates fully: it explains how extra_data depends on data_type, providing detailed examples for each type (e.g., monetary, select). This adds significant meaning beyond the bare 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 description clearly states 'Create a new custom field,' which is a specific verb+resource. However, it does not explicitly distinguish from sibling create tools like create_tag or create_correspondent, though the name makes it obvious.

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 when a new custom field is needed, but it provides no guidance on when to choose this tool over alternatives or any prerequisites. No exclusions or context are given.

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

create_document_typeC

Create a new document type.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
slugNo
matchNo
ownerNo
document_countNo
is_insensitiveNo
user_can_changeNo
matching_algorithmNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already indicate it is a write operation (readOnlyHint=false) and non-destructive, but the description adds no further context such as required permissions, side effects, or limitations. The brief description offers minimal behavioral insight beyond the literal action.

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

Conciseness3/5

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

The description is a single sentence, which is concise and front-loaded. However, it is too brief to be fully effective; while it earns its place by stating the purpose, it sacrifices completeness for brevity.

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?

Given the complexity of the input schema (nested object with required and optional fields) and the presence of an output schema, the description is insufficient. It fails to guide the agent on what the body parameter should contain or the expected outcome.

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?

Schema description coverage is 0%, and the description does not explain any of the parameters (body, name, match, etc.). It adds no meaning beyond what the raw schema provides, leaving the agent with no guidance on how to fill in the 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 'Create a new document type' clearly states the action (create) and the resource (document type), distinguishing it from sibling tools like create_correspondent or create_tag. It is specific 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 Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., update_document_type or bulk_edit_document_types). There are no prerequisites, context, or exclusions mentioned.

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

create_tagC

Create a new tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
slugNo
colorNo
matchNo
ownerNo
colourNo
is_inbox_tagNo
document_countNo
is_insensitiveNo
user_can_changeNo
matching_algorithmNo

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false (write operation) and destructiveHint=false, so the description does not need to restate that. However, it adds no extra behavioral context such as required permissions, what happens on duplicate names, or rate limits. The description is minimal and contributes no additional transparency beyond annotations.

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

Conciseness3/5

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

The description is extremely concise (four words), but it is too brief to be informative. Conciseness should not sacrifice necessary details. A single line is appropriate, but it should include key usage hints.

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?

Given the tool's complexity (nested object with 6 parameters and no schema descriptions), the description is woefully incomplete. Although an output schema exists, the description does not mention what the tool returns (e.g., the created tag object). The description fails to provide essential context for correct invocation.

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?

Schema description coverage is 0%, meaning the input schema lacks any property descriptions. The description 'Create a new tag' does not compensate by explaining any parameters, leaving the six properties (name, color, match, is_inbox_tag, is_insensitive, matching_algorithm) completely undocumented. This is a critical gap.

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 exactly what the tool does: 'Create a new tag.' It uses a specific verb and resource, clearly distinguishing it from sibling tools like create_correspondent or create_document_type. However, it does not elaborate on any specific scope or constraints, missing an opportunity 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 Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as bulk_edit_tags or update_tag. There is no mention of prerequisites, context, or exclusions, leaving the agent without decision-support.

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

delete_correspondentC
DestructiveIdempotent

Delete a correspondent.

ParametersJSON Schema
NameRequiredDescriptionDefault
correspondent_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, but the description adds no additional context about the permanence of deletion, cascading effects, or required permissions. The description is too minimal to provide behavioral transparency beyond what annotations already convey.

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

Conciseness3/5

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

The description is extremely concise (4 words) but front-loaded. However, it is too brief to be fully informative; it could include more detail without losing conciseness.

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?

Despite the tool being simple, the description omits crucial context: that deletion is permanent, that it requires a valid correspondent ID, and what happens to associated data. The output schema exists but is not described, so the agent lacks complete understanding.

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?

With schema description coverage at 0%, the description does not explain the role of correspondent_id or any constraints. The single parameter is left entirely to the schema, which only specifies type and requiredness.

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 'Delete a correspondent.' clearly states the verb (Delete) and the resource (correspondent), distinguishing it from sibling tools for creating, updating, getting, listing, or bulk editing correspondents.

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 on when to use this tool versus alternatives. It does not mention prerequisites, such as whether the correspondent must not be associated with documents, or when to use update_correspondent instead.

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

delete_custom_fieldC
DestructiveIdempotent

Delete a custom field.

ParametersJSON Schema
NameRequiredDescriptionDefault
field_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior3/5

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

The annotations already indicate destructiveHint=true and idempotentHint=true, so the description need not repeat these. However, it adds no extra behavioral context, such as permanence or cascade effects, which would be helpful. With annotations covering safety, a score of 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.

Conciseness3/5

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

The description is extremely concise at 4 words, but it sacrifices substance for brevity. While no word is wasted, the minimalism leaves out essential information that should be included, earning a middle score.

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?

Given the lack of parameter documentation and absence of usage context, the description is incomplete for an agent to invoke the tool reliably. The output schema exists but is not referenced, and the description fails to provide enough context for safe usage.

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 input schema has 0% description coverage, and the tool description does not clarify the purpose or source of the required parameter 'field_id'. An agent would not know it represents the custom field's ID or how to obtain it, making this a critical gap.

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 'Delete a custom field' clearly identifies the verb (delete) and resource (custom field), making the tool's purpose unambiguous. It distinguishes from sibling tools like delete_correspondent or delete_document, which target other entities.

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 usage guidance is provided. The description does not specify when to use this tool over alternatives, such as deactivating a custom field instead of deleting it, or any prerequisites like ensuring the field is not in use.

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

delete_documentC
DestructiveIdempotent

Delete a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description merely restates 'Delete' without adding context such as permanence or side effects. It adds no value 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.

Conciseness3/5

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

The description is minimal and to the point, but overly brief. It is concise in word count but lacks necessary detail, making it merely adequate.

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 delete operation, the description fails to mention outcomes like 'permanently removed' or 'cannot be undone'. Despite having an output schema, the description does not provide enough context for the agent to understand the tool's full behavior.

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 0% description coverage for the parameter 'document_id'. The description does not explain what the parameter represents, leaving the agent without semantic understanding of the input.

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 'Delete a document.' clearly states the verb and the resource. It distinguishes from sibling tools that delete other entities like correspondents or tags.

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 on when to use this tool versus alternatives. There is no mention of prerequisites, conditions, or cases where deletion might be inappropriate.

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

delete_document_noteC
DestructiveIdempotent

Remove a note from a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYes
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

The description adds no behavioral disclosure beyond the annotations. While annotations indicate destructive and idempotent behavior, the description does not explain outcomes like error handling or 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?

The description is a single, concise sentence with no unnecessary words. It is front-loaded and efficiently states the tool's purpose.

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?

Despite having an output schema (not in input), the description fails to cover parameter details, usage guidance, or behavioral context. For a simple deletion tool, it provides minimal completeness.

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?

With 0% schema description coverage, the description must explain parameters, but it says nothing about document_id or note_id. The user is left to infer their meaning from the tool name.

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 'Remove a note from a document' clearly specifies the action (remove) and the resource (note from a document), distinguishing it from siblings like add_document_note or delete_document.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool vs alternatives (e.g., deleting all notes with a bulk operation or removing a document). The description lacks usage context or exclusions.

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

delete_document_typeC
DestructiveIdempotent

Delete a document type.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_type_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

The description adds no behavioral detail beyond what annotations already provide (destructiveHint=true, idempotentHint=true, readOnlyHint=false). It does not disclose any additional traits such as cascading effects or required permissions.

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 extremely concise (one sentence) and front-loaded. It is appropriate for a simple operation, though slightly more detail would not harm conciseness.

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?

Given the tool's simplicity (single required parameter) and the existence of an output schema (not shown), the description is minimally adequate. However, it lacks any mention of return value or side effects beyond the destructive annotation.

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?

Schema description coverage is 0%, and the description does not explain the document_type_id parameter or its format. The schema alone only specifies it as an integer with no additional context.

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 'delete' and the resource 'document type', which is specific and distinguishes it from sibling tools like create_document_type or update_document_type. However, it could be slightly more explicit about permanence.

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 provided on when to use this tool versus alternatives. The description does not mention prerequisites, consequences, or context for deletion.

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

delete_tagC
DestructiveIdempotent

Delete a tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. The description adds no additional behavioral context beyond stating the action. It does not contradict annotations, but also does not enhance understanding.

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

Conciseness3/5

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

The description is extremely short (4 words), which is concise but at the cost of omitting essential details. It could be slightly longer to include parameter info or usage notes.

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?

Given the tool has one required parameter and no output schema details provided, the description is too minimal. It lacks information about success/failure behavior, error conditions, and side effects, which are critical for a destructive operation.

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 input schema has a single required parameter 'tag_id' with no description and 0% schema coverage. The description does not explain the parameter's meaning, format, or constraints, leaving the agent to guess.

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 'Delete a tag.' clearly identifies the action (delete) and resource (tag). It distinguishes from sibling tools like create_tag, update_tag, and list_tags.

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 provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. An agent would need to infer usage from the tool name alone.

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

get_correspondentA
Read-onlyIdempotent

Fetch a correspondent by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
correspondent_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
slugNo
matchNo
ownerNo
document_countNo
is_insensitiveNo
user_can_changeNo
matching_algorithmNo
last_correspondenceNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and no destructiveness. The description adds no further behavioral details beyond the basic fetch action, which is acceptable given the 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?

Extremely concise single sentence with no waste. The key 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 retrieval tool with an existing output schema and annotations covering safety and idempotency, the description is mostly complete. It could mention error handling (e.g., behavior when ID not found), but overall 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%, and the description does not elaborate on the correspondent_id parameter. However, the parameter name is self-explanatory, and the schema provides type and required status. Minimal added 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 'Fetch a correspondent by ID' clearly states the action (fetch) and the resource (a correspondent) using a specific identifier. It distinguishes from siblings like create_correspondent or bulk_edit_correspondents.

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 on when to use this tool versus alternatives like list_correspondents or search_documents. No prerequisites or context provided.

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

get_custom_fieldB
Read-onlyIdempotent

Fetch a custom field by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
field_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
data_typeYes
extra_dataNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds no extra behavioral context beyond 'fetch', which aligns with annotations.

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

Conciseness5/5

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

One sentence with no wasted words. Perfectly concise for a simple retrieval tool.

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 simplicity, annotations, and presence of output schema, description sufficiently covers tool behavior. Could mention return object name but not necessary.

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 0%, but description clarifies field_id is the ID. With only one self-explanatory parameter, this is adequate but minimal.

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?

Description uses specific verb 'fetch' and resource 'custom field' with key input 'by ID'. Clear purpose but does not differentiate from sibling tools like list_custom_fields.

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 on when to use this tool vs alternatives (e.g., list_custom_fields). Description only states basic operation without context.

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

get_documentA
Read-onlyIdempotent

Fetch one document by ID.

By default, the OCR content is stripped to keep responses small. Pass include_content=True for the full text, or call get_document_content to retrieve just the text.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes
include_contentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
tagsNo
addedNo
notesNo
ownerNo
titleYes
contentNo
createdYes
web_urlNo
modifiedNo
page_countNo
created_dateNo
storage_pathNo
correspondentNo
custom_fieldsNo
document_typeNo
user_can_changeNo
archived_file_nameNo
original_file_nameNo
archive_serial_numberNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already include readOnlyHint, idempotentHint, etc. The description adds value by disclosing that OCR content is stripped by default and how to retrieve it, which is beyond the structured annotations. No contradictions.

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 first sentence states the core purpose, the second explains key behavior and alternatives. Perfectly concise.

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?

Given the tool's simplicity (fetch by ID), with output schema present and annotations covering safety, the description is complete. It covers the main behavioral nuance (content stripping). No gaps for an agent to use 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 compensates by explaining that include_content controls OCR content inclusion and the default behavior. However, document_id lacks additional context beyond being an identifier.

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 fetches one document by ID, using specific verb 'fetch' and resource 'one document by ID'. It effectively distinguishes from sibling tools 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?

Provides clear guidance on when to use this tool versus alternatives: for full text, either pass include_content=True or use get_document_content. It explains the default behavior implicitly guiding usage, though it lacks explicit when-not-to-use statements.

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

get_document_contentA
Read-onlyIdempotent

Return the OCR'd text content of a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, so the description adds minimal context beyond specifying the content type ('OCR'd text'). No contradictions; description aligns with annotations.

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

Conciseness5/5

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

The description is a single sentence of 6 words, containing no filler or redundancy. Every word adds value, making it highly concise 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?

Given the tool's simplicity (one parameter, no nested objects), the description adequately states what it returns. Annotations cover safety, and an output schema exists (not shown). Minor gap: missing explanation of the parameter, but overall complete for the tool's purpose.

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 mention the only parameter (document_id) or add any meaning beyond its name. Although the parameter name is self-explanatory, the description fails to compensate for the lack of schema descriptions.

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 ('Return') and resource ('OCR'd text content of a document'). It clearly distinguishes from sibling tools like get_document (metadata) and get_document_metadata, as it focuses on the textual content.

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?

No explicit guidance on when to use or alternatives is provided. However, the tool's purpose is straightforward (retrieve OCR text), and usage is implied. There are no exclusions or context about when not to use it.

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

get_document_historyA
Read-onlyIdempotent

Return the audit history for a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description is consistent but adds no extra behavioral details 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?

A single sentence that is efficient and contains no superfluous information. The description is well-structured and 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?

Given the existence of an output schema, explanation of return values is not needed. However, the description omits any context about permissions, date range, or result limits, which could be helpful for a granular 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?

The single parameter document_id is self-explanatory, but with 0% schema description coverage, the description does not add any extra meaning or format guidance. It is minimally adequate.

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 returns audit history for a document, using a specific verb and resource. It distinguishes from siblings like get_document or get_document_notes.

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 on when to use this tool versus alternatives, such as get_document for current state or get_document_notes for user comments. Missing context on prerequisites or limitations.

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

get_document_metadataA
Read-onlyIdempotent

Return technical metadata for a document (checksums, filenames, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
langNo
archive_sizeNo
original_sizeNo
media_filenameNo
archive_checksumNo
archive_metadataNo
original_checksumNo
original_filenameNo
original_metadataNo
original_mime_typeNo
has_archive_versionNo
archive_media_filenameNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior; description adds specificity on returned metadata types, but could mention prerequisites like document existence.

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, no wasted words; front-loaded with verb and resource, efficiently conveys purpose.

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?

Output schema covers return values; description provides examples (checksums, filenames). Missing contextual details like error conditions or document existence requirement, but acceptable for a simple tool.

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 elaborate on the document_id parameter beyond its name, providing no additional 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?

Description clearly states it returns 'technical metadata' such as checksums and filenames, distinguishing it from siblings like get_document (general metadata) or 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 Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives; implies it's for technical metadata but fails to specify exclusions or compare with siblings like get_document.

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

get_document_notesA
Read-onlyIdempotent

Return notes attached to a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint=false, so the description adds no further behavioral details. The description is adequate but not enhanced beyond annotations.

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

Conciseness4/5

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

Single sentence of 5 words is very concise. No wasted text, but could include slightly more context without harming conciseness.

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 simplicity (one parameter, read-only) and the presence of an output schema, the description is sufficiently complete. It specifies the resource (notes) and action (return), leaving details to the output schema.

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 document_id parameter beyond its implied role. While the parameter is simple, the description adds minimal semantic value over the parameter name and type.

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 ('Return') and resource ('notes attached to a document'). It effectively distinguishes from sibling tools like add_document_note and delete_document_note, which are mutation operations.

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?

No explicit guidance on when to use this tool versus alternatives, but the context of readOnlyHint and sibling names (e.g., add_document_note) implies usage for reading notes. Missing explicit exclusions or prerequisites.

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

get_document_suggestionsA
Read-onlyIdempotent

Return Paperless's classifier suggestions for a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
tagsNo
datesNo
storage_pathsNo
correspondentsNo
document_typesNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds that the tool returns 'classifier suggestions', which is useful context but does not disclose additional behavioral traits beyond what annotations provide. There is no contradiction with annotations.

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

Conciseness5/5

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

The description is a single sentence that directly states the tool's purpose. It is front-loaded and concise, with no wasted words. Every part is essential.

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 is a simple read-only query with one parameter and an output schema (which eliminates the need to describe return values), the description is largely complete. However, it could benefit from a brief note about the nature of suggestions or any prerequisites, but the annotations and schema fill most gaps.

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, so the description must compensate. However, the description only implicitly mentions 'for a document' without explaining the document_id parameter's format, constraints, or relationship to the tool's behavior. This is insufficient for a tool with a single undocumented parameter.

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 returns classifier suggestions for a document, with a specific verb 'Return' and resource 'classifier suggestions'. This distinguishes it from sibling tools like get_document, get_document_metadata, etc., which have different purposes.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention when not to use it or suggest sibling tools for different scenarios. The context signals show many similar get tools, but the description offers no differentiation criteria.

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

get_document_thumbnailA
Read-onlyIdempotent

Return the document's thumbnail as inline image content.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's addition of 'inline image content' provides useful but minimal behavioral context. It does not discuss edge cases like missing thumbnails or response format details, so the added value is moderate.

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, concise sentence that efficiently conveys the tool's purpose. It is front-loaded with the key action and result, with no unnecessary words.

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 rich annotations and a single parameter, the description covers the core functionality well. However, it omits potential error conditions (e.g., document not found, no thumbnail) which could be helpful but are not critical given the annotations and context.

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 only parameter (document_id) is not explained in the description. The parameter name is self-explanatory, but the description fails to add any meaning beyond the schema, such as clarifying it's an integer identifier. With one parameter and low coverage, the description should compensate but 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 tool returns the document's thumbnail as inline image content, specifying the verb (return) and resource (document's thumbnail). This distinguishes it from siblings like get_document_content (returns full content) and get_document (returns metadata).

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 when a thumbnail is needed, but does not explicitly say when to use it vs alternatives or provide exclusions. Given the clear purpose, the usage context is understood but not articulated.

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

get_document_typeA
Read-onlyIdempotent

Fetch a document type by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_type_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
slugNo
matchNo
ownerNo
document_countNo
is_insensitiveNo
user_can_changeNo
matching_algorithmNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds no behavioral context beyond what annotations convey. For a tool with rich annotations, this is adequate but not exceptional.

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?

Extremely concise: 6 words, no redundant information. Front-loaded with verb and object. Every word is necessary.

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 simplicity (one required integer parameter) and the presence of an output schema, the description adequately covers the essentials. It could mention that the result is the full document type object, but this is implied by the tool name and output schema.

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 description should clarify parameter meaning. However, it only says 'by ID' without specifying that the ID is an integer or explaining its role. The schema already names 'document_type_id' and type integer, so minimal added 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?

Description clearly states verb 'Fetch', resource 'document type', and method 'by ID'. This unambiguously identifies the tool's function and distinguishes it from sibling tools like list_document_types.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as list_document_types or search_documents. The description does not provide any context about prerequisites or exclusions.

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

get_remote_versionA
Read-onlyIdempotent

Fetch Paperless version info.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
versionYes
update_availableNo

TDQS

A3.6/5.0
Behavior2/5

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

The description does not disclose any behavioral traits beyond what annotations already provide. Annotations indicate readOnlyHint, idempotentHint, so the tool is safe and repeatable, but the description adds no additional context like return format or 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?

Single sentence, no superfluous words. Maximally concise while conveying the core purpose.

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 version fetch with an output schema, the description is adequate. It does not detail the output structure, but the output schema covers that. Minor improvement could mention that it returns the remote Paperless version string.

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?

No parameters exist, so the description need not add parameter semantics. Baseline is 4 for zero 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?

Clearly states the tool fetches Paperless version info. The verb 'Fetch' and resource 'Paperless version info' are specific and precise. Among sibling tools focused on CRUD operations on documents and entities, this tool's purpose is distinct 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 Guidelines2/5

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

No guidance on when to use this tool versus alternatives. While it's likely the only version-checking tool, the description does not mention any context or prerequisites (e.g., checking version before API calls).

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

get_saved_viewA
Read-onlyIdempotent

Fetch a saved view by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
view_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
ownerNo
page_sizeNo
sort_fieldNo
filter_rulesNo
sort_reverseNo
show_in_sidebarNo
show_on_dashboardNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description 'Fetch' aligns with these. No additional behavioral context is added beyond what annotations provide, such as error conditions or permissions.

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

Conciseness4/5

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

One short sentence with no waste. However, it could include additional context without being overly verbose, so it is efficient but slightly under-specified.

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 tool with a single parameter, strong annotations, and an output schema, the description is nearly complete. It lacks mention of error handling or typical usage scenarios, but overall it suffices.

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 only says 'by ID' without explaining what view_id represents or where to obtain it. It fails to add meaningful context beyond the schema's type definition.

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 clearly states the verb 'Fetch', resource 'saved view', and the method 'by ID'. It distinguishes this from sibling tools like list_saved_views or other get_* tools for different resources.

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 when you have a specific view ID, but does not explicitly state when to use vs alternatives, nor does it mention when not to use it. Context from sibling tools provides some guidance, but the description itself lacks explicit usage guidance.

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

get_server_infoServer InfoA
Read-only

Report wrapper and upstream version info for paperless-mcp. Returns server_name, server_version, core_version (fastmcp-pvl-core), and (when configured) an upstream version block. Useful for verifying a deployment matches the expected build.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the useful conditional detail that the upstream version block appears only 'when configured', but it otherwise provides no deeper behavioral context such as failure modes or configuration prerequisites.

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 crisp sentences: purpose is front-loaded, return fields are named, and the use case is stated. Every sentence earns its place with 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 zero-parameter read-only tool with an output schema, the description covers purpose, return fields, a conditional behavior, and a use case. The only notable gap is the lack of an explicit contrast with the version-related sibling get_remote_version, which would make the selection decision more robust.

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 there is nothing to explain and the description correctly avoids inventing parameter details. This matches the baseline for a zero-parameter tool.

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 ('Report') and a clear resource ('wrapper and upstream version info for paperless-mcp'), then lists the exact returned fields. This makes the tool's purpose very clear, but it does not explicitly differentiate it from the similarly named sibling get_remote_version.

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 statement 'Useful for verifying a deployment matches the expected build' provides a concrete, explicit context for when to call this tool. It does not exclude alternatives or mention get_remote_version, but for a simple read-only info endpoint this is sufficient guidance.

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

get_statisticsA
Read-onlyIdempotent

Fetch collection-level statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
inbox_tagNo
tag_countNo
current_asnNo
character_countNo
documents_inboxNo
documents_totalNo
storage_path_countNo
correspondent_countNo
document_type_countNo
document_file_type_countsNo

TDQS

A4/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. The description adds 'collection-level' context, indicating the scope of data returned. No contradictions.

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, concise sentence with no unnecessary words. It is front-loaded with the key action and resource.

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 zero parameters, a rich annotation set, and an output schema, the description is sufficient. It tells the agent what kind of data to expect (statistics at the collection level).

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?

There are no parameters, and schema coverage is 100%. Baseline for zero parameters is 4, as the description adds no parameter-specific meaning but the schema is fully descriptive.

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 verb 'Fetch' and the resource 'collection-level statistics', which precisely defines the tool's function. It distinguishes itself from sibling tools like get_document or list_documents by focusing on aggregate statistics rather than individual items.

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 provided on when to use this tool versus alternatives (e.g., list_documents for individual items). The description does not mention any prerequisites or context for invocation.

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

get_storage_pathB
Read-onlyIdempotent

Fetch a storage path by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
storage_path_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
pathYes
slugNo
matchNo
ownerNo
document_countNo
is_insensitiveNo
user_can_changeNo
matching_algorithmNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false, covering the safety profile. The description adds no additional behavioral context (e.g., auth requirements, error handling, or response structure beyond what the output schema provides).

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 superfluous words. Every part 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 simple fetch tool with an output schema, the description is adequate but lacks mention of error cases (e.g., ID not found) and does not relate to sibling tools like list_storage_paths. Slightly incomplete given the context of the tool ecosystem.

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?

Schema description coverage is 0%, and the description only says 'by ID' without explaining what a storage path ID is, its format, or any constraints. The single parameter is self-explanatory by name, but the description fails to add meaningful semantics beyond 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 clearly states the verb 'Fetch' and the resource 'storage path', and specifies the identifier 'by ID'. This distinguishes it from sibling tools like list_storage_paths, which lists all storage paths.

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 on when to use this tool versus alternatives such as list_storage_paths. The agent must infer from the name, which is insufficient for optimal tool selection.

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

get_tagA
Read-onlyIdempotent

Fetch a tag by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
slugNo
colorNo
matchNo
ownerNo
colourNo
is_inbox_tagNo
document_countNo
is_insensitiveNo
user_can_changeNo
matching_algorithmNo

TDQS

A3.7/5.0
Behavior3/5

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

The annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint (false), indicating the tool is safe and idempotent. The description adds no additional behavioral context beyond the annotations, such as what happens if the tag is not found or rate limits. With rich annotations, the description does not contradict nor significantly enhance transparency.

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 of four words: 'Fetch a tag by ID.' Every word earns its place, and the key information is front-loaded. It is highly concise with no superfluous 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?

The tool is simple with one required parameter and an output schema presumably explaining return values. The description covers the core functionality, though it omits details like error handling (e.g., 404 for missing tag). Given the low complexity and presence of annotations and output schema, the description is nearly complete for an adequate user experience.

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 the single integer parameter 'tag_id'. The description does not explain the parameter's meaning, format, or how to obtain it. Baseline is low (<50%), so the description should compensate, but it fails to add any semantic value beyond the parameter name.

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 'Fetch a tag by ID' clearly states the action (fetch) and the resource (tag) along with the key parameter (by ID). It distinguishes well from sibling tools like list_tags (which retrieves all tags) and create_tag (which creates a tag).

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 does not explicitly mention when to use this tool versus alternatives, such as list_tags for multiple tags or update_tag for modifications. However, for a simple get-by-ID operation, the usage is implied by the tool's name and description. No when-not or usage prerequisites are provided.

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

get_taskA
Read-onlyIdempotent

Fetch a task by UUID. Returns None if no such task exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_uuidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 destructiveHint. The description adds the behavioral detail of returning None if the task does not exist, which is not covered by 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, both essential and front-loaded. The first sentence states the core purpose, and the second provides a key behavioral note. No wasted words.

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 operation with an output schema, the description covers the main behavior (fetch by UUID, return None if missing). It is complete enough given the complexity and annotations.

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%, meaning no descriptions in the schema. The description does not elaborate on the task_uuid parameter beyond its name, failing to add meaning. Minimal value added.

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 'Fetch a task by UUID', specifying the verb (fetch) and the resource (task by UUID). This distinguishes it from sibling tools like list_tasks or wait_for_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?

The description implies usage when one has a specific task UUID to retrieve. While it doesn't explicitly state when not to use or mention alternatives, the context is clear given the sibling tools.

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

list_correspondentsC
Read-onlyIdempotent

List correspondents.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
orderingNo
page_sizeNo
name__icontainsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
countYes
resultsNo
previousNo

TDQS

C2.1/5.0
Behavior2/5

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

Annotations (readOnlyHint, idlempotentHint, openWorldHint) already indicate it's a safe, read-only, possibly partial result. However, the description adds no behavioral context beyond annotations, such as explaining pagination behavior or the effect of the openWorldHint.

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

Conciseness2/5

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

The description is extremely short (one phrase), which sacrifices necessary information for brevity. It fails to earn its place by omitting details critical for correct usage.

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?

Given the tool's complexity (4 parameters, pagination, filtering) and no output schema details, the description is incomplete. It does not explain return structure, pagination limits, or filtering behavior.

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?

Schema description coverage is 0%, and the description does not mention any parameters (page, page_size, ordering, name__icontains). An agent gets no guidance on how to use these parameters from the description.

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

Purpose3/5

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

The description 'List correspondents' clearly states the verb and resource, but it is very broad and does not differentiate from sibling list tools like list_documents or list_custom_fields. It lacks any scope or context that would help an agent understand what exactly is being listed.

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 provided on when to use this tool versus alternatives such as get_correspondent (single item) or search_documents. The description does not mention pagination, filtering, or any prerequisites.

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

list_custom_fieldsC
Read-onlyIdempotent

List custom fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
orderingNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
countYes
resultsNo
previousNo

TDQS

C2.6/5.0
Behavior3/5

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

Annotations fully cover safety (readOnlyHint, destructiveHint) and idempotency, so behavioral transparency is adequate. The description adds no additional behavioral details beyond what annotations already provide.

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

Conciseness2/5

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

The description is only three words, which is under-specified rather than concise. It omits crucial information about behavior and parameters, failing to earn 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?

Despite having an output schema and simple parameters, the description is too minimal. It does not state that the output is a list, or clarify default ordering, pagination limits, or typical use cases.

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?

Schema description coverage is 0%, and the description does not mention any parameters. The parameters 'page', 'ordering', and 'page_size' are left unexplained, offering no help to the agent beyond their names.

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 'List custom fields.' clearly states the verb (List) and the resource (custom fields), making the basic purpose unambiguous. However, it does not differentiate from sibling tools like 'list_correspondents' or 'get_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 Guidelines2/5

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

No guidance is provided on when to use this tool over alternatives such as 'get_custom_field' (for a single field) or other list tools. The usage context is entirely implied.

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

list_documentsA
Read-onlyIdempotent

List documents with optional filters. Returns one page.

By default, per-document OCR content is stripped to keep results small. Pass include_content=True for the full text on each hit.

notes[].note and custom_fields[].value are always stripped from listings regardless of include_content — the metadata refs (note ids, timestamps, custom-field ids) are retained so callers can detect presence, but to read the actual text use get_document (with include_content=True if needed) or get_document_notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
tagsNo
orderingNo
page_sizeNo
custom_fieldNo
storage_pathNo
correspondentNo
document_typeNo
include_contentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
countYes
resultsNo
previousNo

TDQS

A4.2/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: it discloses that per-document OCR content is stripped by default, and that notes and custom_fields values are always stripped. This is crucial for understanding what results contain, and annotations only provide readOnlyHint, openWorldHint, etc.

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 (three paragraphs) and well-structured: first sentence states purpose, second explains default stripping, third clarifies immutable stripping. Every sentence adds value without redundancy.

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?

Given 9 parameters with 0% schema description and an output schema, the description explains critical quirks (stripping behavior) but does not explain the effect of filters or the pagination beyond 'returns one page'. The output schema exists, so return structure is covered, but overall completeness is average.

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 coverage is 0%, so description must compensate. It only explains include_content in detail and mentions stripping behavior for notes and custom_fields. Other parameters (tags, ordering, custom_field, storage_path, correspondent, document_type, page, page_size) are not described at all. This is insufficient for a tool with 9 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 clearly states 'List documents with optional filters. Returns one page.' It specifies the action (list), resource (documents), and distinguishes from siblings like get_document (single document) and search_documents (likely full-text search).

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 guidance on when to use include_content and notes that for full text of notes and custom fields, callers should use get_document or get_document_notes. It gives clear context for stripping behavior, but does not explicitly compare to search_documents or other listing tools, leaving some ambiguity.

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

list_document_typesC
Read-onlyIdempotent

List document types.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
orderingNo
page_sizeNo
name__icontainsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
countYes
resultsNo
previousNo

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds no behavioral details (e.g., pagination behavior, default ordering, or that results are filtered by name__icontains). Given annotations carry the safety profile, the description contributes negligible transparency.

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

Conciseness2/5

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

The description is extremely short (3 words) but misses critical information about parameters and usage. It is under-specified rather than concise. A proper description should include parameter semantics or filtering context within a few sentences.

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?

The tool has 4 parameters and an output schema, yet the description lacks details on pagination, filtering, or output shape. Without parameter guidance or behavior beyond the name, the description is insufficient for an agent to use the tool effectively.

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?

Schema description coverage is 0%, and the description provides no parameter information. It does not explain what 'page', 'ordering', 'page_size', or 'name__icontains' mean for the tool's operation. The agent must infer from parameter names alone, which is inadequate.

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 'List document types' clearly states the verb (list) and resource (document types). It distinguishes from sibling tools like list_correspondents or list_tags by specifying the exact resource type. However, it remains minimal and could be more explicit (e.g., 'Retrieve all 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 Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as get_document_type or search_documents. No mention of prerequisites, context, or exclusion criteria. The description does not help the agent decide between this and similar list tools.

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

list_saved_viewsC
Read-onlyIdempotent

List saved views.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
countYes
resultsNo
previousNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds no additional behavioral context such as rate limits or return format.

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

Conciseness3/5

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

The description is very concise at three words, but at the cost of omitting useful details. It is front-loaded but lacks sufficient information to earn 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?

Given the simple tool with 2 parameters and annotations, the description is minimal but incomplete; missing mention of pagination or result enumeration.

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?

Schema description coverage is 0%, but the description does not mention the 'page' or 'page_size' parameters or indicate pagination. It adds no meaning beyond the 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 description uses the clear verb 'List' and resource 'saved views'. It distinguishes from sibling 'get_saved_view' which is singular, but does not explicitly mention pagination or scope.

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 on when to use or alternatives. The description does not specify prerequisites, context, or when not to use this tool.

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

list_storage_pathsC
Read-onlyIdempotent

List storage paths.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
orderingNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
countYes
resultsNo
previousNo

TDQS

C2.1/5.0
Behavior2/5

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

While annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, the description adds no behavioral context beyond the name. It does not mention pagination, ordering, or any side effects, leaving behavioral traits entirely to annotations.

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

Conciseness2/5

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

The description is a single short sentence, which is concise but severely under-specified. It lacks essential details and does not front-load critical information, making it more of a placeholder than a helpful description.

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?

Given the tool's complexity (pagination, ordering, output schema) and the existence of many sibling tools, the description is incomplete. It does not explain the output, pagination behavior, or how storage paths relate to other entities.

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 input schema has 3 parameters (page, ordering, page_size) with 0% schema description coverage. The description fails to explain any parameter semantics, such as the meaning of ordering or the effect of page_size limits, leaving the agent without guidance.

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

Purpose3/5

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

The description states the verb 'List' and the resource 'storage paths', making the purpose clear but lacking any differentiation from numerous sibling list_* tools. It does not specify what storage paths are or their scope.

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 provided on when to use this tool versus alternatives like list_documents or list_tags. There is no mention of context, prerequisites, or exclusions.

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

list_tagsC
Read-onlyIdempotent

List tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
orderingNo
page_sizeNo
name__icontainsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
countYes
resultsNo
previousNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, covering safety and behavior. The description adds no extra behavioral context beyond what annotations provide. Does not contradict annotations.

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

Conciseness2/5

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

Extremely concise but under-specified. Only two words, no front-loading of key info, lacks any structural elements like bullet points or context.

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?

Despite having an output schema and multiple parameters, the description is too terse. It doesn't explain usage context (e.g., returns paginated tag list), leaving the agent to infer from schema alone.

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 description must add meaning to parameters. 'List tags' does not explain parameters like ordering, pagination, or name filtering. The schema provides structure but the description fails to add value.

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 'List tags' clearly identifies the verb (list) and resource (tags). However, it does not distinguish from sibling tools like 'get_tag' or 'list_correspondents', lacking any unique scope or filtering context.

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 provides no guidance on when to use this tool versus alternatives. No mention of when to use list_tags vs search, filtering, or other listing tools.

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

list_tasksA
Read-onlyIdempotent

List Paperless Celery tasks.

Defaults to unacknowledged tasks only (set include_acknowledged=True or acknowledged=True to see acknowledged ones). Returns one page.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
statusNo
page_sizeNo
acknowledgedNo
include_acknowledgedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
countYes
resultsNo
previousNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate idempotent read-only behavior. Description adds that it returns one page and defaults to unacknowledged, providing useful behavioral context beyond annotations.

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

Conciseness5/5

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

Two crisp sentences, no redundancy. Front-loads the main purpose, then adds key behavioral details. Every part 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?

Given an output schema, return value details are handled. However, not all parameters are explained, and the description's brevity leaves out filtering nuances that would aid full understanding.

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 0% schema coverage, description partially compensates by explaining the role of 'include_acknowledged' and 'acknowledged' parameters. However, it omits semantics for 'page', 'page_size', and 'status', leaving gaps.

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?

Clearly states it lists 'Paperless Celery tasks', specifying the resource. Distinguishes from get_task (single task) but not from other list tools in siblings, though context makes it clear.

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?

Describes default behavior (unacknowledged) and how to see acknowledged tasks, implying usage context. However, no explicit guidance on when to use vs alternatives like wait_for_task or get_task.

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

search_documentsA
Read-onlyIdempotent

Full-text search documents.

By default per-hit OCR content is stripped; pass include_content=True to get full OCR text per hit. Use more_like for similarity search.

notes[].note and custom_fields[].value are always stripped from search hits regardless of include_content — fetch them via get_document or get_document_notes when needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
queryYes
more_likeNo
page_sizeNo
include_contentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
countYes
resultsNo
previousNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare safe, idempotent read behavior. Description adds crucial details: content stripped by default, ability to include via parameter, and fields that remain stripped regardless. This adds value beyond annotations.

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

Conciseness5/5

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

Three sentences, each carrying essential information. Front-loaded with main purpose, then specific details. No extraneous text.

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 output schema exists, description doesn't need to explain return values. Covers key behaviors and limitations. With low schema coverage, could elaborate on query syntax, but overall sufficient for a search 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?

With 0% schema coverage, description must compensate. It explains include_content and more_like well, but does not cover query, page, or page_size parameters (e.g., query format, pagination details). Partially compensates.

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 states 'Full-text search documents' and distinguishes from listing tools. Explains behavior of OCR content and special fields, making purpose 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?

Provides guidance on when to use include_content and more_like, and warns about always-stripped fields. Could be improved by explicitly contrasting with list_documents or other search tools.

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

update_correspondentC
Idempotent

Patch selected fields on a correspondent.

ParametersJSON Schema
NameRequiredDescriptionDefault
patchYes
correspondent_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
slugNo
matchNo
ownerNo
document_countNo
is_insensitiveNo
user_can_changeNo
matching_algorithmNo
last_correspondenceNo

TDQS

C2.8/5.0
Behavior2/5

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

The description does not add behavioral context beyond the annotations. Annotations already indicate it's not read-only, not destructive, and idempotent. The description merely says 'Patch' which aligns but provides no extra detail.

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 concise with a single sentence, but it sacrifices needed detail. It could be slightly longer to add value while remaining efficient.

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?

Given the complexity of a patch operation and multiple parameters with zero schema coverage, the description is incomplete. It doesn't explain the patch structure, allowed values, or behavior, making it insufficient for effective use.

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 description offers no explanation of the parameters. Schema coverage is 0%, and the description doesn't compensate by describing the patch object fields or correspondent_id 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 clearly states the tool patches selected fields on a correspondent, using a specific verb and resource. It distinguishes itself from sibling tools like create_correspondent and delete_correspondent.

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 provided on when to use this tool versus alternatives or any prerequisites. It lacks context for appropriate usage.

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

update_custom_fieldA
Idempotent

Patch selected fields on a custom field definition.

extra_data shape depends on data_type:

  • monetary — optional {"default_currency": "USD"} (ISO-4217).

  • select — extra_data.select_options replaces the current list wholesale. To preserve existing values, include each existing option with its server-assigned id: {"select_options": [{"id": "abc", "label": "Low"}, ...]}. Omitting an option's id creates a new option; dropping an option from the list deletes it and any document values referencing it.

See create_custom_field for the full extra_data shape table.

ParametersJSON Schema
NameRequiredDescriptionDefault
patchYes
field_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
data_typeYes
extra_dataNo

TDQS

A4.7/5.0
Behavior5/5

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

The description goes beyond annotations by disclosing that updating extra_data for 'select' type replaces the list wholesale, and dropping options deletes document values referencing them. This reveals potential side effects not indicated by 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.

Conciseness4/5

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

The description is well-structured with three paragraphs, but some redundancy could be trimmed. However, the level of detail for the complex parameter is justified and front-loaded with the purpose.

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?

Given the presence of an output schema and annotations, the description covers the essential behavioral details and parameter semantics. It references the sibling tool for additional shape information, making it complete for a patch operation.

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

Parameters5/5

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

With 0% schema description coverage, the description fully explains the complex 'extra_data' parameter shapes for 'monetary' and 'select' types, including examples and warnings. The 'name' and 'field_id' are self-explanatory but still mentioned.

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 tool name 'update_custom_field' and description 'Patch selected fields on a custom field definition' clearly state the action and resource. It distinguishes itself from siblings like create, delete, get, and list custom fields by focusing on patching.

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 context on when to use this tool by explaining the extra_data parameter's behavior and referencing 'create_custom_field' for the full shape table. It does not explicitly mention when not to use this tool versus alternatives, but the guidance is sufficient.

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

update_documentA
Idempotent

Patch selected fields on a document.

The response strips OCR content by default; pass include_content=True to get the full text back.

ParametersJSON Schema
NameRequiredDescriptionDefault
patchYes
document_idYes
include_contentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
tagsNo
addedNo
notesNo
ownerNo
titleYes
contentNo
createdYes
web_urlNo
modifiedNo
page_countNo
created_dateNo
storage_pathNo
correspondentNo
custom_fieldsNo
document_typeNo
user_can_changeNo
archived_file_nameNo
original_file_nameNo
archive_serial_numberNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already indicate this is a write, idempotent, non-destructive operation. The description adds valuable behavioral detail: the response strips OCR content by default and provides a flag to override. No contradictions with annotations.

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

Conciseness5/5

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

Two concise sentences front-load the purpose and add a critical behavioral note. Every sentence earns its place with zero redundancy or 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?

An output schema exists, so return values are covered externally. The description explains the `include_content` behavior and implies patch semantics. However, it omits that `patch` performs a partial update and does not describe the potential for error or required permissions, leaving some gaps.

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?

With 0% schema description coverage, the description must compensate but only mentions the `include_content` parameter. The complex `patch` object with many fields (tags, title, content, custom_fields, etc.) remains unexplained, leaving the agent to guess field semantics and valid values.

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 ('Patch selected fields') and the resource ('a document'), using a specific verb that distinguishes it from siblings like delete_document or get_document. The additional detail about content stripping further clarifies behavior.

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 provides no guidance on when to use this tool versus alternatives such as bulk_edit_documents or upload_document. It does not mention prerequisites, limitations, or conflicting tools, leaving the agent to infer usage from the name alone.

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

update_document_typeB
Idempotent

Patch selected fields on a document type.

ParametersJSON Schema
NameRequiredDescriptionDefault
patchYes
document_type_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
slugNo
matchNo
ownerNo
document_countNo
is_insensitiveNo
user_can_changeNo
matching_algorithmNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already indicate it's a mutation (readOnlyHint false) that is idempotent and not destructive. Description adds 'patch' context but provides no additional behavioral details like error handling or effects of omitted fields.

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

Conciseness3/5

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

The description is a single sentence, which is concise but too sparse. It front-loads the purpose but omits necessary parameter context.

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?

Despite having an output schema and nested parameters, the description provides minimal context. Missing details on return values, field behaviors, or typical use 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 fails to explain the parameters (document_type_id and patch fields like name, match, is_insensitive, matching_algorithm). The description adds no meaning beyond the bare 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?

Description uses specific verb 'patch' and resource 'document type', clearly distinguishing from create, delete, get, and list siblings. It conveys that this is a partial update tool.

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 explicit guidance on when to use this tool versus alternatives like create_document_type or bulk_edit_document_types. No prerequisites or exclusions mentioned.

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

update_tagC
Idempotent

Patch selected fields on a tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
patchYes
tag_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
slugNo
colorNo
matchNo
ownerNo
colourNo
is_inbox_tagNo
document_countNo
is_insensitiveNo
user_can_changeNo
matching_algorithmNo

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already indicate readOnly=false, idempotent=true, destructive=false. The description adds no behavioral context beyond stating 'patch selected fields', such as what happens on invalid patch fields or missing tag. No contradiction with annotations.

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

Conciseness3/5

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

The description is very short (one sentence), which is concise, but it sacrifices informativeness. It could be expanded slightly to cover parameters or behavior without losing brevity.

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?

Given the complexity (2 required params, nested object, output schema), the description omits key details like return value (updated tag), error cases, and distinction from bulk operations. It does not fully equip an agent to use the tool correctly.

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?

Schema description coverage is 0%, yet the description does not explain any parameters. It only says 'selected fields' without listing or describing the patch subfields (name, color, match, etc.) or the tag_id parameter. This forces reliance on the schema alone, which lacks descriptions.

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 ('patch') and resource ('tag'), indicating a partial update. It distinguishes from sibling tools like create_tag and delete_tag, though it could be more explicit about the specific fields modifiable.

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 provided on when to use this tool versus alternatives (e.g., bulk_edit_tags). There is no mention of prerequisites like tag existence, error handling, or context for using patch over other operations.

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

upload_documentA

Upload a document. Returns the task UUID for polling via get_task.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
titleNo
createdNo
filenameYes
correspondentNo
custom_fieldsNo
document_typeNo
content_base64Yes
archive_serial_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
task_idYes

TDQS

A3.6/5.0
Behavior4/5

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

The description adds value beyond annotations by revealing that the operation is asynchronous and returns a task UUID for polling. Annotations only indicate readOnlyHint=false and destructiveHint=false, but do not mention the async trait.

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, front-loaded with the core action, and contains no extraneous words. Every sentence is informative.

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?

Given the complexity of 9 parameters (0% schema coverage) and the existence of an output schema, the description covers the asynchronous nature and return value. However, it lacks details on the required parameters and their roles, making it only minimally complete.

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 description provides no explanation of parameters. With schema description coverage at 0%, the description should compensate by detailing the required parameters (filename, content_base64) or optional ones, 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 ('Upload a document') and specifies the verb and resource. It is distinct from sibling tools as 'upload_document' is the only one with 'upload' in the name.

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 indicates that the tool returns a task UUID for polling via `get_task`, implying asynchronous behavior. However, it does not explicitly state when to use it versus alternatives, nor does it mention prerequisites or exclusions.

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

wait_for_taskA
Read-onlyIdempotent

Poll until the task reaches a terminal state or times out.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_uuidYes
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
typeNo
resultNo
statusYes
task_idYes
date_doneNo
acknowledgedNo
date_createdYes
task_file_nameNo
related_documentNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, non-destructive behavior. The description adds value by explaining the polling mechanism and timeout behavior, which goes beyond annotations. It does not contradict annotations or omit critical behavior for this tool type.

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 concise sentence that delivers essential information without redundancy. It is front-loaded with the core action and expected outcome.

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 presence of an output schema (so return values need not be detailed) and annotations covering safety, the description adequately covers the tool's behavior. It explains polling and timeout, which are the key aspects for an agent to decide usage. Minor gap: no mention of error handling on timeout.

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 'task' and 'times out' relating to task_uuid and timeout_seconds, but provides no additional context (e.g., format, source, or that timeout_seconds is optional with a default of 60). This is insufficient for an agent to use the parameters effectively.

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 tool polls until a task reaches a terminal state or times out. It uses a specific verb ('poll') and resource ('task'), distinguishing it from sibling tools like 'get_task' (one-time status) and 'list_tasks' (list all). However, it could more explicitly define 'terminal state' for 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 description implies usage for waiting on task completion but offers no explicit guidance on when to use this tool versus alternatives (e.g., 'get_task'). It does not mention exclusions or prerequisites, leaving the agent to infer context from the name and schema.

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

TDQS

B3.2/5.0
Disambiguation5/5

Every tool targets a distinct resource or action, with clear boundaries between CRUD operations, bulk edits, and specialized retrievals (e.g., content vs. metadata vs. notes). No two tools overlap in purpose.

Naming Consistency5/5

All tools use a consistent verb_noun pattern in snake_case (e.g., create_correspondent, list_correspondents, get_correspondent). Bulk operations use 'bulk_edit_' uniformly, and specialized fetches are clearly named (search_documents, upload_document). The naming convention is predictable throughout.

Tool Count2/5

At 49 tools, the set is very large for an MCP server. While each tool appears justified for paperless-ngx's comprehensive API, the high count makes it harder for agents to navigate and select appropriate tools, exceeding the typical well-scoped range of 3–15.

Completeness5/5

The tool surface covers full CRUD for all major entities (correspondents, custom fields, document types, tags, documents), plus bulk operations, search, upload, task management, notes, history, metadata, and more. No obvious gaps for the domain of a document management system.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pvliesdonk/paperless-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server