Skip to main content
Glama
themiguelamador

toconline-mcp

TOCOnline MCP

Unofficial. This is an independent, community-built project. It is not affiliated with, endorsed by, or supported by TOCOnline or Cloudware S.A. "TOCOnline" is a trademark of its respective owner. Use at your own risk — see the warranty disclaimer.

Local MCP server wrapping the TOCOnline accounting/invoicing API. Lets AI assistants list customers, look up products, draft sales documents, and call arbitrary TOCOnline endpoints on your behalf — after a one-time OAuth login.

Quick start

The whole setup is four steps. Each links to its full section below.

  1. Install the launcher (needs Python 3.11+ and uv):

    git clone https://github.com/themiguelamador/toconline-mcp.git
    cd toconline-mcp && uv tool install --from . toconline-mcp

    → puts a toconline-mcp launcher on your PATH. Details.

  2. Get your TOCOnline API credentials — in the TOCOnline web app, Empresa → Configurações → Dados API, request access and set the redirect URL to http://127.0.0.1:53682/callback. You'll end up with five values (client_id, client_secret, two OAuth URLs, an API URL). Details.

  3. Register the server with your client — one line for Claude Code, a small JSON block for Claude Desktop. Details.

  4. Log in — ask your assistant "Log in to TOCOnline" (paste the five values), or run toconline-mcp setup. A browser opens, you approve, done. Details.

That's it — read-only use works on any plan. Creating/editing documents needs an active GC license. Gmail is a separate, optional add-on for archiving invoice PDFs from email — skip it unless you want it (details).

Related MCP server: QuickBooks Online MCP Server

Status

Alpha. Covers the most common read and write operations for customers, suppliers, products, and commercial sales documents, plus a generic api_request escape hatch.

Prerequisites

  • macOS or Linux (Windows untested).

  • Python 3.11+.

  • A TOCOnline account with admin access and, for anything beyond GET requests, an active GC (Gestão Comercial) license. GET-only use works on any plan.

  • An API integration configured in TOCOnline — see Getting TOCOnline API credentials below.

  • uv (recommended) or pipx or plain python3 -m venv.

Install

Not yet published to PyPI — install from source:

git clone https://github.com/themiguelamador/toconline-mcp.git
cd toconline-mcp

# Recommended: uv
uv tool install --from . toconline-mcp
# → installs to ~/.local/share/uv/tools/toconline-mcp/
# → launcher at /Users/<you>/.local/bin/toconline-mcp

# Or pipx
pipx install .

# Or vanilla Python
python3 -m venv ~/.local/toconline-mcp
~/.local/toconline-mcp/bin/pip install .

macOS sandbox note. Claude Desktop is sandboxed and cannot execute binaries whose Python installation lives under ~/Documents/, ~/Desktop/, or ~/Downloads/. The server will fail to start with PermissionError: … /.venv/pyvenv.cfg. Always install via one of the methods above — they all land outside the TCC-protected folders. Do not point Claude Desktop at a .venv/bin/toconline-mcp that lives inside your cloned repo if the repo sits in ~/Documents/.

Updating after code changes

When you pull new commits or edit the source, three steps — and which you need depends on what changed:

# 1. Rebuild the installed launcher (always)
uv tool install --from . toconline-mcp --reinstall
  1. Restart the server — fully quit the client (Claude Desktop: ⌘Q, not just the window) and reopen, or kill the running toconline-mcp process so it respawns with the new code.

  2. Start a new chatonly needed when you added or renamed a tool. The chat caches the tool list it got at startup, so a new tool won't appear in an existing conversation even after the server restarts.

Editing an existing tool's behaviour needs only steps 1–2; adding or renaming a tool needs all three. See Iteration workflow for the full explanation and how to find/kill stale processes.

Getting TOCOnline API credentials

Based on the official TOCOnline API docs. These steps are one-time per company/tenant.

1. Request API access

In the TOCOnline web app, go to Empresa → Configurações → Dados API (Company → Settings → API Data). Fill in the integrator details (company info + contact email) and submit.

TOCOnline will email the integrator address a temporary link (valid ~72h) where you can view and edit the API credentials and integration settings.

The link page shows five values you will need:

TOCOnline variable

What it is

Use in this MCP

OAUTH_CLIENT_ID

OAuth client id

client_id

OAUTH_CLIENT_SECRET

OAuth client secret

client_secret

OAUTH_URL

Your tenant's OAuth base URL

auth_url = <OAUTH_URL>/auth, token_url = <OAUTH_URL>/token

API_URL

Your tenant's API base URL

api_base

OAUTH_REDIRECT_URL

Callback URL (pre-set by TOCOnline; editable)

must match what this MCP uses — see next step

The OAUTH_URL / API_URL values are tenant-specific. Use the exact values shown on the email link page — the default api_base baked into this tool (https://apiv1.toconline.com) is a generic placeholder and may not match your tenant.

3. Set the redirect URL to match this MCP

This is the single step most people get wrong. TOCOnline pre-fills OAUTH_REDIRECT_URL with something like http://127.0.0.1:4080/oauth/callback. This MCP expects http://127.0.0.1:53682/callback (different port, different path).

On the email link page (or later, back in Empresa → Configurações → Dados API), overwrite OAUTH_REDIRECT_URL with exactly:

http://127.0.0.1:53682/callback

Save. That's it.

If port 53682 is taken on your machine, pick any free port and pass it as redirect_port to the login tool (or --port N to the CLI). The path must remain /callback.

4. Log in

Two equivalent ways — pick whichever fits your workflow.

After registering the server with Claude, ask:

Log in to TOCOnline. Here are the values from Empresa → Configurações → Dados API: client_id = ..., client_secret = ..., auth_url = <OAUTH_URL>/auth, token_url = <OAUTH_URL>/token, api_base = <API_URL>.

Claude invokes the login tool, your browser opens to TOCOnline consent, you approve, and credentials land in ~/.config/toconline-mcp/credentials.json (mode 0600). No separate terminal step.

Any time later, ask Claude to run auth_status to see whether credentials are configured and how long until the access token expires, or logout to clear them.

B. From the command line

toconline-mcp setup

Prompts for each value interactively, opens the browser, writes the credentials file. You can also set them in the environment first to skip the prompts:

export TOCONLINE_CLIENT_ID='...'
export TOCONLINE_CLIENT_SECRET='...'
export TOCONLINE_AUTH_URL='<OAUTH_URL>/auth'
export TOCONLINE_TOKEN_URL='<OAUTH_URL>/token'
export TOCONLINE_API_BASE='<API_URL>'
toconline-mcp setup

If the MCP server is already running in your client, restart/reconnect it afterwards — it caches credentials in memory at startup, so auth_status will show the fresh token while real calls still fail with unauthorized_client until the server reloads the file.

Token lifetime

Per TOCOnline's auth docs, the access token lasts 4 hours (expires_in: 14400) and the refresh token 8 hours. This MCP refreshes the access token automatically (2 minutes before expiry) whenever you make a request, so during active use you never notice.

The catch is the 8-hour refresh window: if the server sits idle for more than 8 hours, the refresh token expires and the next call fails with a 401 — you'll need to re-run login / setup. (This is a TOCOnline limit, not something this MCP can extend.) You also re-login if you revoke the integration, rotate the client secret, or change OAUTH_REDIRECT_URL.

Register with Claude

Both clients need the absolute path to the installed launcher. Find yours with:

which toconline-mcp
# → e.g. /Users/<you>/.local/bin/toconline-mcp

Claude Code

claude mcp add toconline -- /Users/<you>/.local/bin/toconline-mcp

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json and add the toconline entry under mcpServers:

{
  "mcpServers": {
    "toconline": {
      "command": "/Users/<you>/.local/bin/toconline-mcp"
    }
  }
}

Fully quit Claude Desktop (⌘Q — closing the window is not enough) and reopen it. toconline should now appear in your connectors list with a DESKTOP badge.

If the server doesn't show up

Check the log:

tail -50 ~/Library/Logs/Claude/mcp-server-toconline.log

Two common errors:

  • PermissionError: … /.venv/pyvenv.cfg — sandbox blocked the venv. Install via uv tool install --from . toconline-mcp (see above) and point the config at ~/.local/bin/toconline-mcp, not a .venv under ~/Documents/.

  • ENOENT / command not found — the path in the config is wrong. Run which toconline-mcp again and paste that exact path into the config.

Once this package is published to PyPI

After a uv publish, the config can use the shorter portable form that doesn't depend on a specific user's filesystem:

{
  "mcpServers": {
    "toconline": { "command": "uvx", "args": ["toconline-mcp"] }
  }
}

API coverage

Targets the TOCOnline Open API v1.0.0 (JSON:API), documented at api-docs.toconline.pt with the full OpenAPI 3.0.3 spec on SwaggerHub (68 paths). The base URL is region-specific — e.g. https://api14.toconline.pt (the digits match your account's region). A few document actions (finalize, email) use TOCOnline's legacy v1 action endpoints, which aren't in the public docs but ship in the Postman collection from Empresa → Configurações → Dados API.

Mapped against the public docs — ✅ typed tool, ⚠️ partial, ❌ api_request only:

API section (docs)

Resource

Coverage

Empresa

Clientes (+ morada, e-mail)

✅ full CRUD + addresses/contacts

Empresa

Fornecedores (+ morada, e-mail)

✅ full CRUD + addresses/contacts

Empresa

Produtos e Serviços

✅ full CRUD

Vendas

Documentos de Venda

✅ list/get/create/delete

Vendas

Recibos de Venda

✅ list/get/create + void

Vendas

PDF (documento + recibo)

get_document_pdf_url

Vendas

Envio por e-mail

send_document_email

Vendas

Comunicação à AT

communicate_sales_document_at

Compras

Documentos de Compra

✅ list/get/create + finalize/void

Compras

Pagamentos

✅ list/get/create

Compras

PDF / Comunicação à AT

✅ pdf url + communicate_purchase_document_at

Auxiliares

Descritores de Taxa

list_tax_descriptors

Auxiliares

Família de Itens

list_item_families

Auxiliares

Países

list_countries

Auxiliares

Unidades de Medida

list_units_of_measure

Auxiliares

Contas Bancárias

list_bank_accounts / get

Auxiliares

Caixa Associada

list_cash_accounts

Auxiliares

Unidade Monetária (moedas)

api_request

Auxiliares

Taxas (tax rates)

api_request

Auxiliares

Categorias de Despesa

api_request

Auxiliares

Documentos de Série

api_request

Auxiliares

OSS (países e taxas)

api_request

Vendas/Compras

Settlement / payment lines

create_sales_receipt_line / create_purchase_payment_line

Anything ❌ works today through api_request with no new code — the four uncovered auxiliary tables are read-only lookups. Ask if you want any promoted to a typed tool.

Validation status

How far each recently added/changed tool has been verified — live = a real call against the API succeeded; unit = payload shape covered by tests but not run against the API; untested = no automated or live check yet.

Tool(s)

Status

list_countries, list_item_families, list_units_of_measure, list_tax_descriptors, list_cash_accounts

✅ live

create_product (incl. required type + item_family_id)

✅ live

delete_product

✅ live

create_service, delete_service

✅ live

update_product, update_service

🧪 unit

create_customer / update_customer / delete_customer

🧪 unit

create_supplier / update_supplier / delete_supplier

🧪 unit

create_sales_receipt_line, create_purchase_payment_line

🧪 unit — money path, not run live (settles real documents)

communicate_sales_document_at, communicate_purchase_document_at

⏳ untested — binding AT submission

Tools

54 typed tools plus a generic escape hatch. The typed tools expose exact-match filters only, but the underlying API supports comparison operators — e.g. filter="documents.pending_total>0" or document_lines.created_at>'2022-01-01'::date. Reach for api_request with a raw filter param when you need ranges or date comparisons.

Authentication

Tool

Purpose

auth_status

Check whether credentials are configured and when the access token expires.

login

Run the OAuth browser flow and store credentials.

logout

Delete stored credentials.

Customers, suppliers, products

Tool

Purpose

list_customers / get_customer / create_customer / update_customer / delete_customer

Customer CRUD.

list_suppliers / get_supplier / create_supplier / update_supplier / delete_supplier

Supplier CRUD.

list_products / get_product / create_product / update_product / delete_product

Product CRUD.

list_services / get_service / create_service / update_service / delete_service

Service CRUD.

delete_* require confirm=true. Create/update set the API-required item type attribute (Product/Service) automatically.

Reference tables (read-only)

Lookup resources used when building documents and items.

Tool

Purpose

list_countries

ISO country codes and names.

list_item_families

Item families for categorizing products/services (item_family_id).

list_units_of_measure

Units (unidades) for document lines.

list_tax_descriptors

VAT rates and their codes (NOR, INT, RED, ISE).

list_cash_accounts

Cash accounts (caixas) for receipts/payments.

list_document_series

Document series (séries) per type — prefix, numbering, is_default. Pass a series id as series_id to create_sales_document.

Addresses & contacts

Addresses and contacts are separate JSON:API resources with an owning customer_id or supplier_id (exactly one, not both).

Tool

Purpose

list_addresses / get_address / create_address / update_address / delete_address

Address CRUD. Scope listings by customer_id or supplier_id.

list_contacts / get_contact / create_contact / update_contact / delete_contact

Contact CRUD with the same scoping.

delete_address / delete_contact require confirm=true.

Sales documents & receipts

Tool

Purpose

list_sales_documents

Filter by document_type / customer_id / date.

get_sales_document

Single document, with its line items merged by default.

create_sales_document

Draft document with line items. For credit/debit notes, set document_type='NC' or 'ND' and pass parent_document_id to reference the original.

list_sales_receipts / get_sales_receipt / create_sales_receipt

Customer-payment receipts.

create_sales_receipt_line

Settle a sales document against a receipt (settlement line).

Purchases

Tool

Purpose

list_purchase_documents / get_purchase_document / create_purchase_document

Supplier invoices.

list_purchase_payments / get_purchase_payment / create_purchase_payment

Supplier payments.

create_purchase_payment_line

Settle a purchase document line against a payment (settlement line).

Escape hatch

Tool

Purpose

api_request

Generic /api/* passthrough for endpoints without typed tools. POST/PATCH/PUT/DELETE require confirm=true.

Listing a parent's children: some collections can't be filtered flat — GET /api/commercial_sales_document_lines?filter[document_id]=… and /api/addresses?filter[customer_id]=… both return JA011. Use the nested route instead: /api/commercial_sales_documents/{id}/lines, /api/customers/{id}/addresses. The typed tools already do this.

Response shape

Responses are flattened from JSON:API — data.attributes.* fields are hoisted to the top level, and relationships.<name>.data.id becomes <name>_id:

{
  "items": [
    {"id": "1", "type": "customers", "business_name": "ACME", "country_code": "PT"}
  ],
  "meta": {"total": 1}
}

Document actions (PDF, email, finalize, void, AT)

Tool

Purpose

get_document_pdf_url

Get a signed public URL to the PDF of a sales document, sales receipt, or purchase document. The URL works unauthenticated for a short time — share it with a user and they can download.

send_document_email

Email a sales document or receipt to a recipient via TOCOnline's mail servers.

finalize_sales_document / finalize_purchase_document

Issue a draft document. Irreversible — requires confirm=true.

void_sales_receipt / void_purchase_document

Void (anular) a document. Irreversible — requires confirm=true.

communicate_sales_document_at / communicate_purchase_document_at

Report a finalized document to the AT (tax authority). Binding — requires confirm=true.

These endpoints aren't in the public API docs but are discoverable via the Postman collection TOCOnline provides from Empresa → Configurações → Dados API.

Settlement linking

create_sales_receipt_line / create_purchase_payment_line attach a receipt or payment to the document it settles (so the document is marked paid). The two are asymmetric, per the API:

  • Sales settle a whole document: receivable_type="Document", receivable_id = the sales document id.

  • Purchases settle a document line: payable_type="Purchases::DocumentLine", payable_id = a purchase document line id (not the document id).

The tools build the documented payload; the settlement amounts (received_value / paid_value, settlement_amount, retention_total, …) are the caller's responsibility.

The four uncovered auxiliary read tables (currencies, taxes, expense categories, document series, OSS) stay on api_request — ask and we'll promote any to a typed tool.

Gmail integration (optional)

Most people don't need this. It's a separate add-on for one workflow: pulling supplier-invoice PDFs out of email and archiving them into a folder (local or Google-Drive/iCloud-synced), so you can then enter them in TOCOnline. It's invoice-archiving only — not a general Gmail client (no send, no delete). Completely independent of the TOCOnline tools.

Off by default — nothing to do if you don't want it. The 10 gmail_* tools only appear once Gmail credentials exist (or you set TOCONLINE_GMAIL=1). If you do want it, the three steps are below:

  1. One-time Google Cloud setup — create an OAuth client (you bring your own Google credentials).

  2. Log in once via the CLItoconline-mcp gmail-setup.

  3. Restart your client — the gmail_* tools now show up.

One-time Google Cloud setup

  1. Go to https://console.cloud.google.com/ and create (or pick) a project.

  2. APIs & Services → Library → enable Gmail API.

  3. APIs & Services → OAuth consent screen → set up a "Desktop"/"External" consent screen with your email as a test user.

  4. APIs & Services → Credentials → Create Credentials → OAuth client IDDesktop app (or Web app). Register http://127.0.0.1:53683/callback as an Authorized redirect URI.

  5. Copy the Client ID and Client secret.

Log in

First login must use the CLI (the in-Claude gmail_* tools don't exist until credentials are present):

toconline-mcp gmail-setup

Tokens are saved to ~/.config/toconline-mcp/gmail-credentials.json (0600), separate from the TOCOnline credentials. Restart your client afterwards — the gmail_* tools (including gmail_login for re-auth) now appear.

Scope

gmail.modify — covers reading messages, downloading attachments, and adding/removing labels. It does not allow permanent deletion or sending messages. Narrower scopes (like gmail.readonly or gmail.labels) can't label messages, which breaks the "mark as imported" workflow.

Gmail tools (10)

Tool

Purpose

gmail_auth_status / gmail_login / gmail_logout

Auth lifecycle (mirrors TOCOnline's auth trio).

gmail_search_messages

Search with Gmail query syntax (has:attachment filename:pdf from:billing@…). Returns compact metadata + attachment list per message.

gmail_get_message

Fetch a single message's metadata + attachment list.

gmail_download_attachment

Download one attachment to an absolute local path. Handles filename collisions with (2), (3)… suffixes.

gmail_list_labels / gmail_create_label

Discover and create labels.

gmail_add_label_to_message / gmail_remove_label_from_message

Mark messages as processed (e.g. apply an Imported/TOCOnline label).

Example workflow: bulk-download supplier invoices

Ask Claude:

Search my Gmail for unread messages from billing@ senders with PDF attachments since 2026-04-01. For each one, download every PDF to /Users/me/Google Drive/Invoices/2026-04/ and apply the label Imported/TOCOnline. Then print a summary table.

Claude uses: gmail_search_messagesgmail_list_labels (or gmail_create_label if missing) → for each result gmail_download_attachment + gmail_add_label_to_message. Using a Google-Drive-synced folder for save_dir gives you cloud sync for free.

Gmail env vars

  • TOCONLINE_GMAIL_CREDENTIALS_PATH — override the credentials file location.

  • GMAIL_CLIENT_ID / GMAIL_CLIENT_SECRET — skip the CLI prompts during gmail-setup.

Config file (~/.config/toconline-mcp/.env)

Rather than exporting env vars in your shell every time, drop them in a .env file and the MCP loads it at startup. Values from real environment variables always win — the file is a fallback.

Loader checks these paths in order (first existing one wins):

  1. Whatever TOCONLINE_ENV_FILE points at (if set).

  2. ~/.config/toconline-mcp/.env — primary location (next to credentials.json).

  3. ./.env in the current working directory (dev convenience).

Example file — all fields optional, include only what you want cached:

# ~/.config/toconline-mcp/.env

# --- TOCOnline ---
TOCONLINE_CLIENT_ID=ptNNNNNNNNN_cNNNNNN-xxxxxxxxxxxxxxxx
TOCONLINE_CLIENT_SECRET=your-rotated-secret
TOCONLINE_AUTH_URL=https://app14.toconline.pt/oauth/auth
TOCONLINE_TOKEN_URL=https://app14.toconline.pt/oauth/token
TOCONLINE_API_BASE=https://api14.toconline.pt

# --- Gmail (Google OAuth client from console.cloud.google.com) ---
GMAIL_CLIENT_ID=1234...apps.googleusercontent.com
GMAIL_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx

Format:

  • KEY=VALUE per line.

  • # comments and blank lines are fine.

  • Quote values with spaces: NAME="with spaces".

  • export KEY=VALUE is accepted (for shell-compatibility).

  • No variable interpolation ($VAR / ${VAR}) — export from shell if you need that.

After creating the file, toconline-mcp setup and toconline-mcp gmail-setup skip the interactive prompts for any field the file already provides.

Permissions: the file contains OAuth client secrets, which are less sensitive than access tokens but still not public. Chmod it:

chmod 600 ~/.config/toconline-mcp/.env

The MCP prints a warning: on stderr if it detects looser permissions.

Development

uv venv --python 3.11
uv pip install -e '.[dev]'
pytest

Environment variables:

  • TOCONLINE_CREDENTIALS_PATH — override the credentials file location.

  • TOCONLINE_LOG_LEVELDEBUG, INFO, WARNING, etc. Logs go to stderr.

Iteration workflow (picking up code changes)

uv tool install --reinstall updates the binary on disk, but does not restart already-running MCP processes — Python imports modules at startup, so a live server keeps serving the old code until killed. After editing the source:

# 1. Run the test suite (catches regressions before they hit the live server)
pytest

# 2. Refresh the installed launcher
uv tool install --from . toconline-mcp --reinstall

# 3. Find Claude Desktop's MCP server process and kill it
ps aux | grep toconline-mcp | grep -v grep
kill <pid>

# 4. Start a new chat in Claude Desktop (Cmd-N). The first tool call
#    in that new chat causes Claude Desktop to respawn the MCP with the
#    new code — and the new chat's LLM is given the fresh tool list.

Why "new chat" matters even more than "kill the server"

There are two layers that cache things:

  1. The MCP server process caches the registered tool list in memory (modules are imported at startup). Killing the process forces a respawn that re-imports the latest code.

  2. The chat session caches the tool list it got from the server at chat start, baked into the LLM's context. Newly-added tools don't appear in an existing chat even after the server respawns.

So if you've added a tool (list_services for example) and you want the LLM to be able to call it, you need both:

  • The kill+respawn (so the server exposes the new tool at all), AND

  • A new chat (so the LLM is told the new tool exists).

Editing an existing tool's behaviour or fixing a bug is different — the tool's name is the same, the LLM already knows about it, so just kill+respawn is enough; the next call hits the new code. Adding or renaming tools requires a new chat.

The same applies to Claude Code: the deferred tools list shown at session start is locked in for that chat. New tools require a new Claude Code session (/clear or starting fresh).

Stale processes

Stray uvx toconline-mcp processes from old terminals can linger and serve stale code. ps aux | grep toconline-mcp shows them; kill <pid> clears them. They're harmless when idle but confusing if you claude mcp add more than one server pointing at the same binary.

Security

  • Tokens and client secrets stored in ~/.config/toconline-mcp/credentials.json (0600). The server refuses to start if permissions are looser.

  • All logging is to stderr (stdout is reserved for MCP stdio framing). Authorization headers and token fields are redacted from log messages.

  • api_request path is constrained to ^/api/... with no ..; write methods require an explicit confirm=true.

License

MIT.

Available Tools

67 tools
api_requestA

Escape hatch for endpoints not covered by typed tools.

Path must match /api/<resource>[/<sub>...]. Destructive methods require confirm=true. Prefer the typed tools (list_customers, create_sales_document, etc.) when they fit.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRaw JSON:API envelope for writes, shape `{data: {type, attributes, ...}}`.
pathYesAPI path starting with /api/, e.g. /api/commercial_purchases_documents.
queryNoQuery parameters as a flat object.
methodYesHTTP method.
confirmNoMust be true for POST/PATCH/PUT/DELETE. Safety gate against unintended writes.
flattenNoFlatten JSON:API response. Set false to see the raw envelope.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses path format, confirm safety gate, and flatten behavior. Lacks details on error handling or side effects, but appropriate for a generic tool.

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

Conciseness5/5

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

Extremely concise: two short yet complete sentences. Front-loaded with purpose, no redundant information. Every sentence serves a clear function.

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

Completeness5/5

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

For a generic escape hatch with no output schema and 6 parameters fully described in schema, the description provides necessary usage context, path rules, and safety gates. It is complete for the tool's role.

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

Parameters3/5

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

Schema description coverage is 100%; schema already explains each parameter. The description adds context like 'Escape hatch' and 'safety gate', but does not significantly augment parameter semantics beyond 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?

Clearly identifies as an 'Escape hatch for endpoints not covered by typed tools.' Distinguishes from sibling tools by stating it is for unsupported endpoints, and mentions specific typed tools as alternatives.

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

Usage Guidelines5/5

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

Explicitly instructs when to use ('when they fit') and when not to (prefer typed tools). Provides path pattern, confirm requirement for destructive methods, and references sibling tools by name for preference.

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

auth_statusA

Report whether TOCOnline credentials are configured and their expiry.

Fast, no side effects. Call this to decide whether to prompt the user through login before attempting other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

States 'Fast, no side effects,' indicating a safe, read-only operation. No annotations provided, so description fully covers behavioral traits.

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, each earning its place: first states purpose, second provides usage guidance. No redundant information.

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

Completeness5/5

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

For a tool with no parameters and an output schema, the description covers purpose, behavior, and usage guidance completely.

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 baseline is 4. Description does not need to add parameter 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 reports whether TOCOnline credentials are configured and their expiry. It uses a specific verb 'Report' and distinguishes from sibling tools like 'login' and 'logout'.

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

Usage Guidelines5/5

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

Explicitly instructs to call this tool to decide whether to prompt the user through 'login' before attempting other tools. Provides clear context and suggests an alternative tool.

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

communicate_purchase_document_atA

Communicate a finalized purchase document to the AT (Portuguese tax authority).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPurchase document id (must be finalized first).
confirmNoMust be true. Communicating to the AT is a binding fiscal action.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description must fully communicate behavioral traits. It fails to disclose that the action is binding (the schema mentions this in the 'confirm' parameter description but the description does not). It also does not mention side effects, prerequisites (document must be finalized, though implied), or potential errors. This is a significant gap for a fiscally binding action.

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

Conciseness5/5

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

A single, efficient sentence with no extraneous information. Perfectly concise 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 tool's complexity (2 parameters, 1 required) and presence of an output schema, the description is minimal but omits important behavioral context (binding action, mandate for confirm=true). It is adequate for a straightforward action but lacks completeness for a sensitive fiscal operation.

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

Parameters3/5

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

Schema description coverage is 100%, and the description does not add value beyond the schema. The confirm parameter's critical nature (binding fiscal action) is only in the schema. Baseline 3 applies as the schema already sufficiently describes 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 the verb 'Communicate', the resource 'finalized purchase document', and the target 'AT (Portuguese tax authority)'. It effectively distinguishes from the sibling tool 'communicate_sales_document_at' by specifying the document type.

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

Usage Guidelines4/5

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

The description implies the tool should be used when needing to send a finalized purchase document to the AT. While it does not explicitly state when not to use it or mention alternatives, the sibling tool name itself provides differentiation, and context signals include the sibling list. Clear enough for an agent.

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

communicate_sales_document_atA

Communicate a finalized sales document to the AT (Portuguese tax authority).

Triggers TOCOnline's send_document_at_webservice action. The document must already be finalized. Requires confirm=true because the report is a binding fiscal submission. The response carries the AT communication status/code returned by the webservice.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSales document id (must be finalized first).
confirmNoMust be true. Communicating to the AT is a binding fiscal action.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, but description discloses triggers a webservice, requires finalized doc, confirm must be true, and response carries AT status. Could mention irreversibility explicitly.

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

Conciseness5/5

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

Four sentences, each adding unique value: purpose, internal action, precondition, response. No redundant 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?

Covers purpose, preconditions, and response content. With output schema present, description is sufficient. Minor omission: error scenarios not mentioned.

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

Parameters3/5

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

Schema coverage is 100%; description reinforces id must be finalized and confirm must be true (as in schema). Adds webservice context but minimal extra value over 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 clearly states the tool communicates a finalized sales document to the AT (Portuguese tax authority), distinguishing it from siblings like finalize_sales_document and communicate_purchase_document_at.

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?

Specifies that the document must be finalized and that confirm=true is required due to binding fiscal submission. Implicitly excludes non-finalized documents, but could explicitly mention the prerequisite finalize_sales_document tool.

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

create_addressA

Create an address attached to a customer or supplier.

TOCOnline uses a polymorphic association — the parent is identified via the addressable_type ("Customer" | "Supplier") and addressable_id attributes, not a JSON:API relationship.

Returns the created (or, on a duplicate, the existing) address re-fetched by id, so the parent link and all fields are populated — the raw POST echo omits them, which makes the address look empty/unlinked.

TOCOnline enforces a uniqueness constraint on address_detail + postcode per parent and raises [400] já existe na tabela on a duplicate; this tool catches that and returns the existing address (idempotent).

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity.
regionNoRegion / state.
postcodeNoPostcode / ZIP.
is_primaryNoWhether this is the entity's primary address.
customer_idNoAttach to a customer. Provide exactly one of customer_id or supplier_id.
supplier_idNoAttach to a supplier. Provide exactly one of customer_id or supplier_id.
address_detailYesStreet / address line.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully discloses the polymorphic association, return behavior (re-fetched by id to avoid empty look), and uniqueness constraint with idempotent duplicate handling.

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?

Description is well-structured with clear paragraphs, each adding value. While slightly long, it front-loads the purpose and is efficient for the complexity involved.

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?

Completely covers the polymorphic behavior, duplicate handling, and return format. Given the complexity and the presence of an output schema, it provides all necessary context for correct invocation.

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

Parameters3/5

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

Schema coverage is 100% and provides good descriptions. The description adds context about the underlying polymorphic association but doesn't significantly augment parameter meanings beyond what the schema already offers.

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 'Create an address attached to a customer or supplier' and explains the polymorphic association, distinguishing it from update_address and delete_address.

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

Usage Guidelines5/5

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

Explicitly explains the mechanism to identify the parent (addressable_type/addressable_id) and that exactly one of customer_id or supplier_id must be provided. Also covers duplicate handling, making idempotent behavior clear.

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

create_contactC

Create a contact attached to a customer or supplier.

Polymorphic association via contactable_type ("Customer" | "Supplier") and contactable_id attributes.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesContact name.
emailNoEmail address.
positionNoJob title / role.
categoriesNoContact categories (e.g. ['general']). Defaults to ['general'] if omitted.
is_primaryNoWhether this is the primary contact.
customer_idNoAttach to a customer. Provide exactly one of customer_id or supplier_id.
supplier_idNoAttach to a supplier. Provide exactly one of customer_id or supplier_id.
phone_numberNoLandline / main phone.
mobile_numberNoMobile phone.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It states the creation and attachment but does not explain side effects, required permissions, or what happens if no customer/supplier ID is provided. The polymorphic association mention is inconsistent with the schema, which may confuse agents.

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 purpose, and contains no unnecessary words. Every sentence adds 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 9 parameters, 1 required, and an output schema, the description is too brief. It does not explain the mismatch between the polymorphic association mention and the actual schema fields (customer_id, supplier_id). The agent lacks guidance on how to correctly attach the contact, making the description incomplete.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds context about attaching to a customer or supplier but does not elaborate on individual parameters beyond what the schema already provides. It adds marginal 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 clearly states the tool creates a contact attached to a customer or supplier, specifying the polymorphic association. This differentiates it from other create tools. However, the mention of contactable_type and contactable_id does not match the schema (which uses customer_id and supplier_id), slightly reducing 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 (e.g., update_contact, create_customer). It does not mention prerequisites, exclusions, or context, leaving the agent to infer usage.

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

create_customerB

Create a customer. Returns the created record.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoPrimary email.
websiteNoWebsite URL.
cashed_vatNoCashed-VAT regime (regime de IVA de caixa).
contact_nameNoPrimary contact person.
observationsNoVisible notes about the customer.
phone_numberNoLandline / main phone.
business_nameYesLegal/trading name.
is_tax_exemptNoTrue if the customer is VAT-exempt.
mobile_numberNoMobile phone.
not_final_customerNoTrue if the customer is a reseller (not a final consumer).
tax_country_regionNoTax region — `PT` (Portugal), `UE` (EU member state), `NON-UE` (non-EU).
country_iso_alpha_2NoISO 3166-1 alpha-2 country code, e.g. PT, US, DE.
internal_observationsNoInternal-only notes (not shown to customer).
tax_registration_numberNoVAT / NIF.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations exist, so the description must fully disclose behavior. It states 'Returns the created record' but does not mention required permissions, idempotency, side effects, or error conditions for a mutation tool. This is insufficient.

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 a single sentence with no wasted words. It is front-loaded with the primary action. However, it could benefit from structured information like required fields or return value details.

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 14 parameters (only 1 required) and the presence of an output schema, the description is minimal. It does not explain business rules, validation, or tips for creating a customer, leaving potential gaps.

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

Parameters3/5

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

Schema description coverage is 100%, with all 14 parameters having descriptions. The tool description adds no extra meaning beyond the schema, so the baseline score of 3 applies.

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

Purpose5/5

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

The description explicitly states 'Create a customer', specifying the action and resource. It clearly distinguishes from sibling tools like update_customer or get_customer, as the verb and resource are unique.

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 lacks guidance on when to use this tool versus alternatives like create_contact or create_supplier. No explicit when-not-to-use or context is provided, leaving the agent to infer based solely on the name.

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

create_productB

Create a product. Returns the created record.

ParametersJSON Schema
NameRequiredDescriptionDefault
tax_codeNoVAT rate code — `NOR` (normal), `INT` (intermediate), `RED` (reduced), `ISE` (exempt).
item_codeYesUnique product code.
sales_priceNoUnit sales price.
item_family_idNoItem family id to associate.
item_descriptionYesProduct name/description.
sales_price_includes_vatNoTrue if sales_price already includes VAT.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits, but it only states that it returns the created record. It does not mention if the operation is idempotent, if it requires specific permissions, or any side effects like updating related entities. The return value is implied by the output schema, so this adds minimal value.

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 extremely concise with only two sentences. It is front-loaded with the core action 'Create a product' and quickly adds the return value. Every word earns its place, and there is no redundant information.

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 that an output schema exists, the description does not need to detail return values. However, for a creation tool with six parameters (two required), it lacks context on constraints like uniqueness of item_code, default values for optional parameters, or behavior on duplicate submission. The brevity is acceptable but misses opportunities to fully guide the agent.

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

Parameters3/5

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

The input schema covers all six parameters with descriptions, achieving 100% schema_description_coverage. The description adds no extra meaning beyond stating the tool creates a product. Since the schema already provides parameter semantics, a baseline of 3 is appropriate, as the description does not harm but also does not enhance understanding of 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?

The description clearly states the action 'Create a product' and mentions it returns the record, which distinguishes it from read-only or update tools like get_product and update_product. However, it does not elaborate on what constitutes a product in this system, but the context is sufficient for an AI agent to understand the basic function.

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 create_service or create_customer. The description does not mention prerequisites like needing item families or tax codes defined beforehand, nor does it specify what happens if a product with the same item_code already exists. This lack of context could lead to incorrect tool selection.

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

create_purchase_documentA

Create a purchase document with lines in a single v1 call.

Supplier identity fields (tax number, business name) are denormalized from the supplier record.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesISO date (YYYY-MM-DD).
linesYesAt least one line item.
notesNoDocument notes.
due_dateNoPayment due date (YYYY-MM-DD).
supplier_idYesTOCOnline supplier id.
document_typeYesPurchase document type code (e.g. FC).
document_series_idNoDocument series id from /api/commercial_document_series.
external_referenceNoExternal reference (e.g. supplier invoice number).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It mentions that supplier identity fields are denormalized, which is a useful behavioral trait. However, it does not discuss other side effects, required permissions, or potential data constraints beyond creation.

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

Conciseness5/5

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

The description consists of two concise sentences. The first sentence clearly states the purpose, and the second adds a relevant detail without fluff. Every word earns its place.

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

Completeness4/5

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

Given the presence of an output schema and full parameter descriptions, the description adequately covers the creation intent and the denormalization caveat. It does not mention prerequisites (e.g., supplier must exist) or valid document types, but these are reasonable gaps given the schema's coverage.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning to individual parameters; the denormalization note is a general behavioral detail, not parameter-specific. The description does not enhance understanding beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the verb 'Create' and the resource 'purchase document with lines', and distinguishes it from sibling tools like create_sales_document or create_purchase_payment. It also adds a specific detail about denormalized supplier fields.

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 creating purchase documents, but does not explicitly guide when to use this tool versus alternatives (e.g., create_purchase_payment for payments, finalize_purchase_document for finalization). No when-not-to-use or alternative suggestions are provided.

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

create_purchase_paymentA

Create a purchase payment record.

Note: this creates the payment itself. To settle specific purchase document lines against it, add create_purchase_payment_line calls referencing this payment's id.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesISO payment date (YYYY-MM-DD).
gross_totalYesTotal amount paid.
supplier_idYesTOCOnline supplier id.
observationsNoOptional observations.
bank_account_idNoBank account id from /api/bank_accounts, if paid from a bank account.
payment_mechanismNoTOCOnline payment mechanism code (e.g. NUM, TRA, CC).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It mentions that the payment record is created and that lines require a separate call, but does not disclose any side effects, authorization requirements, or data destruction aspects. Adequate but not rich.

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

Conciseness5/5

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

The description is extremely concise with two sentences, front-loading the core purpose. Every sentence adds value without redundancy.

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

Completeness4/5

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

Given the tool has 6 parameters and an output schema, the description covers the essential workflow (creation + separate line settlement). It does not explain the return value, but output schema exists. Sufficient but leaves room for more detail on response.

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

Parameters3/5

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

Schema coverage is 100%, so the description does not need to add parameter details. It adds no extra meaning beyond the schema, which is acceptable. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Create a purchase payment record.' It uses a specific verb ('create') and resource ('purchase payment'), distinguishing it from the sibling 'create_purchase_payment_line' which handles line settlements.

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

Usage Guidelines5/5

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

The description explicitly provides guidance: it tells when to use this tool (to create the payment) and indicates that 'create_purchase_payment_line' should be used separately to settle lines. This clearly differentiates usage from siblings.

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

create_purchase_payment_lineA

Settle a purchase document line against a payment (settlement line).

Links an existing payment to a payable so the document line is marked paid. Note the payable is a document line (payable_id), unlike sales receipts which settle whole documents. Field values are the caller's responsibility — this tool only builds the documented payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
net_totalNoNet total of the payable line.
paid_valueYesAmount of this payment applied to the payable.
payable_idYesId of the payable being settled — a purchase document LINE id, not the document id.
payment_idYesParent purchase payment id (from create_purchase_payment).
gross_totalNoGross total of the payable line.
payable_typeNoPayable kind. `Purchases::DocumentLine` for a purchase document line.Purchases::DocumentLine
retention_totalNoWithholding/retention amount.
cashed_vat_amountNoCashed-VAT amount, if applicable.
settlement_amountNoEarly-settlement discount amount.
settlement_percentageNoEarly-settlement discount percentage.

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?

With no annotations, the description carries the full burden. It discloses that the tool only constructs the payload and does not validate fields. However, it omits details about side effects, idempotency, error conditions, permissions, or reversibility, leaving gaps.

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

Conciseness5/5

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

The description is three sentences, each serving a distinct purpose: stating the action, providing context on line vs. document settlement, and warning about caller responsibility. No extraneous words.

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 10 parameters and no annotations, the description captures the core concept and responsibility. However, it omits prerequisites (e.g., payment must exist), output details (though output schema exists), and potential pitfalls, leaving the agent partially underinformed.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by clarifying that payable_id is a line ID and that field values are caller responsibility. However, it does not elaborate beyond the schema, which already describes each parameter sufficiently.

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 (settle a purchase document line against a payment) and the resource (payment line). It explicitly distinguishes from sales receipts, which settle whole documents, thereby differentiating from sibling tools like create_sales_receipt_line.

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 when to use (to link a payment to a payable line) and contrasts with sales receipts. It notes that field validation is the caller's responsibility and that only the payload is built. However, it does not list explicit alternatives or when not to use.

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

create_sales_documentA

Create a sales document with line items.

Two code paths depending on finalize:

  • finalize=True — uses the v1 endpoint (POST /api/v1/commercial_sales_documents), which takes a flat body, embeds lines inline, and issues the document immediately (fiscally binding, irreversible). Customer identity fields are denormalized by fetching /api/customers/{customer_id} first.

  • finalize=False (default) — uses the legacy JSON:API endpoint multi-step: POST the header to /api/commercial_sales_documents, then POST each line to /api/commercial_sales_document_lines with document_id linking. The document stays as a draft (status 0) — editable, not yet fiscally valid. To issue later, call finalize_sales_document(id).

v1 ignores finalize=0 (the documented field), so the legacy path is the only way to actually leave a doc in draft state via this API.

Customer identity (name, tax number, address) is denormalized onto the header by TOCOnline server-side, on both paths — but only from the customer's main address. If the header comes back with an empty customer_address_detail, the customer has no main_address_id set; fix the customer's address rather than passing address fields here.

Date: on a certified series the date cannot precede the series' last issued document. The API enforces this; we don't pre-check it (a type can have multiple series, so a client-side guess would risk blocking valid emissions).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesISO date, e.g. 2025-01-15. On a certified series the date cannot precede the last issued document's date — TOCOnline rejects back-dating before the most recent document in the series.
linesYesAt least one line item.
notesNoCustomer-visible notes on the document.
due_dateNoPayment due date (YYYY-MM-DD).
finalizeNoIf true, the document is issued immediately (fiscally binding). If false, it stays as a draft.
customer_idYesTOCOnline customer id.
document_typeYesDocument type code. Common: FT (invoice), FR (invoice-receipt), NC (credit note / rectificative), ND (debit note / rectificative), FT-FA (simplified invoice).
payment_mechanismNoTOCOnline payment mechanism code (e.g. MO, NUM, TRA, CC).
external_referenceNoExternal reference id (e.g. PO number).
parent_document_idNoFor rectificative documents (NC / ND): id of the original sales document this rectifies. Included via the `parent_documents_ids` attribute.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Without annotations, the description fully discloses behavioral traits: two code paths, irreversible vs draft, customer address denormalization, date constraints, and API enforcement. 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.

Conciseness4/5

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

The description is well-structured with a summary and bullet points. It is slightly long but every sentence adds value. Front-loaded with one-line 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 complexity (10 params, nested lines, two code paths), the description is very complete. It covers edge cases (customer address, date constraints, v1 limitation) and output schema exists.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds significant meaning beyond schema, e.g., finalize behavior, document_type codes, date constraints, and parent_document_id usage.

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 it creates a sales document with line items, distinguishing it from sibling tools like create_sales_receipt. It explains two code paths, making the purpose very specific.

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 explicit guidance on when to use finalize=True vs False, and notes the legacy path is needed for drafts. It also mentions alternatives like finalize_sales_document, but does not explicitly list 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.

create_sales_receiptA

Create a sales receipt (customer payment) record.

Note: this creates the receipt itself. To settle specific sales documents against it, add create_sales_receipt_line calls referencing this receipt's id.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesISO receipt date (YYYY-MM-DD).
customer_idYesTOCOnline customer id.
gross_totalYesTotal amount received.
observationsNoOptional observations.
bank_account_idNoBank account id from /api/bank_accounts, if received into a bank account.
payment_mechanismNoTOCOnline payment mechanism code (e.g. NUM, TRA, CC).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It implies a write operation and hints at a multi-step process, but does not detail permissions, idempotency, side effects, or return value specifics (though output schema exists). The context added about the two-step workflow is helpful but not exhaustive.

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: the first states the core purpose, the second provides crucial workflow context. No unnecessary words or repetition. Front-loaded and efficient.

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

Completeness4/5

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

The description covers the purpose and the two-step workflow involving 'create_sales_receipt_line'. However, it does not mention prerequisites (e.g., customer must exist) or error conditions. With an output schema present and 100% parameter coverage, it is mostly complete but could be slightly richer.

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

Parameters3/5

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

Schema coverage is 100% (all parameters described in the schema). The description adds no extra meaning beyond the schema's parameter descriptions, so baseline 3 applies.

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

Purpose5/5

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

The description clearly states the action ('Create') and the resource ('sales receipt (customer payment) record'). It distinguishes itself from sibling tool 'create_sales_receipt_line' by noting that the line tool is for settling documents against the receipt.

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

Usage Guidelines4/5

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

The description explicitly says when to use this tool ('to create the receipt itself') and directs the agent to use 'create_sales_receipt_line' for the next step. This provides context and an alternative, though it does not list exclusions or 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.

create_sales_receipt_lineB

Settle a sales document against a receipt (settlement line).

Links an existing receipt to a receivable so the document is marked paid. Field values (how much settles what) are the caller's responsibility — this tool only builds the documented payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
net_totalNoNet total of the receivable line.
receipt_idYesParent sales receipt id (from create_sales_receipt).
gross_totalNoGross total of the receivable line.
receivable_idYesId of the receivable being settled — the sales document id.
received_valueYesAmount of this receipt applied to the receivable.
receivable_typeNoReceivable kind. `Document` for a sales document.Document
retention_totalNoWithholding/retention amount.
cashed_vat_amountNoCashed-VAT amount, if applicable.
settlement_amountNoEarly-settlement discount amount.
settlement_percentageNoEarly-settlement discount percentage.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It states 'this tool only builds the documented payload,' implying it does not validate, but lacks details on side effects, permissions required, or error conditions. The behavior is minimally described.

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 three sentences: purpose, action, and responsibility note. Efficient and front-loaded, no wasted words.

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 presence of an output schema, return values are covered. However, the description lacks information on error handling, idempotency, or prerequisites. Adequate for a straightforward creation tool but leaves gaps.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds context for key parameters like receipt_id ('from create_sales_receipt') and received_value ('Amount applied'), but does not elaborate on optional parameters. Marginal added value over 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 tool's purpose: 'Settle a sales document against a receipt (settlement line).' It specifies the action (create a settlement line) and the resources involved (receipt and receivable), distinguishing it from other tools like create_sales_receipt.

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 includes a guideline that 'Field values are the caller's responsibility,' but does not explicitly state when to use this tool versus alternatives or when not to use it. No mention of prerequisites or context for use.

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

create_serviceB

Create a service. Returns the created record.

ParametersJSON Schema
NameRequiredDescriptionDefault
tax_codeNoVAT rate code — `NOR` (normal), `INT` (intermediate), `RED` (reduced), `ISE` (exempt).
item_codeYesUnique service code.
sales_priceNoUnit sales price.
item_family_idNoItem family id to associate.
item_descriptionYesService name/description.
sales_price_includes_vatNoTrue if sales_price already includes VAT.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must carry full burden. It only mentions return of created record but no side effects, permissions, or behavior on duplicate items.

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. First sentence states purpose, second states return value. Efficient 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?

With 6 parameters and no output schema visible, description is minimal but adequate for a create operation. Lacks mention of constraints or typical usage.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description adds no additional meaning beyond what schema already provides, but schema itself is descriptive.

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 service. Returns the created record.' The verb and resource are explicit. However, it does not differentiate from sibling tools like 'create_product', which could be similar.

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 'update_service' or 'create_product'. 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.

create_supplierA

Create a supplier. Returns the created record.

Contacts (email/phone) and addresses are separate resources — use create_contact / create_address with this supplier's id afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
websiteNoWebsite URL.
is_taxableNoSubject to VAT.
self_billingNoSelf-billing regime (autofaturação).
business_nameYesLegal/trading name.
is_tax_exemptNoVAT-exempt.
accounting_numberNoAccounting ledger number (conta).
document_series_idNoDefault document series id for this supplier.
tax_country_regionNoTax region — `PT` (Portugal), `UE` (EU member state), `NON-UE` (non-EU).
country_iso_alpha_2NoISO 3166-1 alpha-2 country code, e.g. PT, US, DE.
internal_observationsNoInternal-only notes.
is_independent_workerNoIndependent worker / sole trader (trabalhador independente).
tax_exemption_reason_idNoTax-exemption reason id (required when is_tax_exempt).
tax_registration_numberYesVAT / NIF.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It states it returns the created record and clarifies separation of contacts/addresses, but does not disclose side effects, permissions, or error handling. Basic disclosure but not comprehensive.

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

Conciseness5/5

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

Three sentences with no fluff. First sentence states purpose and return value; second and third provide essential workflow guidance. Well-structured and 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?

Addresses the key workflow context that contacts and addresses are separate, which prevents misuse. With 100% schema coverage and an output schema, the description is fairly complete, though it could mention required fields or default behaviors.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all 13 parameters. The description adds no further parameter details but provides useful contextual information about the relationship to contacts and addresses.

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?

Explicitly states the action (create) and resource (supplier), and mentions it returns the created record. Clearly distinguishes from sibling tools like create_customer.

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 that contacts and addresses are separate resources, directing the agent to use create_contact and create_address after this call. No explicit when-not-to-use, but the context is clear.

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

delete_addressA

Delete an address. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAddress id.
confirmNoMust be true. Safety gate against accidental deletes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses destructive action and safety gate (confirm parameter). Sufficient for a delete operation.

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

Conciseness5/5

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

Two sentences, no unnecessary words, front-loaded with purpose and key requirement.

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 returns. It covers purpose and prerequisite, though could mention behavior on invalid id (minor gap).

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

Parameters4/5

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

Schema coverage is 100% already documenting both parameters. Description adds emphasis on confirm being required, adding value beyond 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 clearly states 'Delete an address' with a specific verb and resource. It distinguishes from sibling delete tools by specifying the resource type.

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

Usage Guidelines4/5

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

Describes the prerequisite 'Requires confirm=true', which indicates when to use (with confirmation) but does not explicitly mention when not to use or alternatives. However, resource specificity is clear.

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

delete_contactA

Delete a contact. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact id.
confirmNoMust be true. Safety gate against accidental deletes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Without annotations, the description carries full burden. It discloses the confirm=true safety gate but omits other behavioral traits like irreversibility, auth requirements, or side effects on related data. The deletion is implied but not explicit about consequences.

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

Conciseness5/5

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

Two sentences, no extraneous information. Front-loaded with the action, and the requirement is clearly stated. Every word earns its place.

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

Completeness4/5

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

Given the tool's simplicity and the presence of an output schema, the description is fairly complete. It covers the core action and a critical parameter constraint. It could mention prerequisites (e.g., contact existence) or error conditions, but these are minor gaps.

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

Parameters4/5

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

Schema coverage is 100%. The description adds value by clarifying that confirm must be true (not just a default false), giving practical instruction beyond the schema's description.

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 'Delete a contact', which is a specific verb and resource. It distinguishes itself from sibling tools like update_contact or get_contact, and the requirement for confirm=true adds specificity.

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 provides a key usage guideline: confirm=true is required. However, it does not offer guidance on when to use this tool versus alternatives (e.g., other delete tools), though the naming makes the resource clear.

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

delete_customerA

Delete a customer. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustomer id.
confirmNoMust be true. Safety gate against accidental deletes.

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 description indicates the destructive nature of the tool and the safety requirement. However, without annotations, it lacks details on side effects (e.g., cascading deletes), irreversibility, or permissions, leaving room for improvement.

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 gets straight to the point. No unnecessary words or information.

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

Completeness3/5

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

The description is minimally sufficient given the presence of an output schema. However, it does not mention what the tool returns (e.g., success status or deleted object), which could be helpful for an agent.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description reiterates the 'confirm' requirement but adds no new meaning beyond the schema's parameter descriptions and titles.

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 ('Delete') and the resource ('customer'), making the tool's purpose immediately obvious. Among sibling tools, it uniquely targets customers, distinguishing it clearly from other delete tools.

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

Usage Guidelines4/5

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

The description explicitly requires 'confirm=true', providing a key usage condition. While it doesn't specify when not to use this tool or mention alternatives, the context is clear for its intended use case.

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

delete_productA

Delete a product. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProduct id.
confirmNoMust be true. Safety gate against accidental deletes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It mentions the safety gate (confirm=true) but does not disclose irreversibility, effects on related data, or permissions needed. The behavioral disclosure is minimal.

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

Conciseness5/5

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

The description is a single, efficient sentence. No wasted words. It is front-loaded with the primary action and the safety requirement.

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 delete tool with two parameters (id and confirm) and an output schema, the description is nearly complete. It clearly states the action and the safety gate. Minor missing details (e.g., permanence) are offset by the presence of an output schema.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters. The description repeats the confirm requirement, adding no new meaning beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action 'Delete' and the resource 'product'. It distinguishes from sibling delete tools by specifying the resource, and is specific with the confirm requirement.

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

Usage Guidelines3/5

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

The description implies when to use (to delete a product) but provides no guidance on when not to use or alternatives among the many delete siblings. 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.

delete_sales_documentA

Delete a draft sales document.

Use this for cleaning up unfinalised drafts (e.g. orphans left behind by a failed create_sales_document call, or experimental drafts you no longer want). Will fail if the document has been finalised (status != 0) — finalised documents must be voided via a credit note, not deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSales document id to delete.
confirmNoMust be true. Only drafts can be deleted; finalized documents must be voided instead.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

Discloses that deletion only works on drafts (status != 0 fails) and that finalized documents need different handling. No annotations provided, so description carries full burden; missing mention of permanence of deletion, but still strong.

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

Conciseness5/5

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

Very concise: two sentences say everything needed. Front-loaded with purpose, no filler or repetition.

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

Completeness5/5

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

Given full schema coverage, output schema exists, and tool is simple, the description is complete. It covers purpose, constraints, and usage guidance adequately.

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?

Schema has 100% coverage, and description adds context: 'confirm' must be true, why only drafts can be deleted. Adds value beyond the schema's parameter 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 clearly states the tool deletes draft sales documents, using the verb 'Delete' and specifying the resource. It distinguishes from siblings by noting that finalized documents cannot be deleted and must be voided via credit note.

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

Usage Guidelines5/5

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

Explicitly states when to use: cleaning up unfinalised drafts, orphans, or experimental drafts. Also states when not to use: finalized documents, directing to credit note instead.

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

delete_serviceA

Delete a service. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesService id.
confirmNoMust be true. Safety gate against accidental deletes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

The description mentions the confirm safety gate, but lacks details on irreversibility, cascading deletions, or other side effects. With no annotations, more transparency would be beneficial.

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

Conciseness5/5

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

The description is two concise sentences, front-loading the essential information without unnecessary words.

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 destructive tool, the description is adequate but could be more complete by mentioning irreversibility or consequences. Output schema exists, reducing need for return value details.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds minimal value beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('delete') and the resource ('service'), distinguishing it from other delete tools like delete_address or delete_customer.

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 deleting a service, but provides no guidance on when not to use it or alternatives, such as using update_service to deactivate instead.

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

delete_supplierA

Delete a supplier. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSupplier id.
confirmNoMust be true. Safety gate against accidental deletes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It reveals the safety gate (confirm=true) and implies destructive behavior. However, it does not discuss irreversibility, effects on related data, or permission requirements.

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

Conciseness5/5

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

The description is a single sentence with no waste. It is concise and front-loaded with the main purpose.

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?

Although an output schema exists, the description is minimal for a destructive tool. It lacks details on success signals or consequences, leaving the agent slightly underinformed.

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

Parameters3/5

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

Schema coverage is 100%, and the description only adds that confirm must be true, which repeats the schema description. The baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Delete a supplier', with a specific verb and resource. It distinguishes itself from sibling tools like delete_address, delete_contact, etc.

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 mentions that confirm=true is required, giving a usage condition. However, it does not provide guidance on when to use this tool versus alternatives or any prerequisites beyond the confirm flag.

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

finalize_purchase_documentB

Finalize a draft purchase document.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPurchase document id.
confirmNoMust be true. Finalization is binding.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

Description does not disclose binding nature or irreversibility beyond what is hinted in the schema's confirm parameter description. Without annotations, the description should emphasize that finalization is a critical action but fails to do so.

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?

Extremely concise (one sentence), but it omits critical behavioral context. Conciseness should not come at the expense of completeness.

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 output schema, the description lacks essential context about the action's implications (e.g., irreversibility, confirmation requirement). For a binding operation, this is insufficient.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds no extra meaning to the parameters beyond what the schema provides. The confirm parameter's description in schema already states 'Must be true. Finalization is binding.'

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?

Clear verb and resource: 'Finalize a draft purchase document.' It specifies the action (finalize) and the object (draft purchase document), distinguishing it from siblings like finalize_sales_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 on when to use this tool versus alternatives. It does not mention prerequisites (e.g., document must be in draft status) or when not to use it (e.g., if already finalized).

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

finalize_sales_documentA

Finalize (issue) a draft sales document.

Once finalized, the document becomes fiscally valid and immutable. Requires confirm=true because the operation cannot be reversed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSales document id (must currently be in draft status).
confirmNoMust be true. Finalization is fiscally binding and cannot be undone.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description discloses critical behaviors: finalization makes the document 'fiscally valid and immutable', requires confirm=true, and cannot be reversed. This is comprehensive for a single-action tool.

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

Conciseness5/5

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

The description is short—three sentences. Front-loaded with the action, then adds critical context about irreversibility and confirm requirement. No extraneous information.

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 (not shown but confirmed), the description adequately explains the tool's behavior and preconditions. The notes about draft status and irreversibility complete the picture for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value beyond the schema by explaining the consequence of finalization (immutable, fiscal) and why confirm is required. This context helps the agent understand parameter semantics.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Finalize (issue) a draft sales document.' It distinguishes from sibling tools like finalize_purchase_document and void operations by specifying 'sales document' and the action 'finalize'.

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: it's for finalizing draft sales documents. The requirement for confirm=true and the irreversible nature provide context. However, it does not explicitly state when to use this tool versus alternatives or 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_addressA

Fetch a single address by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAddress id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, and the description lacks disclosure of behavioral traits such as idempotency, read-only nature, or error handling. For a simple fetch operation, this is a minimal description.

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

Conciseness5/5

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

A single, well-structured sentence that front-loads the action and resource. 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?

Given the tool's simplicity, the description is largely complete. The presence of an output schema covers return value understanding, but details about not-found scenarios are absent.

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

Parameters3/5

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

Schema coverage is 100% with a brief description for the 'id' parameter. The description adds no additional meaning beyond what the schema already provides, so baseline score is appropriate.

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

Purpose5/5

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

The description clearly states the action (Fetch), the resource (address), and the unique identifier (by id). It effectively distinguishes from sibling tools like list_addresses and create_address.

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 when-to-use or when-not-to-use guidance is provided. The purpose is clear but alternatives like list_addresses are not mentioned, leaving the agent to infer usage context.

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

get_bank_accountA

Fetch a single bank account by id, enriched with derived id_banco and pais_conta fields (see list_bank_accounts for the rules).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBank account id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It adds behavioral context by noting that results are 'enriched with derived id_banco and pais_conta fields' and directs to list_bank_accounts for rules. This is sufficient for a simple read operation, though it doesn't explicitly state safety or idempotency.

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 front-loads the primary action and includes essential details about enriched fields and a cross-reference. No unnecessary words or repetition.

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

Completeness5/5

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

Given the simplicity of the tool (one parameter, output schema exists), the description fully covers what the tool does, the additional derived fields, and where to find rules. It leaves no critical gaps for an AI agent to understand its usage.

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

Parameters3/5

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

The input schema has 100% description coverage, so the schema already explains the 'id' parameter. The description adds no additional semantic meaning beyond 'by id', so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Fetch' and the resource 'a single bank account by id'. It distinguishes itself from sibling tools like list_bank_accounts (which lists multiple) by specifying 'single' and referencing list_bank_accounts for rules on derived fields, thus differentiating its purpose.

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

Usage Guidelines4/5

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

The description explicitly says to use this tool to fetch a single bank account by id and references list_bank_accounts for understanding derived fields. While it doesn't enumerate alternatives or when not to use, the context is clear enough for an AI agent to infer appropriate usage.

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

get_bank_transactionB

Fetch a single bank transaction by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBank transaction id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only states 'fetch' implying read, but lacks details on idempotency, rate limits, or error scenarios.

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 concise sentence with no wasted words. Front-loaded with key information.

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 and tool is simple, description covers the core purpose. Could mention error handling but not required.

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

Parameters3/5

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

Schema description coverage is 100% and description adds no extra meaning beyond the schema's field description. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'fetch', the resource 'bank transaction', and the identifier 'by id'. It distinctively separates from list_bank_transactions and other get tools.

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_bank_transactions for multiple). 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.

get_contactA

Fetch a single contact by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It only says 'Fetch a single contact by id', lacking details on error behavior (e.g., what if id not found), authorization needs, or rate limits. For a simple read, this is adequate but minimal.

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, no fluff, and front-loaded with the verb and resource. Every word earns its place.

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

Completeness4/5

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

For a simple fetch tool with one parameter and an output schema, the description covers the core purpose. It could mention error handling (e.g., returns null if not found) but is mostly complete.

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

Parameters3/5

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

The schema already provides 100% coverage with a description for 'id'. The description adds no new meaning beyond reinforcing 'by id'. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Fetch', the resource 'a single contact', and the method 'by id'. It distinguishes from sibling tools like list_contacts (which returns multiple).

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 use when retrieving a specific contact by id, but does not explicitly state when not to use or mention alternatives. However, with siblings like list_contacts and create_contact, its purpose is clear enough.

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

get_current_companyA

Return the authenticated company's own profile.

Includes tax_registration_number (NIPC for Portuguese companies), business_name, tax_country_region, contact fields, currency_id, accountant_tax_registration_number, and the linked address_id.

Use this when you need the reporting entity's own identity — for example when producing tax-authority reports (Modelo 30, SAFT-PT), where you need the company's NIPC as the reporter, not the customer's.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are present, so the description bears the full burden. It adequately describes the return fields and the tool's read-only nature, though it does not discuss authorization or rate limits. For a simple retrieval tool, this is sufficient.

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

Conciseness5/5

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

The description is concise, front-loaded with the main action, and includes relevant examples without unnecessary words. Every sentence adds value.

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

Completeness5/5

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

Given no parameters, an existing output schema, and clear usage context, the description fully explains the tool's purpose and return fields. It is complete for its role.

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

Parameters4/5

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

The tool has zero parameters and schema coverage is 100%. The description does not need to add parameter semantics; the baseline of 4 is appropriate as it adds no redundancy.

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 authenticated company's profile, lists key fields, and distinguishes it from customer-focused tools by specifying it returns the reporting entity's identity.

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

Usage Guidelines5/5

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

Explicit use-case guidance is provided: 'Use this when you need the reporting entity's own identity — for example when producing tax-authority reports (Modelo 30, SAFT-PT), where you need the company's NIPC as the reporter, not the customer's.'

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

get_customerA

Fetch a single customer by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustomer id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must cover behavioral traits. It states the operation is a fetch, which implies read-only, but does not explicitly disclose idempotency, error handling, permissions, or other safety aspects. The output schema covers return format, but the description lacks additional context.

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

Conciseness5/5

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

The description is a single sentence with no filler words. It efficiently communicates the tool's purpose without unnecessary detail, earning its place.

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

Completeness4/5

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

Given the tool's simplicity (single parameter, fetch operation) and the presence of an output schema, the description is largely complete. However, it could briefly mention that the result is a single customer object or that it is a safe operation, but the current description is sufficient for this low-complexity tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The tool description adds no additional meaning beyond the schema for the 'id' parameter. It only repeats the parameter name without providing format, validation, or usage tips.

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

Purpose5/5

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

The description clearly states the action ('Fetch') and the resource ('a single customer by id'), using a specific verb and resource. It distinguishes from sibling tools like 'list_customers' and other 'get_*' tools by specifying 'single' and 'by id'.

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 fetching a specific customer by ID, but it does not provide explicit guidance on when to use this tool versus alternatives like 'list_customers' for multiple customers or other get tools for different entities. No when-not-to-use 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_document_pdf_urlA

Get a signed, shareable URL to a PDF render of a document or receipt.

Returns a short-lived URL on app14.toconline.pt (or equivalent for your tenant) that serves the rendered PDF. The URL is signed and does not require authentication to open — give it to a user and they can download the PDF in their browser. It typically expires after a few hours.

Only finalized documents have a PDF. A draft (status 0) returns a "not ready for print" error — finalize it first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument id (sales doc, sales receipt, or purchase doc).
document_kindNo`Document` for sales documents, `Receipt` for sales receipts, `PurchasesDocument` for purchase documents.Document

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden. It discloses that the URL is signed, short-lived, and requires no authentication. It also notes that drafts return an error. This covers the key behavioral traits adequately.

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

Conciseness5/5

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

The description is concise with three focused sentences. Each sentence adds value: purpose, return properties, and limitation. There is no redundant information.

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 and the presence of an output schema, the description covers the essential aspects: what it does, how the URL works, and the prerequisite of a finalized document. It could mention the output format but is sufficient for correct use.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description adds minimal additional meaning, only recontextualizing that the tool works for documents or receipts. It does not provide new details 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 begins with 'Get a signed, shareable URL to a PDF render', clearly stating the verb and resource. It distinguishes from sibling tools by focusing on PDF URL generation, and the parameter documentation aligns with this purpose.

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 explains when to use the tool (to obtain a PDF URL) and provides important usage context: the URL is short-lived and does not require authentication. It explicitly states that drafts are not supported and advises to finalize first. However, it does not explicitly mention alternatives, though no sibling tools perform the same function.

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

get_productA

Fetch a single product by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProduct id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only states the basic action without disclosing behavioral traits like error handling (e.g., if ID not found), data return format, or any side effects. Being a read operation, it lacks minimal behavioral context beyond the verb.

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

Conciseness5/5

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

The description is a single sentence with no wasted words. It is front-loaded and efficiently conveys 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?

Given the tool's simplicity (one required parameter, output schema present), the description is mostly complete. However, it could benefit from mentioning that it returns the product object or handling of missing IDs, though not required for a minimal description.

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

Parameters3/5

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

Schema description coverage is 100% (parameter 'id' is described as 'Product id.'). The description adds no additional meaning beyond what the schema already provides, meeting the baseline.

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

Purpose5/5

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

The description clearly states the action ('fetch'), the resource ('a single product'), and the identifier ('by id'). It distinguishes from list_products and other get_* tools, which fetch different entities or return multiple items.

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 (e.g., list_products or other get_* tools). The context implies usage when a specific product ID is known, but no when-not or alternatives are mentioned.

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

get_purchase_documentA

Fetch a purchase document, optionally with its line items merged.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPurchase document id.
include_linesNoIf true, fetch line items separately and attach under `lines`.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so description carries full burden. It discloses the optional merge behavior for line items but does not mention read-only nature, error handling, or required permissions. Adequate but minimal.

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

Conciseness5/5

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

Single sentence, front-loaded with verb and resource, no wasted words. Efficient and clear.

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 (not shown), the description does not need to detail return values. It covers the main behavior. However, it could mention potential error states or the effect of missing 'id'.

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

Parameters3/5

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

Schema description coverage is 100% (both 'id' and 'include_lines' have descriptions). The description adds 'optionally with its line items merged', which aligns with 'include_lines' but adds no further detail 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 'a purchase document', with an optional feature for line items. It distinguishes well from siblings like 'list_purchase_documents' which returns multiple documents.

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

Usage Guidelines3/5

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

The description implies usage (fetch a specific document, optionally with lines) but does not explicitly state when to use this tool versus alternatives like 'list_purchase_documents' or 'get_sales_document'. No usage 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_purchase_paymentA

Fetch a single purchase payment by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPurchase payment id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are present, and the description only states the basic action. It does not disclose behaviors like error handling (e.g., if id not found), authorization requirements, or idempotency.

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 unnecessary words, making it highly concise and efficient.

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 (one required parameter, output schema exists), the description adequately covers the essential information for a fetch operation.

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

Parameters3/5

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

Schema coverage is 100% with a single parameter 'id' described as 'Purchase payment id.' The description adds no additional meaning beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

The description 'Fetch a single purchase payment by id.' uses a specific verb and resource, clearly distinguishing it from siblings like list_purchase_payments and create_purchase_payment.

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 vs alternatives, such as using list_purchase_payments to fetch multiple payments or create_purchase_payment to add a new one.

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

get_sales_documentC

Fetch a sales document, optionally with its line items merged.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSales document id.
include_linesNoIf true, fetch line items separately and attach under `lines`.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only states 'Fetch' which implies a read operation, but does not disclose any other behavioral traits (e.g., idempotency, side effects, permissions). The absence of detail leaves the agent uncertain about safety.

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 that front-loads the purpose, but it is too brief to be fully effective. While concise, it sacrifices completeness, missing usage guidelines and behavioral context.

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?

Despite having an output schema, the description lacks information about the return format, error handling, or prerequisites. Given the tool's low complexity (2 params), the description is minimally adequate but could be more complete.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds minimal value beyond the schema. The word 'merged' in the description slightly differs from the schema's 'attach under lines', but overall, the schema already explains both parameters adequately.

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 verb 'Fetch' and the resource 'a sales document'. It distinguishes from siblings like get_sales_receipt by the resource name, but does not explicitly differentiate from other get_ tools. The mention of optional line items adds specificity.

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 get_sales_receipt or list_sales_documents. The description does not include any when-to-use or when-not-to-use context.

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

get_sales_receiptA

Fetch a single sales receipt by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSales receipt id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, but it only states the core action 'Fetch'. It does not disclose behavioral traits like read-only nature, error handling, or permissions, but it is not misleading.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words, effectively conveying the tool's 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?

Given the existence of an output schema, the description does not need to detail return values. However, it lacks mention of error conditions or null handling, leaving a minor gap in a simple get operation.

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

Parameters3/5

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

Schema coverage is 100% with the 'id' parameter clearly described as 'Sales receipt id.' The tool description adds nothing beyond the schema, meeting the baseline of 3.

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

Purpose5/5

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

The description uses a specific verb 'Fetch' and explicitly names the resource 'single sales receipt by id', clearly stating what the tool does. It distinguishes from siblings like list_sales_receipts or create_sales_receipt.

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 provide explicit guidance on when to use this tool versus alternatives like list_sales_receipts or void_sales_receipt. Usage is implied but not stated clearly.

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

get_serviceB

Fetch a single service by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesService id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided, so the description must cover behavioral traits. However, it does not disclose error behavior (e.g., what happens if id not found), permissions, or that it is a read-only operation. The description is minimal.

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

Conciseness4/5

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

Single sentence, no fluff. However, it could be slightly more informative about the return value. Still efficient.

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

Completeness3/5

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

The tool has an output schema, so return values are covered. But the description lacks context on typical usage, error handling, or prerequisites. Adequate but not complete.

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

Parameters3/5

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

Schema coverage is 100% and the parameter 'id' is described as 'Service id.' The description adds no additional meaning beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

The description uses a specific verb 'Fetch' and resource 'service' with the required 'id' parameter. It clearly distinguishes from sibling tools like 'list_services' (list) and 'create_service' (create).

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. For example, it does not mention that for multiple services, one should use 'list_services' instead.

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

get_supplierB

Fetch a single supplier by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSupplier id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations provided, so description carries burden. 'Fetch' implies read-only, no side effects. Does not disclose error handling or prerequisites, but acceptable for simple CRUD with existing output schema.

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

Conciseness5/5

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

One sentence, no wasted words, front-loaded with purpose. 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?

Simple get operation with output schema; description covers the essential purpose and parameter. Missing potential error states, but not critical for basic retrieval.

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 has 100% coverage and description of 'id' is adequate. Description adds no further meaning beyond schema, so baseline score of 3 is appropriate.

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

Purpose4/5

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

Description clearly states it fetches a single supplier by ID, which is specific and distinguishes from list_suppliers. However, does not explicitly differentiate from other get_ tools like get_customer or get_service.

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 versus alternatives. Implied by context (fetch single by ID), but lacks explicit 'use this when...' or exclusion criteria.

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

list_addressesA

List addresses. Normally scope to a customer_id or supplier_id.

Scoping uses the nested route (/api/customers/{id}/addresses); the flat /api/addresses?filter[customer_id]= query raises JA011.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort.
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
customer_idNoFilter to a specific customer's addresses.
page_numberNo1-based page number.
supplier_idNoFilter to a specific supplier's addresses.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

Discloses the JA011 error for improper scoping, but with no annotations it omits other behavioral traits like read-only nature, pagination behavior, or auth requirements. The description is partially transparent.

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

Conciseness5/5

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

Two succinct sentences: one stating purpose, the other providing critical usage detail. No unnecessary words, front-loaded with core action.

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 6 parameters, sibling tools, and available output schema, the description covers the main usage scenario and a key error. Could mention pagination behavior but not essential due to schema.

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?

Although schema coverage is 100%, the description adds value by contextualizing customer_id and supplier_id scoping and the correct API route, going beyond mere 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 clearly states the tool lists addresses and emphasizes scoping by customer or supplier. This distinguishes it from address CRUD siblings like create_address and get_address.

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

Usage Guidelines5/5

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

Explicitly advises to scope with customer_id or supplier_id and warns against the flat query that raises error JA011, providing clear when-to-use and when-not-to-use guidance.

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

list_bank_accountsA

List company bank accounts (name, IBAN, SWIFT, type).

Each item is enriched with two derived fields:

  • pais_conta — ISO country code, from iban[:2] (e.g. PT, GB).

  • id_banco — bank identifier:

    • PT accounts: first 4 digits of nib (e.g. 0007 Novo Banco, 0035 Caixa Geral de Depósitos) — matches AT Tabelas_apoio.

    • Foreign accounts: swift when present, else iban[4:8].

Both are None when the underlying iban/nib/swift is empty — a TOCOnline data-completeness issue to fix in the web UI or via PATCH.

These derived fields are what Portuguese reports like Modelo 30 (foreign payments declaration) and IES bank annexes ask for.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort, e.g. `name`.
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It transparently explains that each item is enriched with derived fields (pais_conta, id_banco) and how they are computed, including edge cases (None when underlying data is empty). It does not mention read-only nature or side effects, but as a listing tool, this is acceptable.

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 very concise: one sentence for main purpose, then explanation of derived fields and their relevance. No unnecessary words. Information is organized clearly.

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

Completeness4/5

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

With output schema present, return value explanation is unnecessary. The description covers derived fields and their purpose, and mentions data completeness issues. It does not explicitly mention pagination, but schema parameters cover that. Slight gap on filtering capabilities, but overall complete for a listing tool.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for each parameter (sort, fields, page_size, page_number). The description adds no additional parameter-level detail beyond what the schema provides. For example, it does not mention that fields can include derived fields. Baseline 3 is appropriate since schema does the work.

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

Purpose5/5

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

The description clearly states the tool lists company bank accounts with fields like name, IBAN, SWIFT, type. It specifies the resource (bank accounts) and verb (list), and distinguishes itself from siblings like get_bank_account by implying this tool returns multiple accounts.

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 about derived fields being used for Portuguese reports (Modelo 30, IES), guiding when to use this tool. It does not explicitly mention alternatives among siblings, but the sibling list includes get_bank_account, which implies for a single account use that instead. The data completeness note also helps manage expectations.

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

list_bank_transactionsA

List bank transactions (movements) imported into TOCOnline.

All filters are exact match. To get a date range, make one call per day or page through without a date filter. value is signed (negative for debits, positive for credits).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort. Default `-transaction_date,-id` (newest first, stable). Other useful: `-value` (largest debits/credits first), `transaction_date`.-transaction_date,-id
fieldsNoComma-separated subset of fields. Available: id, bank_account_id, transaction_date, posted_date, description, payer_iban, value, imported_balance, annotation, other_info, track_id, seqord.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.
posted_dateNoExact posted date (YYYY-MM-DD).
bank_account_idNoFilter to a specific bank account id (from list_bank_accounts).
transaction_dateNoExact transaction date (YYYY-MM-DD). TOCOnline does not support ranges.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It discloses that filters are exact match and date ranges are not supported, and clarifies value is signed. Lacks mention of authentication or pagination behavior, which is partially covered by schema.

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

Conciseness5/5

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

The description is concise with two sentences in the first paragraph and one in the second, front-loading the core purpose. No extraneous information.

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, the description does not need to detail return values. It covers key limitations (exact match, date ranges) and value semantics, making it fairly complete for a listing tool.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds context about exact matching and signed value but does not significantly augment individual parameter descriptions beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the verb 'List' and resource 'bank transactions', and specifies they are imported into TOCOnline. It distinguishes from sibling tools like list_bank_accounts.

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

Usage Guidelines5/5

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

Explicitly states all filters are exact match, and provides two strategies for date ranges: daily calls or pagination without a date filter. Also explains the signed nature of 'value'.

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

list_cash_accountsB

List cash accounts (caixas) used for receipts/payments.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort, e.g. `-created_at`.
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, and the description only says 'list', implying read-only. However, it does not explicitly confirm safety, side effects, or pagination behavior beyond what the schema provides. The risk of hidden mutation is unaddressed.

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

Conciseness5/5

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

The description is a single sentence with no wasted words, front-loading the core purpose. It is appropriately concise for a straightforward listing 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 the existence of an output schema, the description does not need to explain return values. It adequately covers the basic purpose, but could benefit from mentioning common use cases or filtering hints. Still, it is mostly complete for the tool's simplicity.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is already documented in the schema. The tool description adds no additional semantic value beyond what the schema provides, meeting the baseline expectation.

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 lists cash accounts ('caixas') and notes they are used for receipts/payments. It is specific about the resource type, but does not explicitly differentiate from sibling list tools such as list_bank_accounts, leaving some 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?

No guidance on when to use this tool versus alternatives (e.g., list_bank_accounts) or prerequisites. The description lacks context about typical scenarios or exclusions.

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

list_contactsB

List contacts. Normally scope to a customer_id or supplier_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort.
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
customer_idNoFilter to a specific customer's contacts.
page_numberNo1-based page number.
supplier_idNoFilter to a specific supplier's contacts.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only states 'List contacts' without describing pagination behavior, ordering, filtering beyond scoping, or whether results are limited. The existence of an output schema may partially compensate, but the description adds little transparency.

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

Conciseness4/5

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

The description is very concise at two sentences, no wasted words. However, it is perhaps too brief to fully inform the agent, but the conciseness is otherwise commendable.

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 6 optional parameters and the presence of an output schema, the description is incomplete. It fails to explain core features like pagination, field selection, sorting, or the overall shape of the response. The agent may need to infer from the schema, but the description should provide more context.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds context by mentioning customer_id and supplier_id as typical scoping parameters, but does not elaborate on sort, fields, or pagination parameters. It adds marginal value over 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 clearly states the action 'list' and resource 'contacts', and hints at typical scoping by customer_id or supplier_id. However, it does not explicitly differentiate from sibling listing tools like list_customers or list_suppliers.

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 provides minimal usage guidance by suggesting to scope to a customer_id or supplier_id. It does not mention when not to use or alternatives, but the hint is useful.

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

list_countriesB

List countries (ISO codes, names).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort, e.g. `-created_at`.
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations exist, so the description should clarify behavioral traits. It states it lists data, implying a read-only operation, but does not explicitly mention that it is non-destructive or safe. For a simple listing tool, the minimal description is borderline, but the lack of explicit safety disclosure holds it back.

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 front-loads the core action. Every character earns its place; 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?

Given the simplicity of the tool (listing countries), the output schema exists, and parameters are fully documented, the description is nearly complete. It lacks a brief note on typical use cases (e.g., populating a dropdown) but is sufficient for agents.

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

Parameters3/5

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

Schema description coverage is 100%, meaning the schema already fully documents all parameters. The description adds no additional parameter semantics beyond what is in the schema, so baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the verb 'List' and the resource 'countries', and specifies the return values (ISO codes, names). It distinguishes from other list_* tools in the sibling list by naming a unique entity. However, it could be more explicit about the purpose (e.g., for reference dropdowns).

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. The description lacks context on typical scenarios or prerequisites. Agents are left to infer 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.

list_customersA

List customers. All filters are exact match.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort, e.g. `business_name`, `-created_at`.
emailNoExact email match.
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.
business_nameNoExact match on business_name (TOCOnline does not support substring search).
tax_registration_numberNoExact VAT/NIF match.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

The description adds the behavioral detail that filters are exact match, which is not in annotations (none provided). However, it does not disclose pagination behavior, default sorting, or other relevant traits beyond the schema.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, no redundant information. Very concise and well-structured.

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 output schema exists and parameter count is moderate, the description covers the core purpose and a key behavioral detail. However, it could mention pagination or default sorting to be fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The tool description does not add parameter-level context beyond what the schema provides, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool lists customers and specifies that all filters are exact match, which is a key differentiator from other list tools that might support substring search. It is specific about verb and resource.

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 (e.g., get_customer for a single customer or other list tools). There is no mention of exclusions or conditions.

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

list_item_familiesA

List item families — used to categorize products/services (item_family_id).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort, e.g. `-created_at`.
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, but only says 'List item families'. It does not disclose behavioral traits like read-only nature, pagination behavior, or data completeness, though the schema covers pagination details.

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, concise and front-loaded, with 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 list tool with full schema coverage and an output schema, the description is adequate. It indicates the tool's role in categorization, though it could mention that it returns a list of families.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional semantic meaning beyond what the schema provides.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'item families', and explains its purpose: categorizing products/services via `item_family_id`. This distinguishes it from sibling tools like `list_products` or `list_services`.

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 needing to categorize products/services, but does not explicitly state when to use this tool vs alternatives, nor any 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_productsC

List products. All filters are exact match.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort, e.g. `item_description`, `-created_at`.
fieldsNoComma-separated subset of fields to return.
item_codeNoExact match on item_code.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.
item_descriptionNoExact match on item_description.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations exist, so the description carries full burden. It only mentions exact match filtering but omits important behaviors like pagination handling, sorting, field selection, and that it returns a list. This is insufficient for safe and correct agentic invocation.

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 (two short sentences) with no fluff. However, the brevity sacrifices completeness, making it less helpful than it could be.

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 6 parameters, an output schema exists but is not referenced. The description fails to explain pagination, sorting, or the shape of the response. Important for a listing tool, and the lack of annotations increases the need for richer context.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description's note on exact match is redundant with param descriptions for item_code and item_description. No additional semantic value is provided 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 clearly states the verb 'List' and resource 'products', and adds clarifying detail that all filters are exact match. It distinguishes from sibling tools like 'get_product' (singular) and other list tools by resource, though it could be more explicit about 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 'get_product' or 'search_products' (if it existed). Lacks context on prerequisites or appropriate usage scenarios.

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

list_purchase_documentsB

List commercial purchase documents, newest first by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoExact date match (YYYY-MM-DD). TOCOnline does not support ranges.
sortNoJSON:API sort. Defaults to `-date` (newest first).-date,-id
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.
supplier_idNoFilter by supplier id (exact match).
document_typeNoExact document type code (supplier-invoice codes vary).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

Description only mentions default sort order. No annotations provided, so the description carries full burden. Lacks details on read-only nature, pagination, filtering, or other behaviors. Schema covers parameters but not behavioral traits.

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

Conciseness5/5

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

Single sentence front-loads core purpose and default sorting. No wasted words; highly 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?

Despite having an output schema and full parameter descriptions, the tool has 7 parameters and no annotations. The description is too minimal to provide complete context for an AI agent, lacking explanation of what constitutes a purchase document or when to use filters.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all 7 parameters. Description adds no extra meaning beyond what schema already provides. Baseline of 3 is appropriate.

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

Purpose5/5

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

Description uses specific verb 'list' and resource 'commercial purchase documents', clearly differentiating from sibling tools like get_purchase_document (single) and list_sales_documents (sales).

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?

Implied usage: use to list purchase documents. No explicit guidance on when not to use or alternatives among siblings, but the purpose is straightforward.

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

list_purchase_paymentsC

List purchase payments, newest first by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoExact date match (YYYY-MM-DD).
sortNoJSON:API sort. Defaults to `-date`.-date
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.
supplier_idNoFilter by supplier id (exact match).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

The description reveals only the default sort order. Without annotations, it fails to disclose that the tool is read-only, requires authentication, or any potential side effects. For a list operation, this is minimal transparency.

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 a single, front-loaded sentence with no wasted words. It efficiently states the core function and default behavior.

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 presence of an output schema and six input parameters, the description does not cover important contextual aspects like when to use the tool, what a 'purchase payment' represents, or how the output relates to other tools. It is insufficient for an agent to fully understand the tool's role.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds no extra insight beyond the schema's parameter descriptions, such as the default sort being '-date' which is already stated. No additional semantic 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 clearly states the action ('List purchase payments') and the default ordering ('newest first'), which distinguishes it from other list tools like list_sales_documents. However, it does not specify that it returns multiple records as opposed to a single payment via get_purchase_payment.

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_purchase_payment for a single payment or create_purchase_payment for creating payments. The description lacks any contextual advice.

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

list_sales_documentsA

List commercial sales documents, newest first by default.

Use page_number + page_size to paginate, and fields to limit the response to just the columns you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoExact date match (YYYY-MM-DD). TOCOnline does not support ranges.
sortNoJSON:API sort expression. Prefix with `-` for descending. Defaults to `-date`. Examples: `-date`, `date,document_no`, `-id`, `-gross_total`.-date,-id
fieldsNoComma-separated subset of fields to return. Hugely reduces response size — sales docs have 117 fields. Common subset: `document_no,date,gross_total,status,customer_id`.
page_sizeNoItems per page (1-500).
customer_idNoFilter by customer id (exact match).
page_numberNo1-based page number for paging past the first page.
document_typeNoExact document type code, e.g. FT (invoice), FR (receipt), NC (credit note).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Without annotations, the description must convey behavioral traits. It discloses pagination and field selection behavior, implying a read-only list operation. However, it does not explicitly state that the tool has no side effects, rate limits, or authentication requirements, leaving some ambiguity.

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 primary purpose, and zero waste. Every sentence adds value: the first defines the action and default sort, the second instructs on pagination and field filtering.

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 7 parameters, 100% schema coverage, and an output schema, the description is adequate but not exhaustive. It covers the main usage pattern (pagination and field selection) but omits mentioning key filters like document_type or customer_id, which are documented in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds no additional meaning beyond what the schema already provides (e.g., pagination hints are already in parameter descriptions). It does not compensate for any schema gaps.

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

Purpose5/5

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

The description clearly states the tool lists commercial sales documents with default newest-first ordering. It uses specific verb 'list' and resource 'sales documents', distinguishing it from sibling list tools for other entities like customers, products, or purchase documents.

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

Usage Guidelines3/5

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

The description lacks explicit guidance on when to use this tool versus alternatives like list_sales_receipts or get_sales_document. It does not mention prerequisites or exclusion scenarios, leaving the agent to infer usage context from the function name alone.

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

list_sales_receiptsB

List sales receipts (customer payments), newest first by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoExact date match (YYYY-MM-DD).
sortNoJSON:API sort. Defaults to `-date`.-date,-id
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
customer_idNoFilter by customer id (exact match).
page_numberNo1-based page number.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

The description states the default sort order (newest first) but does not disclose other behavioral traits like pagination behavior, filtering effects, or that it is a read-only operation. Since no annotations are provided, the description should carry more behavioral context.

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

Conciseness5/5

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

The description is extremely concise—a single sentence that conveys the essential purpose and a key behavioral detail (default sort). No unnecessary words or repetition.

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?

With 6 parameters all described in the schema and an output schema present, the description covers the basics but lacks guidance on pagination, response format, or common use cases. It is minimally adequate but not comprehensive.

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

Parameters3/5

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

The input schema covers 100% of parameters with descriptions, so the tool description does not need to add extra meaning. However, it adds no value beyond the schema. Baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly identifies the tool as listing sales receipts (customer payments) and mentions default sorting by newest first. This distinguishes it from other list tools like list_sales_documents, though an explicit differentiation from sibling tools is not provided.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives, such as when to use list_sales_documents instead. There is no mention of prerequisites or excluded scenarios.

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

list_servicesA

List services. All filters are exact match.

Services live at /api/services, separate from /api/products. Sales/ purchase document lines distinguish them via item_type (Service vs Product).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort, e.g. `item_description`, `-created_at`.
fieldsNoComma-separated subset of fields to return.
item_codeNoExact match on item_code.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.
item_descriptionNoExact match on item_description.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It states 'List services' and the exact match filtering, but does not disclose pagination behavior, rate limits, or that it is read-only. It adds some value but is not rich.

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

Conciseness5/5

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

Three concise sentences: purpose, filtering mode, and context about endpoint and item_type. No fluff; every sentence adds value.

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 input schema covers all parameters and an output schema exists, the description provides sufficient context about the tool's role and distinction from products. It could mention pagination defaults, but the schema already handles that.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description says 'All filters are exact match,' which reinforces but does not add new meaning beyond the schema's parameter 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 starts with 'List services', a specific verb+resource pair. It immediately distinguishes from 'list_products' by noting separate endpoints and item_type usage, which differentiates it from siblings.

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

Usage Guidelines4/5

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

The description implies when to use this tool (for services) vs 'list_products' (for products), and clarifies that all filters are exact match. It does not explicitly state when not to use, but the context is clear.

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

list_suppliersB

List suppliers. All filters are exact match.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort, e.g. `business_name`, `-created_at`.
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.
business_nameNoExact match on business_name.
tax_registration_numberNoExact VAT/NIF match.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided, so the description must carry the behavioral disclosure burden. It only notes that filters are exact match, but omits details like read-only nature, pagination behavior, error handling, or authorization requirements.

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: two sentences, no fluff. The purpose is front-loaded.

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

Completeness3/5

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

Adequate for a simple list tool with output schema, but could mention pagination or return format explicitly. Minimal but functional.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds the critical clarification that all filters are exact match, which is not obvious from schema alone. This adds 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 clearly states the tool lists suppliers with a specific verb and resource. However, it does not differentiate from other list tools (e.g., list_customers) beyond the name, but the name itself is specific.

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 other list tools. No prerequisites or context for usage provided.

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

list_tax_descriptorsA

List tax descriptors — VAT rates and their codes (NOR, INT, RED, ISE).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort, e.g. `-created_at`.
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden. It conveys that the tool is a read-only list operation (via 'List'), but does not explicitly confirm safety, specify authentication needs, or describe pagination behavior. The inclusion of code examples adds some value, but the lack of explicit behavioral details limits 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, front-loaded sentence that efficiently conveys the tool's purpose and key details (the specific codes). Every part earns its place with no 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 simple list tool with an output schema and self-documenting parameters, the description adequately covers the resource and its identifiable codes. However, it does not clarify that the listed codes are examples or exhaustive, nor does it mention that results are paginated. Overall, it is complete enough for agent invocation but has minor gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters (sort, fields, page_size, page_number). The description does not add any parameter-specific meaning beyond the resource identification, so it meets the baseline but does not exceed it.

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 explicitly states it lists tax descriptors, identifies them as VAT rates, and enumerates the specific codes (NOR, INT, RED, ISE). This clearly distinguishes it from sibling list tools like list_customers or list_products.

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 prerequisites, exclusion criteria, or compare to similar list tools, leaving the agent to infer usage from context.

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

list_units_of_measureB

List units of measure (unidades) for document lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoJSON:API sort, e.g. `-created_at`.
fieldsNoComma-separated subset of fields to return.
page_sizeNoItems per page (1-500).
page_numberNo1-based page number.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations exist, and the description only states the basic purpose without disclosing behavioral traits such as pagination behavior, idempotency, or authorization needs. The schema covers parameters but description adds no behavioral context.

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

Conciseness4/5

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

Single sentence is concise and front-loaded with the key action and resource. No extraneous information, though could be slightly more structured with context.

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?

Tool is simple with output schema, so description need not detail returns. However, it lacks scope indication (e.g., all units or filtered) and prerequisites, making it barely adequate.

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

Parameters3/5

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

Schema covers all parameters with descriptions (100% coverage), so description adds no additional meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly states verb 'list' and resource 'units of measure (unidades)' with context 'for document lines.' It uniquely identifies the tool among siblings, as no other list tool covers this resource.

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 other list tools. No when-not or exclusion criteria provided.

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

loginA

Open a browser and complete OAuth login against TOCOnline.

The user must have registered http://127.0.0.1:<redirect_port>/callback as a redirect URI in their TOCOnline integration. Credentials are stored at ~/.config/toconline-mcp/credentials.json (mode 0600) and picked up by subsequent tool calls without restarting the server.

This tool blocks for up to 3 minutes while waiting for the browser callback; ask the user to complete the consent promptly.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoOAuth scope.commercial
api_baseNoTOCOnline API base URL.https://apiv1.toconline.com
auth_urlYesOAuth authorization URL (TOCOnline provides OAUTH_URL/auth).
client_idYesTOCOnline OAuth client id.
token_urlYesOAuth token URL (TOCOnline provides OAUTH_URL/token).
client_secretYesTOCOnline OAuth client secret.
redirect_portNoLocal port for the OAuth callback listener.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool opens a browser, blocks for up to 3 minutes, stores credentials to a specific file, and requires user consent. This is good transparency for an OAuth tool.

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

Conciseness5/5

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

The description is concise at 5 sentences, front-loaded with the primary action, and contains no redundant information. Every sentence adds value.

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 complexity (7 parameters, OAuth flow) and presence of an output schema, the description adequately covers the flow, blocking behavior, and credential storage. It misses potential failure scenarios but is otherwise complete.

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

Parameters3/5

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

Schema coverage is 100% and all parameter descriptions are already clear. The description adds minimal extra context (e.g., callback URI format), but does not significantly enhance understanding 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 'Open a browser and complete OAuth login against TOCOnline.' This provides a specific verb and resource, and distinguishes from sibling tools like 'logout' and 'auth_status'.

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 explains when to use this tool (authentication), mentions necessary prerequisites (registered redirect URI), and warns about blocking behavior (up to 3 minutes) requiring user action. It does not explicitly state when not to use it, but context is clear.

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

logoutA

Delete the stored TOCOnline credentials and drop in-memory tokens.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description fully discloses the behavior: deletion of credentials and token removal. No annotation contradictions, and with zero annotations, description carries the burden well.

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, efficient sentence that conveys the complete action. No wasted words.

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?

The description is fully complete for a tool with no parameters and an output schema. It covers all necessary context.

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 description adds no parameter semantics beyond schema. With 0 parameters, baseline is 4.

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

Purpose5/5

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

The description clearly states the tool deletes stored credentials and drops tokens. It distinguishes from sibling tools like 'login' and 'auth_status'.

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?

Usage is implicitly clear: use when ending a session. No explicit when-not-to-use or alternatives, but the simple nature of logout makes it adequate.

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

send_document_emailA

Send a sales document or receipt to a recipient by email.

Uses TOCOnline's built-in email delivery — the message arrives from TOCOnline's mail servers with your document attached / linked.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId of the sales document or receipt to send.
subjectYesEmail subject line.
to_emailYesRecipient email address.
from_nameYesSender display name.
from_emailYesSender email address (must be allowed by TOCOnline).
document_kindNo`Document` for a sales document, `Receipt` for a sales receipt.Document

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description bears full burden. It states the message arrives from TOCOnline's mail servers with the document attached/linked, offering some transparency. However, it does not disclose authentication needs, rate limits, or potential side effects like overwriting permissions.

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-loading the purpose. Every word is necessary, and there is no redundancy or fluff. It is appropriately sized for the tool's complexity.

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 output schema exists and parameter descriptions are complete, the tool description covers the core functionality. It could mention prerequisites (e.g., login requirement) or clarify the from_email constraint, but overall it is sufficient for an agent to understand usage.

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

Parameters3/5

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

Schema coverage is 100% with each parameter described. The tool description does not add significant additional meaning beyond the schema; it merely mentions document types. Baseline of 3 is appropriate as the schema already handles semantics adequately.

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

Purpose5/5

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

The description clearly states the tool sends a sales document or receipt via email using TOCOnline's built-in delivery. It specifies the verb 'send', the resource (sales document/receipt), and the medium (email), distinguishing it from sibling tools like communicate_sales_document_at.

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 sending documents via email but does not provide explicit guidance on when to use this tool versus alternatives such as communicate_sales_document_at. No when-not-to-use or alternative recommendations are given, leaving some ambiguity.

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

update_addressA

Update an address. Only non-null fields are sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAddress id.
cityNoCity.
regionNoRegion / state.
postcodeNoPostcode / ZIP.
is_primaryNoWhether this is the primary address.
address_detailNoStreet / address line.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

The description discloses a behavioral trait ('Only non-null fields are sent'), which is valuable beyond annotations (none provided). However, it does not mention return value, error conditions, or side effects. For a tool with no annotations, more behavioral context would be beneficial.

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 redundancy. The first sentence immediately states the purpose. Every word earns its place.

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

Completeness4/5

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

Given the 6 parameters and existence of an output schema, the description sufficiently covers the update behavior (partial update). It lacks details on error handling or success response, but the output schema can fill the latter gap. Tool is moderately complex, description is mostly adequate.

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

Parameters4/5

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

Schema coverage is 100%, and the description adds a critical semantic detail: 'Only non-null fields are sent' — clarifying that null fields are ignored during update. This adds value beyond the schema's parameter 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 clearly states 'Update an address', specifying the verb and resource. It also provides a key nuance ('Only non-null fields are sent'), which distinguishes it from sibling tools like create_address or delete_address.

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 state when to use this tool versus alternatives (e.g., when to call update_address vs create_address). It implies partial update behavior but lacks contextual guidance on prerequisites or exclusions.

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

update_contactA

Update a contact. Only non-null fields are sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact id.
nameNoContact name.
emailNoEmail address.
positionNoJob title / role.
is_primaryNoWhether this is the primary contact.
phone_numberNoLandline / main phone.
mobile_numberNoMobile phone.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

The description adds one behavioral detail: 'Only non-null fields are sent.' This is useful but does not disclose authorization needs, error behavior, or whether the operation is destructive. With no annotations, more context (e.g., return value, prerequisites) would improve 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?

Two sentences and 11 words: highly efficient and front-loaded. Every word earns its place with no 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 the tool's complexity (7 parameters) and existence of an output schema, the description lacks context about prerequisites (contact must exist), relation to get_contact, and return value. It is adequate but not comprehensive.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter already described. The description's note about non-null fields applies globally, not per-parameter, adding marginal semantic value. Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb (Update) and resource (contact), distinguishing it from create_contact and other update tools for different entities. The phrase 'Update a contact' 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 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 not use this tool compared to alternatives like create_contact or other update tools. The distinction is implied by the name and sibling list, but no exclusions or contextual recommendations are provided.

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

update_customerA

Update a customer. Only non-null fields are sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustomer id.
emailNoPrimary email.
websiteNoWebsite URL.
cashed_vatNoCashed-VAT regime.
contact_nameNoPrimary contact person.
observationsNoVisible notes.
phone_numberNoLandline / main phone.
business_nameNoLegal/trading name.
is_tax_exemptNoVAT-exempt flag.
mobile_numberNoMobile phone.
not_final_customerNoReseller flag.
tax_country_regionNo`PT`, `UE`, or `NON-UE`.
country_iso_alpha_2NoISO 3166-1 alpha-2 country code.
internal_observationsNoInternal notes.
tax_registration_numberNoVAT / NIF.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the key behavior that only non-null fields are sent, which is valuable. However, it omits other behaviors like error handling (e.g., if ID not found), side effects, or idempotency.

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 extremely concise with two sentences, each adding essential information: what the tool does and how it handles input. There is no wasted 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 the presence of an output schema and full parameter descriptions, the description is largely sufficient. It covers the core purpose and key behavior. However, it could be more complete by mentioning prerequisites like 'customer must exist' or potential validation constraints.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add any additional meaning to the parameters beyond what the schema already provides; the behavioral note applies to all parameters collectively.

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 'Update a customer', specifying the verb and resource. It also adds a behavioral note about non-null fields. Among sibling tools like update_contact and update_address, this tool is clearly distinguished by its resource.

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 modifying a customer record, which is clear from context. However, it does not explicitly compare to other update tools or provide exclusions or prerequisites, such as when not to use it or what alternatives exist.

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

update_productA

Update a product. Only non-null fields are sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProduct id.
tax_codeNoVAT rate code — `NOR`, `INT`, `RED`, `ISE`.
item_codeNoUnique product code.
sales_priceNoUnit sales price.
item_family_idNoItem family id to associate.
item_descriptionNoProduct name/description.
sales_price_includes_vatNoTrue if sales_price already includes VAT.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

The description discloses that only non-null fields are sent, indicating a partial update behavior. However, with no annotations, it fails to mention other important traits such as idempotency, permissions, or error handling.

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

Conciseness5/5

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

The description is extremely concise (two sentences) and front-loaded with the core purpose. Every sentence earns its place with 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?

Given the presence of an output schema and comprehensive parameter descriptions, the description provides the key behavioral detail (null handling). It is adequate, though minimal, for a tool with 7 parameters and no annotations.

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 provides full descriptions for all 7 parameters (100% coverage). The description adds value by clarifying that null fields are ignored, which affects how parameters are used—beyond what the schema states.

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 explicitly states 'Update a product', which is a specific verb+resource pair. It distinguishes from sibling tools like create_product, delete_product, and get_product by indicating the action is an update.

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 lacks any guidance on when to use this tool vs alternatives. It does not mention prerequisites (e.g., product must exist), nor does it provide context for when to choose update over create or delete.

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

update_serviceB

Update a service. Only non-null fields are sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesService id.
tax_codeNoVAT rate code — `NOR`, `INT`, `RED`, `ISE`.
item_codeNoUnique service code.
sales_priceNoUnit sales price.
item_family_idNoItem family id to associate.
item_descriptionNoService name/description.
sales_price_includes_vatNoTrue if sales_price already includes VAT.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

No annotations provided, so description bears full burden. It mentions partial update behavior but lacks disclosure on error handling, idempotency, auth requirements, or return value details. Insufficient for a mutation tool.

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

Conciseness3/5

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

The description is a single short sentence, concise but underspecified. It could include more behavioral context without becoming verbose.

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, the description lacks behavioral context such as error handling, idempotency, and whether the update is atomic. The partial update note is helpful but insufficient for complete 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?

Schema coverage is 100% and parameter descriptions are detailed (e.g., VAT rate codes). The description adds only the partial update note, which adds marginal value 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 'Update' and the resource 'service', and adds a critical behavioral note that only non-null fields are sent, distinguishing it from create_service and other update tools.

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

Usage 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 vs alternatives like create_service or delete_service. No prerequisites mentioned (e.g., service must exist). The description only states what it does, not when.

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

update_supplierA

Update a supplier. Only non-null fields are sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSupplier id.
websiteNoWebsite URL.
is_taxableNoSubject to VAT.
self_billingNoSelf-billing regime.
business_nameNoLegal/trading name.
is_tax_exemptNoVAT-exempt.
accounting_numberNoAccounting ledger number.
document_series_idNoDefault document series id.
tax_country_regionNo`PT`, `UE`, or `NON-UE`.
country_iso_alpha_2NoISO 3166-1 alpha-2 country code.
internal_observationsNoInternal notes.
is_independent_workerNoIndependent worker / sole trader.
tax_exemption_reason_idNoTax-exemption reason id.
tax_registration_numberNoVAT / NIF.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only mentions 'Only non-null fields are sent' but omits other behaviors such as id validation, return value, error handling, or permission requirements.

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

Conciseness5/5

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

Two short, front-loaded sentences. First sentence states purpose, second adds key behavioral nuance. No unnecessary words.

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

Completeness2/5

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

For a tool with 14 parameters, partial update behavior, and an output schema, the description is too minimal. It lacks context on outcomes, error conditions, or relationship to other supplier operations.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds the critical semantic 'Only non-null fields are sent', clarifying that the tool performs a partial update and that null fields are ignored, which goes beyond 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 explicitly states 'Update a supplier' and notes the partial update behavior ('Only non-null fields are sent'), clearly distinguishing from create and delete siblings.

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 avoid this tool, nor mention of alternatives. However, the name implies it's for updating existing suppliers, which is clear enough but lacks depth.

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

void_purchase_documentC

Void (anular) a purchase document.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPurchase document id to void.
confirmNoMust be true. Voiding cannot be reversed.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided. The description only states 'void' without explaining the irreversible nature or any side effects. The confirm parameter schema hints at irreversibility, but the description itself adds minimal behavioral context.

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

Conciseness3/5

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

The description is a single short sentence, which is concise but lacking necessary details. It is not front-loaded with key information, and the brevity comes at the cost of completeness.

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 has an output schema and only two parameters, the description could be minimal. However, it misses important context like irreversibility, required document state, or how the output is returned, leaving gaps for the agent.

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

Parameters3/5

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

Schema coverage is 100% and both parameters (id, confirm) are described in the schema. The description adds no additional parameter information beyond what is in the schema, so baseline score of 3 is appropriate.

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

Purpose4/5

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

The description states 'Void (anular) a purchase document,' which clearly identifies the action (void) and resource (purchase document). It distinguishes from siblings like finalize_purchase_document, though not explicitly.

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 (e.g., delete, finalize). No prerequisites or conditions mentioned, such as whether the document must be finalized before voiding.

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

void_sales_receiptC

Void (anular) a sales receipt.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSales receipt id to void.
confirmNoMust be true. Voiding cannot be reversed.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only states 'void' without disclosing that voiding is irreversible or any side effects. The confirm parameter description in the schema says voiding cannot be reversed, but the tool description itself lacks this.

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?

Extremely brief, but sufficient for a simple tool. Could be improved by front-loading key information and removing the Spanish translation.

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 void operation with few parameters and an output schema, the description is minimally adequate. However, it lacks behavioral warnings and usage context.

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?

Input schema has 100% coverage with descriptions for both parameters. Description adds no extra meaning beyond what schema already provides. Baseline 3 applies.

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

Purpose4/5

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

Description clearly states the action 'void a sales receipt' and distinguishes from sibling void tools like void_purchase_document. The parenthetical Spanish translation is unnecessary but not misleading.

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, prerequisites, or conditions. Agent must infer from context.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.2.0
    • Changedcreate_purchase_document2 fields changed
      • addedInput schema / $defs / PurchaseDocumentLine / properties / tax_code
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "VAT rate code — `NOR`, `INT`, `RED`, `ISE`. Simpler than tax_id; the line resolves the rate.",
        +  "title": "Tax Code"
        +}
      • changedInput schema / $defs / PurchaseDocumentLine / properties / tax_id / description
        Previous value: -"Tax id."New value: +"Tax id. Prefer `tax_code` unless you need a specific tax row."
    • Changedcreate_sales_document4 fields changed
      • changedInput schema / $defs / SalesDocumentLine / properties / item_id / description
        Previous value: -"TOCOnline product or service id."New value: +"Catalog product/service id (from list_products / list_services). When set with item_type, the line inherits the item's code, unit, and (if not overridden) price/VAT — `item_code` is filled automatically. Omit for a free-text line and set `description`."
      • changedInput schema / $defs / SalesDocumentLine / properties / item_type / description
        Previous value: -"TOCOnline item type, usually `Product` or `Service`. Required when item_id is set."New value: +"Item type when referencing the catalog: `Product` or `Service`. Required with item_id."
      • addedInput schema / $defs / SalesDocumentLine / properties / tax_code
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "VAT rate code — `NOR`, `INT`, `RED`, `ISE`. Simpler than tax_id; the line resolves the rate.",
        +  "title": "Tax Code"
        +}
      • changedInput schema / $defs / SalesDocumentLine / properties / tax_id / description
        Previous value: -"Tax id from /api/taxes."New value: +"Tax id from /api/taxes. Prefer `tax_code` unless you need a specific tax row."
  2. 67 tool updatesv0.1.0
    • First observedapi_request
    • First observedauth_status
    • First observedcommunicate_purchase_document_at
    • First observedcommunicate_sales_document_at
    • First observedcreate_address
    • First observedcreate_contact
    • First observedcreate_customer
    • First observedcreate_product
    • First observedcreate_purchase_document
    • First observedcreate_purchase_payment
    • First observedcreate_purchase_payment_line
    • First observedcreate_sales_document
    • First observedcreate_sales_receipt
    • First observedcreate_sales_receipt_line
    • First observedcreate_service
    • First observedcreate_supplier
    • First observeddelete_address
    • First observeddelete_contact
    • First observeddelete_customer
    • First observeddelete_product
    • First observeddelete_sales_document
    • First observeddelete_service
    • First observeddelete_supplier
    • First observedfinalize_purchase_document
    • First observedfinalize_sales_document
    • First observedget_address
    • First observedget_bank_account
    • First observedget_bank_transaction
    • First observedget_contact
    • First observedget_current_company
    • First observedget_customer
    • First observedget_document_pdf_url
    • First observedget_product
    • First observedget_purchase_document
    • First observedget_purchase_payment
    • First observedget_sales_document
    • First observedget_sales_receipt
    • First observedget_service
    • First observedget_supplier
    • First observedlist_addresses
    • First observedlist_bank_accounts
    • First observedlist_bank_transactions
    • First observedlist_cash_accounts
    • First observedlist_contacts
    • First observedlist_countries
    • First observedlist_customers
    • First observedlist_item_families
    • First observedlist_products
    • First observedlist_purchase_documents
    • First observedlist_purchase_payments
    • First observedlist_sales_documents
    • First observedlist_sales_receipts
    • First observedlist_services
    • First observedlist_suppliers
    • First observedlist_tax_descriptors
    • First observedlist_units_of_measure
    • First observedlogin
    • First observedlogout
    • First observedsend_document_email
    • First observedupdate_address
    • First observedupdate_contact
    • First observedupdate_customer
    • First observedupdate_product
    • First observedupdate_service
    • First observedupdate_supplier
    • First observedvoid_purchase_document
    • First observedvoid_sales_receipt

TDQS

B3.4/5.0

Scored across 67 tools

Disambiguation4/5

Each resource type has distinct list/get/create/update/delete tools, and sales/purchase/receipt/payment tools are clearly separated by domain noun. A small amount of potential confusion exists between receipt creation and receipt settlement lines, and between `api_request` and typed tools, but the descriptions resolve this.

Naming Consistency4/5

The dominant `verb_noun` pattern is consistent across CRUD resources (list_customers, get_customer, create_customer, update_customer, delete_customer). Deviations like `auth_status`, `login`, `logout`, and `api_request` break the otherwise regular style, but they are few and recognizable.

Tool Count1/5

67 tools is a very large surface for a single MCP server and falls in the extreme-count range; an agent will struggle to choose among so many endpoints. Splitting by domain (customers, documents, banking, references) would make the toolset far more navigable.

Completeness4/5

The toolset covers full CRUD for core master data and a coherent document lifecycle: create draft, finalize, communicate to AT, void, PDF, and email. Notable gaps include no update for draft documents and no dedicated credit-note endpoint, but `api_request` provides an escape hatch.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    MCP server for Invoice Ninja v5 API. Enables AI assistants to manage clients, invoices, quotes, payments, and time tracking through natural language.
    32
    19 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A local MCP server that wraps the DocuGenerate API to generate documents (invoices, contracts, letters) from templates via natural language commands.
    MIT