toconline-mcp
Optional integration for archiving invoice PDFs from email via Gmail.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@toconline-mcplist my recent invoices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
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-mcplauncher on yourPATH. Details.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.Register the server with your client — one line for Claude Code, a small JSON block for Claude Desktop. Details.
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
GETrequests, 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) orpipxor plainpython3 -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 withPermissionError: … /.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-mcpthat 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 --reinstallRestart the server — fully quit the client (Claude Desktop: ⌘Q, not just the window) and reopen, or kill the running
toconline-mcpprocess so it respawns with the new code.Start a new chat — only 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.
2. Read the values off the email link page
The link page shows five values you will need:
TOCOnline variable | What it is | Use in this MCP |
| OAuth client id |
|
| OAuth client secret |
|
| Your tenant's OAuth base URL |
|
| Your tenant's API base URL |
|
| Callback URL (pre-set by TOCOnline; editable) | must match what this MCP uses — see next step |
The
OAUTH_URL/API_URLvalues are tenant-specific. Use the exact values shown on the email link page — the defaultapi_basebaked 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/callbackSave. 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.
A. From inside your AI client (recommended)
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 setupPrompts 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 setupIf the MCP server is already running in your client, restart/reconnect it afterwards — it caches credentials in memory at startup, so
auth_statuswill show the fresh token while real calls still fail withunauthorized_clientuntil 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-mcpClaude Code
claude mcp add toconline -- /Users/<you>/.local/bin/toconline-mcpClaude 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.logTwo common errors:
PermissionError: … /.venv/pyvenv.cfg— sandbox blocked the venv. Install viauv tool install --from . toconline-mcp(see above) and point the config at~/.local/bin/toconline-mcp, not a.venvunder~/Documents/.ENOENT/ command not found — the path in the config is wrong. Runwhich toconline-mcpagain 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) | ✅ |
Vendas | Envio por e-mail | ✅ |
Vendas | Comunicação à AT | ✅ |
Compras | Documentos de Compra | ✅ list/get/create + finalize/void |
Compras | Pagamentos | ✅ list/get/create |
Compras | PDF / Comunicação à AT | ✅ pdf url + |
Auxiliares | Descritores de Taxa | ✅ |
Auxiliares | Família de Itens | ✅ |
Auxiliares | Países | ✅ |
Auxiliares | Unidades de Medida | ✅ |
Auxiliares | Contas Bancárias | ✅ |
Auxiliares | Caixa Associada | ✅ |
Auxiliares | Unidade Monetária (moedas) | ❌ |
Auxiliares | Taxas (tax rates) | ❌ |
Auxiliares | Categorias de Despesa | ❌ |
Auxiliares | Documentos de Série | ❌ |
Auxiliares | OSS (países e taxas) | ❌ |
Vendas/Compras | Settlement / payment lines | ✅ |
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 |
| ✅ live |
| ✅ live |
| ✅ live |
| ✅ live |
| 🧪 unit |
| 🧪 unit |
| 🧪 unit |
| 🧪 unit — money path, not run live (settles real documents) |
| ⏳ 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 |
| Check whether credentials are configured and when the access token expires. |
| Run the OAuth browser flow and store credentials. |
| Delete stored credentials. |
Customers, suppliers, products
Tool | Purpose |
| Customer CRUD. |
| Supplier CRUD. |
| Product CRUD. |
| 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 |
| ISO country codes and names. |
| Item families for categorizing products/services ( |
| Units (unidades) for document lines. |
| VAT rates and their codes ( |
| Cash accounts (caixas) for receipts/payments. |
| Document series (séries) per type — |
Addresses & contacts
Addresses and contacts are separate JSON:API resources with an owning
customer_id or supplier_id (exactly one, not both).
Tool | Purpose |
| Address CRUD. Scope listings by |
| Contact CRUD with the same scoping. |
delete_address / delete_contact require confirm=true.
Sales documents & receipts
Tool | Purpose |
| Filter by |
| Single document, with its line items merged by default. |
| Draft document with line items. For credit/debit notes, set |
| Customer-payment receipts. |
| Settle a sales document against a receipt (settlement line). |
Purchases
Tool | Purpose |
| Supplier invoices. |
| Supplier payments. |
| Settle a purchase document line against a payment (settlement line). |
Escape hatch
Tool | Purpose |
| Generic |
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 returnJA011. 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 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. |
| Email a sales document or receipt to a recipient via TOCOnline's mail servers. |
| Issue a draft document. Irreversible — requires |
| Void (anular) a document. Irreversible — requires |
| Report a finalized document to the AT (tax authority). Binding — requires |
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 setTOCONLINE_GMAIL=1). If you do want it, the three steps are below:
One-time Google Cloud setup — create an OAuth client (you bring your own Google credentials).
Log in once via the CLI —
toconline-mcp gmail-setup.Restart your client — the
gmail_*tools now show up.
One-time Google Cloud setup
Go to https://console.cloud.google.com/ and create (or pick) a project.
APIs & Services → Library → enable Gmail API.
APIs & Services → OAuth consent screen → set up a "Desktop"/"External" consent screen with your email as a test user.
APIs & Services → Credentials → Create Credentials → OAuth client ID → Desktop app (or Web app). Register
http://127.0.0.1:53683/callbackas an Authorized redirect URI.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-setupTokens 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 |
| Auth lifecycle (mirrors TOCOnline's auth trio). |
| Search with Gmail query syntax ( |
| Fetch a single message's metadata + attachment list. |
| Download one attachment to an absolute local path. Handles filename collisions with |
| Discover and create labels. |
| Mark messages as processed (e.g. apply an |
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 labelImported/TOCOnline. Then print a summary table.
Claude uses: gmail_search_messages → gmail_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 duringgmail-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):
Whatever
TOCONLINE_ENV_FILEpoints at (if set).~/.config/toconline-mcp/.env— primary location (next tocredentials.json)../.envin 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-xxxxxxxxxxxxxxxxxxxxFormat:
KEY=VALUEper line.#comments and blank lines are fine.Quote values with spaces:
NAME="with spaces".export KEY=VALUEis 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/.envThe MCP prints a warning: on stderr if it detects looser permissions.
Development
uv venv --python 3.11
uv pip install -e '.[dev]'
pytestEnvironment variables:
TOCONLINE_CREDENTIALS_PATH— override the credentials file location.TOCONLINE_LOG_LEVEL—DEBUG,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:
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.
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_requestpath is constrained to^/api/...with no..; write methods require an explicitconfirm=true.
License
MIT.
Available Tools
67 toolsapi_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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Raw JSON:API envelope for writes, shape `{data: {type, attributes, ...}}`. | |
| path | Yes | API path starting with /api/, e.g. /api/commercial_purchases_documents. | |
| query | No | Query parameters as a flat object. | |
| method | Yes | HTTP method. | |
| confirm | No | Must be true for POST/PATCH/PUT/DELETE. Safety gate against unintended writes. | |
| flatten | No | Flatten JSON:API response. Set false to see the raw envelope. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Purchase document id (must be finalized first). | |
| confirm | No | Must be true. Communicating to the AT is a binding fiscal action. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sales document id (must be finalized first). | |
| confirm | No | Must be true. Communicating to the AT is a binding fiscal action. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City. | |
| region | No | Region / state. | |
| postcode | No | Postcode / ZIP. | |
| is_primary | No | Whether this is the entity's primary address. | |
| customer_id | No | Attach to a customer. Provide exactly one of customer_id or supplier_id. | |
| supplier_id | No | Attach to a supplier. Provide exactly one of customer_id or supplier_id. | |
| address_detail | Yes | Street / address line. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Contact name. | |
| No | Email address. | ||
| position | No | Job title / role. | |
| categories | No | Contact categories (e.g. ['general']). Defaults to ['general'] if omitted. | |
| is_primary | No | Whether this is the primary contact. | |
| customer_id | No | Attach to a customer. Provide exactly one of customer_id or supplier_id. | |
| supplier_id | No | Attach to a supplier. Provide exactly one of customer_id or supplier_id. | |
| phone_number | No | Landline / main phone. | |
| mobile_number | No | Mobile phone. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Primary email. | ||
| website | No | Website URL. | |
| cashed_vat | No | Cashed-VAT regime (regime de IVA de caixa). | |
| contact_name | No | Primary contact person. | |
| observations | No | Visible notes about the customer. | |
| phone_number | No | Landline / main phone. | |
| business_name | Yes | Legal/trading name. | |
| is_tax_exempt | No | True if the customer is VAT-exempt. | |
| mobile_number | No | Mobile phone. | |
| not_final_customer | No | True if the customer is a reseller (not a final consumer). | |
| tax_country_region | No | Tax region — `PT` (Portugal), `UE` (EU member state), `NON-UE` (non-EU). | |
| country_iso_alpha_2 | No | ISO 3166-1 alpha-2 country code, e.g. PT, US, DE. | |
| internal_observations | No | Internal-only notes (not shown to customer). | |
| tax_registration_number | No | VAT / NIF. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tax_code | No | VAT rate code — `NOR` (normal), `INT` (intermediate), `RED` (reduced), `ISE` (exempt). | |
| item_code | Yes | Unique product code. | |
| sales_price | No | Unit sales price. | |
| item_family_id | No | Item family id to associate. | |
| item_description | Yes | Product name/description. | |
| sales_price_includes_vat | No | True if sales_price already includes VAT. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ISO date (YYYY-MM-DD). | |
| lines | Yes | At least one line item. | |
| notes | No | Document notes. | |
| due_date | No | Payment due date (YYYY-MM-DD). | |
| supplier_id | Yes | TOCOnline supplier id. | |
| document_type | Yes | Purchase document type code (e.g. FC). | |
| document_series_id | No | Document series id from /api/commercial_document_series. | |
| external_reference | No | External reference (e.g. supplier invoice number). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ISO payment date (YYYY-MM-DD). | |
| gross_total | Yes | Total amount paid. | |
| supplier_id | Yes | TOCOnline supplier id. | |
| observations | No | Optional observations. | |
| bank_account_id | No | Bank account id from /api/bank_accounts, if paid from a bank account. | |
| payment_mechanism | No | TOCOnline payment mechanism code (e.g. NUM, TRA, CC). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| net_total | No | Net total of the payable line. | |
| paid_value | Yes | Amount of this payment applied to the payable. | |
| payable_id | Yes | Id of the payable being settled — a purchase document LINE id, not the document id. | |
| payment_id | Yes | Parent purchase payment id (from create_purchase_payment). | |
| gross_total | No | Gross total of the payable line. | |
| payable_type | No | Payable kind. `Purchases::DocumentLine` for a purchase document line. | Purchases::DocumentLine |
| retention_total | No | Withholding/retention amount. | |
| cashed_vat_amount | No | Cashed-VAT amount, if applicable. | |
| settlement_amount | No | Early-settlement discount amount. | |
| settlement_percentage | No | Early-settlement discount percentage. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_lineswithdocument_idlinking. The document stays as a draft (status 0) — editable, not yet fiscally valid. To issue later, callfinalize_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).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ISO 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. | |
| lines | Yes | At least one line item. | |
| notes | No | Customer-visible notes on the document. | |
| due_date | No | Payment due date (YYYY-MM-DD). | |
| finalize | No | If true, the document is issued immediately (fiscally binding). If false, it stays as a draft. | |
| customer_id | Yes | TOCOnline customer id. | |
| document_type | Yes | Document type code. Common: FT (invoice), FR (invoice-receipt), NC (credit note / rectificative), ND (debit note / rectificative), FT-FA (simplified invoice). | |
| payment_mechanism | No | TOCOnline payment mechanism code (e.g. MO, NUM, TRA, CC). | |
| external_reference | No | External reference id (e.g. PO number). | |
| parent_document_id | No | For rectificative documents (NC / ND): id of the original sales document this rectifies. Included via the `parent_documents_ids` attribute. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ISO receipt date (YYYY-MM-DD). | |
| customer_id | Yes | TOCOnline customer id. | |
| gross_total | Yes | Total amount received. | |
| observations | No | Optional observations. | |
| bank_account_id | No | Bank account id from /api/bank_accounts, if received into a bank account. | |
| payment_mechanism | No | TOCOnline payment mechanism code (e.g. NUM, TRA, CC). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| net_total | No | Net total of the receivable line. | |
| receipt_id | Yes | Parent sales receipt id (from create_sales_receipt). | |
| gross_total | No | Gross total of the receivable line. | |
| receivable_id | Yes | Id of the receivable being settled — the sales document id. | |
| received_value | Yes | Amount of this receipt applied to the receivable. | |
| receivable_type | No | Receivable kind. `Document` for a sales document. | Document |
| retention_total | No | Withholding/retention amount. | |
| cashed_vat_amount | No | Cashed-VAT amount, if applicable. | |
| settlement_amount | No | Early-settlement discount amount. | |
| settlement_percentage | No | Early-settlement discount percentage. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tax_code | No | VAT rate code — `NOR` (normal), `INT` (intermediate), `RED` (reduced), `ISE` (exempt). | |
| item_code | Yes | Unique service code. | |
| sales_price | No | Unit sales price. | |
| item_family_id | No | Item family id to associate. | |
| item_description | Yes | Service name/description. | |
| sales_price_includes_vat | No | True if sales_price already includes VAT. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| website | No | Website URL. | |
| is_taxable | No | Subject to VAT. | |
| self_billing | No | Self-billing regime (autofaturação). | |
| business_name | Yes | Legal/trading name. | |
| is_tax_exempt | No | VAT-exempt. | |
| accounting_number | No | Accounting ledger number (conta). | |
| document_series_id | No | Default document series id for this supplier. | |
| tax_country_region | No | Tax region — `PT` (Portugal), `UE` (EU member state), `NON-UE` (non-EU). | |
| country_iso_alpha_2 | No | ISO 3166-1 alpha-2 country code, e.g. PT, US, DE. | |
| internal_observations | No | Internal-only notes. | |
| is_independent_worker | No | Independent worker / sole trader (trabalhador independente). | |
| tax_exemption_reason_id | No | Tax-exemption reason id (required when is_tax_exempt). | |
| tax_registration_number | Yes | VAT / NIF. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Address id. | |
| confirm | No | Must be true. Safety gate against accidental deletes. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact id. | |
| confirm | No | Must be true. Safety gate against accidental deletes. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Customer id. | |
| confirm | No | Must be true. Safety gate against accidental deletes. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Product id. | |
| confirm | No | Must be true. Safety gate against accidental deletes. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sales document id to delete. | |
| confirm | No | Must be true. Only drafts can be deleted; finalized documents must be voided instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Service id. | |
| confirm | No | Must be true. Safety gate against accidental deletes. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Supplier id. | |
| confirm | No | Must be true. Safety gate against accidental deletes. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Purchase document id. | |
| confirm | No | Must be true. Finalization is binding. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sales document id (must currently be in draft status). | |
| confirm | No | Must be true. Finalization is fiscally binding and cannot be undone. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Address id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bank account id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bank transaction id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Customer id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Document id (sales doc, sales receipt, or purchase doc). | |
| document_kind | No | `Document` for sales documents, `Receipt` for sales receipts, `PurchasesDocument` for purchase documents. | Document |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Product id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Purchase document id. | |
| include_lines | No | If true, fetch line items separately and attach under `lines`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Purchase payment id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sales document id. | |
| include_lines | No | If true, fetch line items separately and attach under `lines`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sales receipt id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Service id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Supplier id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort. | |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| customer_id | No | Filter to a specific customer's addresses. | |
| page_number | No | 1-based page number. | |
| supplier_id | No | Filter to a specific supplier's addresses. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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, fromiban[:2](e.g.PT,GB).id_banco— bank identifier:PTaccounts: first 4 digits ofnib(e.g.0007Novo Banco,0035Caixa Geral de Depósitos) — matches AT Tabelas_apoio.Foreign accounts:
swiftwhen present, elseiban[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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort, e.g. `name`. | |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort. Default `-transaction_date,-id` (newest first, stable). Other useful: `-value` (largest debits/credits first), `transaction_date`. | -transaction_date,-id |
| fields | No | Comma-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_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. | |
| posted_date | No | Exact posted date (YYYY-MM-DD). | |
| bank_account_id | No | Filter to a specific bank account id (from list_bank_accounts). | |
| transaction_date | No | Exact transaction date (YYYY-MM-DD). TOCOnline does not support ranges. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort, e.g. `-created_at`. | |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort. | |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| customer_id | No | Filter to a specific customer's contacts. | |
| page_number | No | 1-based page number. | |
| supplier_id | No | Filter to a specific supplier's contacts. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort, e.g. `-created_at`. | |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort, e.g. `business_name`, `-created_at`. | |
| No | Exact email match. | ||
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. | |
| business_name | No | Exact match on business_name (TOCOnline does not support substring search). | |
| tax_registration_number | No | Exact VAT/NIF match. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort, e.g. `-created_at`. | |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort, e.g. `item_description`, `-created_at`. | |
| fields | No | Comma-separated subset of fields to return. | |
| item_code | No | Exact match on item_code. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. | |
| item_description | No | Exact match on item_description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Exact date match (YYYY-MM-DD). TOCOnline does not support ranges. | |
| sort | No | JSON:API sort. Defaults to `-date` (newest first). | -date,-id |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. | |
| supplier_id | No | Filter by supplier id (exact match). | |
| document_type | No | Exact document type code (supplier-invoice codes vary). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Exact date match (YYYY-MM-DD). | |
| sort | No | JSON:API sort. Defaults to `-date`. | -date |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. | |
| supplier_id | No | Filter by supplier id (exact match). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Exact date match (YYYY-MM-DD). TOCOnline does not support ranges. | |
| sort | No | JSON:API sort expression. Prefix with `-` for descending. Defaults to `-date`. Examples: `-date`, `date,document_no`, `-id`, `-gross_total`. | -date,-id |
| fields | No | Comma-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_size | No | Items per page (1-500). | |
| customer_id | No | Filter by customer id (exact match). | |
| page_number | No | 1-based page number for paging past the first page. | |
| document_type | No | Exact document type code, e.g. FT (invoice), FR (receipt), NC (credit note). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Exact date match (YYYY-MM-DD). | |
| sort | No | JSON:API sort. Defaults to `-date`. | -date,-id |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| customer_id | No | Filter by customer id (exact match). | |
| page_number | No | 1-based page number. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort, e.g. `item_description`, `-created_at`. | |
| fields | No | Comma-separated subset of fields to return. | |
| item_code | No | Exact match on item_code. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. | |
| item_description | No | Exact match on item_description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort, e.g. `business_name`, `-created_at`. | |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. | |
| business_name | No | Exact match on business_name. | |
| tax_registration_number | No | Exact VAT/NIF match. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort, e.g. `-created_at`. | |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | JSON:API sort, e.g. `-created_at`. | |
| fields | No | Comma-separated subset of fields to return. | |
| page_size | No | Items per page (1-500). | |
| page_number | No | 1-based page number. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | OAuth scope. | commercial |
| api_base | No | TOCOnline API base URL. | https://apiv1.toconline.com |
| auth_url | Yes | OAuth authorization URL (TOCOnline provides OAUTH_URL/auth). | |
| client_id | Yes | TOCOnline OAuth client id. | |
| token_url | Yes | OAuth token URL (TOCOnline provides OAUTH_URL/token). | |
| client_secret | Yes | TOCOnline OAuth client secret. | |
| redirect_port | No | Local port for the OAuth callback listener. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Id of the sales document or receipt to send. | |
| subject | Yes | Email subject line. | |
| to_email | Yes | Recipient email address. | |
| from_name | Yes | Sender display name. | |
| from_email | Yes | Sender email address (must be allowed by TOCOnline). | |
| document_kind | No | `Document` for a sales document, `Receipt` for a sales receipt. | Document |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Address id. | |
| city | No | City. | |
| region | No | Region / state. | |
| postcode | No | Postcode / ZIP. | |
| is_primary | No | Whether this is the primary address. | |
| address_detail | No | Street / address line. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact id. | |
| name | No | Contact name. | |
| No | Email address. | ||
| position | No | Job title / role. | |
| is_primary | No | Whether this is the primary contact. | |
| phone_number | No | Landline / main phone. | |
| mobile_number | No | Mobile phone. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Customer id. | |
| No | Primary email. | ||
| website | No | Website URL. | |
| cashed_vat | No | Cashed-VAT regime. | |
| contact_name | No | Primary contact person. | |
| observations | No | Visible notes. | |
| phone_number | No | Landline / main phone. | |
| business_name | No | Legal/trading name. | |
| is_tax_exempt | No | VAT-exempt flag. | |
| mobile_number | No | Mobile phone. | |
| not_final_customer | No | Reseller flag. | |
| tax_country_region | No | `PT`, `UE`, or `NON-UE`. | |
| country_iso_alpha_2 | No | ISO 3166-1 alpha-2 country code. | |
| internal_observations | No | Internal notes. | |
| tax_registration_number | No | VAT / NIF. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Product id. | |
| tax_code | No | VAT rate code — `NOR`, `INT`, `RED`, `ISE`. | |
| item_code | No | Unique product code. | |
| sales_price | No | Unit sales price. | |
| item_family_id | No | Item family id to associate. | |
| item_description | No | Product name/description. | |
| sales_price_includes_vat | No | True if sales_price already includes VAT. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Service id. | |
| tax_code | No | VAT rate code — `NOR`, `INT`, `RED`, `ISE`. | |
| item_code | No | Unique service code. | |
| sales_price | No | Unit sales price. | |
| item_family_id | No | Item family id to associate. | |
| item_description | No | Service name/description. | |
| sales_price_includes_vat | No | True if sales_price already includes VAT. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Supplier id. | |
| website | No | Website URL. | |
| is_taxable | No | Subject to VAT. | |
| self_billing | No | Self-billing regime. | |
| business_name | No | Legal/trading name. | |
| is_tax_exempt | No | VAT-exempt. | |
| accounting_number | No | Accounting ledger number. | |
| document_series_id | No | Default document series id. | |
| tax_country_region | No | `PT`, `UE`, or `NON-UE`. | |
| country_iso_alpha_2 | No | ISO 3166-1 alpha-2 country code. | |
| internal_observations | No | Internal notes. | |
| is_independent_worker | No | Independent worker / sole trader. | |
| tax_exemption_reason_id | No | Tax-exemption reason id. | |
| tax_registration_number | No | VAT / NIF. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Purchase document id to void. | |
| confirm | No | Must be true. Voiding cannot be reversed. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sales receipt id to void. | |
| confirm | No | Must be true. Voiding cannot be reversed. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v0.2.0- Changed
create_purchase_document2 fields changed- added
Input schema / $defs / PurchaseDocumentLine / properties / tax_codeAdded 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" +} - changed
Input schema / $defs / PurchaseDocumentLine / properties / tax_id / descriptionPrevious value: -"Tax id."New value: +"Tax id. Prefer `tax_code` unless you need a specific tax row."
- Changed
create_sales_document4 fields changed- changed
Input schema / $defs / SalesDocumentLine / properties / item_id / descriptionPrevious 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`." - changed
Input schema / $defs / SalesDocumentLine / properties / item_type / descriptionPrevious 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." - added
Input schema / $defs / SalesDocumentLine / properties / tax_codeAdded 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" +} - changed
Input schema / $defs / SalesDocumentLine / properties / tax_id / descriptionPrevious value: -"Tax id from /api/taxes."New value: +"Tax id from /api/taxes. Prefer `tax_code` unless you need a specific tax row."
67 tool updates
v0.1.0- First observed
api_request - First observed
auth_status - First observed
communicate_purchase_document_at - First observed
communicate_sales_document_at - First observed
create_address - First observed
create_contact - First observed
create_customer - First observed
create_product - First observed
create_purchase_document - First observed
create_purchase_payment - First observed
create_purchase_payment_line - First observed
create_sales_document - First observed
create_sales_receipt - First observed
create_sales_receipt_line - First observed
create_service - First observed
create_supplier - First observed
delete_address - First observed
delete_contact - First observed
delete_customer - First observed
delete_product - First observed
delete_sales_document - First observed
delete_service - First observed
delete_supplier - First observed
finalize_purchase_document - First observed
finalize_sales_document - First observed
get_address - First observed
get_bank_account - First observed
get_bank_transaction - First observed
get_contact - First observed
get_current_company - First observed
get_customer - First observed
get_document_pdf_url - First observed
get_product - First observed
get_purchase_document - First observed
get_purchase_payment - First observed
get_sales_document - First observed
get_sales_receipt - First observed
get_service - First observed
get_supplier - First observed
list_addresses - First observed
list_bank_accounts - First observed
list_bank_transactions - First observed
list_cash_accounts - First observed
list_contacts - First observed
list_countries - First observed
list_customers - First observed
list_item_families - First observed
list_products - First observed
list_purchase_documents - First observed
list_purchase_payments - First observed
list_sales_documents - First observed
list_sales_receipts - First observed
list_services - First observed
list_suppliers - First observed
list_tax_descriptors - First observed
list_units_of_measure - First observed
login - First observed
logout - First observed
send_document_email - First observed
update_address - First observed
update_contact - First observed
update_customer - First observed
update_product - First observed
update_service - First observed
update_supplier - First observed
void_purchase_document - First observed
void_sales_receipt
TDQS
Scored across 67 tools
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.
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.
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.
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
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP server for Invoice Ninja v5 API. Enables AI assistants to manage clients, invoices, quotes, payments, and time tracking through natural language.3219 npm2MIT
- AlicenseNot gradedqualityDmaintenanceA local MCP server that exposes QuickBooks Online data and actions as callable tools for AI assistants.MIT
- AlicenseNot gradedqualityCmaintenanceA local MCP server that wraps the DocuGenerate API to generate documents (invoices, contracts, letters) from templates via natural language commands.MIT

makeleaps-mcpofficial
AlicenseAqualityCmaintenanceUnofficial MCP server to operate MakeLeaps clients, quotes, and invoices from LLMs via the MakeLeaps API, with local execution and no telemetry.8MIT