informer-mcp
Click on "Install 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., "@informer-mcplist open invoices for acme"
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.
informer-mcp
A Model Context Protocol server for the Informer bookkeeping API (v2). It gives any MCP client direct access to your relations, sales and purchase invoices, quotations, orders, receipts, products and financial reports.
Every tool is derived from Informer's own OpenAPI document
(api.informer.eu/docs/v2). A copy ships with the
server so it works offline, and it keeps itself current — see
Keeping up with API changes.
Unofficial project. Not affiliated with or endorsed by Informer.
Quickstart
Paste this into any AI assistant that can install MCP servers:
Install the following MCP server: https://github.com/vladxyz/informer-mcp and run the local setup screen for the API keys.It clones the repository, builds it, registers the server, and opens the page where your API credentials go. Nothing is asked for in the chat, and no key is ever pasted into a conversation.
To do it yourself, first build the server:
git clone https://github.com/vladxyz/informer-mcp.git
cd informer-mcp
npm install # also builds dist/Then wire it into whichever client you use. All of them run the same thing: node, with
the path to dist/index.js.
Claude Code
claude mcp add informer -- node /absolute/path/to/informer-mcp/dist/index.jsAdd --read-only at the end for a server that cannot change anything.
Claude Desktop
Build a bundle and open it:
npm run bundle # writes informer-mcp.mcpbSettings → Extensions → Advanced settings → Install Extension… and pick the file. It carries its own dependencies, and the install dialog asks for an API key, a security code and a read-only switch — all three may be left empty, in which case the setup page opens on first run.
Settings → Connectors → Add custom connector is a different thing: it takes the URL of a remote MCP server. This one runs locally, so it installs as an extension.
Editing claude_desktop_config.json by hand works too — see
Any MCP client for the shape, and put the file at
~/Library/Application Support/Claude/ on macOS or %APPDATA%\Claude\ on Windows.
Codex and the ChatGPT desktop app
Codex CLI, the ChatGPT desktop app and the Codex IDE extension share one MCP configuration:
codex mcp add informer -- node /absolute/path/to/informer-mcp/dist/index.jsor in ~/.codex/config.toml:
[mcp_servers.informer]
command = "node"
args = ["/absolute/path/to/informer-mcp/dist/index.js"]The .mcpb bundle is a Claude Desktop format; everywhere else use the command above.
Any MCP client
The server speaks MCP over stdio, which every client configures the same way — a command and its arguments:
{
"mcpServers": {
"informer": {
"command": "node",
"args": ["/absolute/path/to/informer-mcp/dist/index.js"]
}
}
}On Windows, either double the backslashes or use forward slashes.
Credentials do not belong in this file: they live in ~/.informer-mcp.json, written by
the setup page. To pass them per client anyway, add an env block with
INFORMER_API_KEY and INFORMER_SECURITY_CODE.
First run
However you installed it, starting without credentials opens the setup page by itself.
Then ask "which administrations do you have access to?" to confirm — that calls
list_administrations and lists each alias with its company.
Related MCP server: billingo-mcp
What you get
68 tools covering all 49 documented endpoints — read and write.
Setup in the browser. Ask your assistant to open the setup page, or run
informer-mcp setup. It checks every key against the API, writes the config file, and the change takes effect without restarting anything.Follows the API. When Informer publishes a new endpoint the server picks it up and adds the tool while your client stays connected — no reinstall, no restart.
Several client administrations in one server. Bookkeepers can reach every client's books from one connection, with an
administrationargument that is required whenever more than one is configured.One question across the whole portfolio. Read-only tools accept a list of aliases or
"all"and query them concurrently, returning results keyed by client.Full request schemas. Create/update tools advertise the complete JSON Schema for their payload, so the model knows which fields exist and which are required before it sends anything.
Read-only or read-write, your choice. A
--read-onlyflag hides every tool that changes anything, and individual clients can be pinned to read-only while the rest stay writable. Allow/deny lists narrow the surface further.PDFs and attachments are decoded from base64 and can be written straight to disk.
Resilient HTTP. Timeouts, retries with
Retry-Aftersupport, and Informer's Dutch validation errors surfaced verbatim (HTTP 422: invoice_date: ongeldig).
Requirements
Node.js 20 or newer
An InformerOnline account with API access
Setting up your credentials
Just ask, in the conversation:
"I want to change my Informer administrations" "Add a new client to Informer" "My Informer API key changed"
Your assistant calls the open_setup tool and the page opens. There is no config file to
find and nothing to edit by hand — and because the page is a browser form, your API key
never has to be typed into a chat. The same page from a terminal:
npm run setup # or: informer-mcp setupStarting the server with no credentials at all opens it automatically, since that is
exactly the moment you need it. Set INFORMER_AUTO_SETUP=false to turn that off, or
INFORMER_OPEN_BROWSER=false on a headless machine to only print the URL. However it was
opened, there is only ever one page: asking again hands back the same URL.
What you see on the page
One card per administration, plus Add administration if you look after more than one:
┌─ Administration ────────────────────────────── Remove ─┐
│ ALIAS COMPANY NAME │
│ [ acme ] [ ACME BV ] │
│ Short handle you use Optional, shown in │
│ in prompts. tool descriptions. │
│ │
│ API KEY SECURITY CODE │
│ [ ••••••••••••••••• ] [ ••••••••••••••• ] │
│ │
│ ACCESS │
│ [ Read and write ▾ ] │
│ Read only hides every tool that changes this │
│ client's books. │
└────────────────────────────────────────────────────────┘
[ Add administration ] [ Verify & save ] ☐ Save without verifyingField | What to put in it |
Alias | The short name you will say in prompts — "list open invoices for acme". Letters, digits, |
Company name | Optional label, shown to the model so it knows |
API key | Created inside that administration at app.informer.eu/settings/api. |
Security code | Shown in that administration's settings at app.informer.eu/settings/account. |
Access | Read and write, or Read only to hide every tool that could change this client's books. |
Both credentials belong to one administration, so a bookkeeper adds one card per client. See Multiple client administrations.
What happens when you press Verify & save
Each key/security-code pair is tried against the API, and the page shows you the company name it actually belongs to — so a key pasted into the wrong row is obvious before anything is stored.
If a pair is rejected, nothing is written and the failing row is named. Tick Save without verifying to store it anyway, for instance when you are offline.
On success the credentials are written to
~/.informer-mcp.jsonwith0600permissions. Opened throughopen_setup, the running server picks the change up immediately — a new administration is selectable in the very next message. Opened from a terminal, restart your client.
A few things the page deliberately does:
it binds to
127.0.0.1only, and every run generates a random token that must be in the URL and in the save request, so another site in your browser cannot post to it;it never sends stored keys back to the page — existing administrations show up with their credentials blank and are kept unless you type a new value;
it refuses to save credentials the API rejects, unless you tick Save without verifying.
Nothing stops you from writing the file or the environment variables by hand; the page is a convenience, not a requirement.
Where the keys come from
The API authenticates with two headers, both required:
Environment variable | Where to find it |
| |
|
Both are scoped to one administration: the API key belongs to the administration it
was created in (GET /administration returns "the administration linked to this API
key") and the security code identifies that company. There is no endpoint that lists
administrations or switches between them.
A key grants full access to that administration's books. Treat it like a password: keep it in your environment, a secret manager, or a config file outside the repository.
Multiple client administrations
A bookkeeper with several clients needs one key/security-code pair per client
administration — an accountant user
with access to an administration can create them from its settings. Add them in the setup
page, or write ~/.informer-mcp.json (or any file named by INFORMER_CONFIG_FILE)
yourself:
{
"administrations": {
"acme": { "label": "ACME BV", "api_key": "...", "security_code": "..." },
"bakkerij": { "label": "Bakkerij de Bol", "api_key": "...", "security_code": "...", "mode": "read-only" }
}
}With more than one administration configured, every tool requires an administration
argument, advertised as an enum of your aliases:
list_sales_invoices({ "administration": "acme", "filter": "open" })There is deliberately no default. Booking an invoice into the wrong client's ledger is the one mistake that must not happen quietly, so a call without the argument is rejected by schema validation before any HTTP request is made — as is an alias you never configured.
list_administrations shows the configured aliases; pass verify: true to fetch each
company name from the API, which confirms both that the credentials work and that every
alias points at the company you think it does.
Querying several clients at once
Read-only tools also accept a list of aliases, or "all":
list_sales_invoices({ "administration": "all", "filter": "open", "records": 50 })
list_sales_invoices({ "administration": ["acme", "bakkerij"], "filter": "open" })The administrations are queried concurrently (INFORMER_FANOUT_CONCURRENCY, four at a
time by default) and the answer is keyed by alias:
{
"administrations": ["acme", "bakkerij"],
"results": {
"acme": { "pagination": { "total": 3 }, "invoices": [ ... ] },
"bakkerij": { "error": "[bakkerij] HTTP 401: Authentication failed" }
}
}Three properties worth knowing:
One client failing does not sink the query. Its entry carries an
errorand the rest still return data.The response budget is split evenly. Each administration gets
INFORMER_MAX_RESPONSE_CHARS / ncharacters, so one large client cannot crowd the others out; anything over its share comes back as{ "truncated": true, "partial": ... }.Fan-out is read-only. Tools that write, and the PDF/attachment downloads, take a single alias — their schema does not even offer the array or
"all", and the handler refuses them a second time. Creating the same invoice in twelve administrations is never an accident worth enabling.
A single administration still returns the API payload unwrapped, exactly as before.
With a single administration — the common case — nothing changes: set INFORMER_API_KEY
and INFORMER_SECURITY_CODE as usual and the argument stays optional.
Read-only or read-write
By default every tool is available. To take the writing tools away entirely, start the server with a flag:
informer-mcp --read-only # only the tools that read
informer-mcp --read-write # the default: create, update and delete tooINFORMER_READ_ONLY=true does the same thing, and the flag wins over the variable — so
you can register the same server twice in one client, once read-only for everyday
questions and once read-write for the sessions where you actually book something.
In read-only mode the write tools are not registered at all: they never appear in the tool list, so there is nothing for a model to reach for.
Per client
Individual administrations can be pinned in the config file, which is the useful shape when you may only look at some clients' books:
{
"administrations": {
"acme": { "api_key": "...", "security_code": "..." },
"bakkerij": { "api_key": "...", "security_code": "...", "mode": "read-only" }
}
}"read_only": true works as a shorthand. The most restrictive setting wins:
Server | Client | Result |
| unset | read-write |
|
| read-only |
| unset | read-only |
|
| read-only — the flag clamps everything |
So a client marked read-only can never be written to by accident, and a session started
--read-only stays that way no matter what the config file says.
When some administrations are writable and others are not, the write tools stay
registered but their administration enum only offers the writable ones. Asking to
create an invoice in a read-only client is refused before any HTTP request:
Administration(s) bakkerij are configured as read-only, so this tool cannot change them.
Writable: acme, garage.list_administrations reports the effective mode of each client, and the startup banner
summarises it: read-write: acme, garage.
Configuration
Variable | Default | Purpose |
| — | API key for a single administration. |
| — | Security code for that administration. |
|
| JSON file listing several administrations. Created by |
| — | The same JSON inline, as an environment variable. Overrides the file per alias. |
|
| Alias for the single |
| — | Human-readable name for that alias. |
| — |
|
|
| Override the API root. |
|
|
|
| (all) | Allowlist of tags and/or tool names, comma separated. |
| (none) | Denylist, applied after the allowlist. |
|
| Per-request timeout. |
|
| Retries for 408/429/5xx and network errors. |
|
| Longer tool results are truncated with a notice. Split evenly across a fan-out query. |
|
| How many administrations a fan-out query hits at the same time. |
|
|
|
|
|
|
|
| How old the cached API description may get before a background refresh. |
|
| Where the downloaded API description is cached. |
| Informer's published document | Override the API description to download. |
Filters accept either an OpenAPI tag or a tool name, and are matched case- and punctuation-insensitively:
# read-only access to invoicing data
INFORMER_TOOLS="Sales Invoices,Relations" node dist/index.js --read-only
# everything except deleting attachments
INFORMER_EXCLUDE_TOOLS=delete_sales_invoice_attachment node dist/index.jsUsing it
Once connected, ask in plain language:
"Which sales invoices from 2026 are still unpaid?" →
list_sales_invoiceswithfilter"Create a draft invoice for ACME for 10 hours of consultancy at €125." →
get_sales_invoice_optionsfor valid ledger/VAT/template ids, thencreate_sales_invoice"Download invoice 12345 as a PDF to my desktop." →
get_sales_invoice_pdfwithsave_path"Show the balance sheet for period 6 of 2026." →
get_balance_report
Conventions worth knowing
Pick the administration explicitly. With several clients configured, every tool takes
administration: "<alias>".list_administrationsmaps aliases to companies, and read-only tools also accept a list or"all".Dates are always
YYYY-MM-DD.List tools are paginated through
page(default 1) andrecords(default 20), and return apaginationobject withtotalandpages.Request payloads go in a single
bodyargument. Path and query parameters stay at the top level, soupdate_relationtakes{ "id": 42, "body": { ... } }.Call the
*_optionstool first when creating documents.get_sales_invoice_options,get_quotation_optionsand friends return the valid ledger, VAT, template, currency and payment-condition ids for your administration.Reports need explicit ranges.
get_balance_reportrequiresyear_from,year_toandperiod;get_column_balance_reportalso wants a ledger range.
PDFs and attachments
Informer returns files as base64 inside JSON. Tools that do this
(get_*_pdf, download_sales_invoice_attachment) take an optional save_path:
with
save_path— the file is decoded and written to that path, and the tool returns{ saved_to, filename, bytes, mime_type };without it — the file comes back as an inline MCP resource with the right MIME type, which large documents can make expensive in context.
Uploading works the other way around: upload_sales_invoice_attachment takes
{ filename, file } where file is base64-encoded content (max 10 MB; PDF, PNG,
JPEG, GIF, DOC(X), XLS(X)).
Tool reference
npm run tools prints this list from the current spec; npm run tools -- --md
regenerates the tables below.
Besides the endpoint tools there are three server-provided ones:
Tool | What it does |
| Which client administrations are configured, their companies, and which may be written to. |
| Opens the local page for adding, changing or removing administrations and their credentials. |
| Re-reads Informer's API description and updates the tools. |
Administration
Tool | Endpoint | Description |
|
| Get administration details |
Relations
Tool | Endpoint | Description |
|
| Get a single relation |
|
| Update a relation |
|
| Get a list of relations |
|
| Create a new relation |
Contacts
Tool | Endpoint | Description |
|
| Get a single contact |
|
| Update a contact |
|
| Create a new contact |
Sales Invoices
Tool | Endpoint | Description |
|
| Get a single sales invoice |
|
| Update a sales invoice |
|
| Get a list of sales invoices |
|
| Create a new sales invoice |
|
| Get sales invoice options |
|
| Get sales invoice PDF |
|
| Send a sales invoice |
|
| Upload an invoice-specific attachment |
|
| Download an invoice attachment |
|
| Delete an invoice-specific attachment |
Purchase Invoices
Tool | Endpoint | Description |
|
| Get a single purchase invoice |
|
| Get a list of purchase invoices |
|
| Create a new purchase invoice |
|
| Get purchase invoice options |
|
| Get purchase invoice PDF |
Recurring Invoices
Tool | Endpoint | Description |
|
| Get a single recurring invoice |
|
| Update a recurring invoice |
|
| Get a list of recurring invoices |
|
| Create a new recurring invoice |
|
| Get recurring invoice options |
Sales Orders
Tool | Endpoint | Description |
|
| Get a single sales order |
|
| Update a sales order |
|
| Get a list of sales orders |
|
| Create a new sales order |
|
| Get sales order options |
|
| Get sales order PDF |
|
| Send a sales order |
Quotations
Tool | Endpoint | Description |
|
| Get a single quotation |
|
| Update a quotation |
|
| Get a list of quotations |
|
| Create a new quotation |
|
| Get quotation options |
|
| Get quotation PDF |
|
| Send a quotation |
Salesbook
Tool | Endpoint | Description |
|
| Get a single salesbook invoice |
|
| Update a salesbook invoice |
|
| Get a list of salesbook invoices |
|
| Create a new salesbook invoice |
|
| Get salesbook options |
|
| Get salesbook PDF |
Payment Conditions
Tool | Endpoint | Description |
|
| Get all payment conditions |
Templates
Tool | Endpoint | Description |
|
| Get all templates |
VAT
Tool | Endpoint | Description |
|
| Get all VAT options |
Ledgers
Tool | Endpoint | Description |
|
| Get all ledger accounts |
Costs
Tool | Endpoint | Description |
|
| Get all cost centre accounts |
Currencies
Tool | Endpoint | Description |
|
| Get all currencies |
Journals
Tool | Endpoint | Description |
|
| Get all journals |
Subscription types
Tool | Endpoint | Description |
|
| Get all subscription types |
Attachments
Tool | Endpoint | Description |
|
| Get all attachments |
Products
Tool | Endpoint | Description |
|
| Get all products |
Receipts
Tool | Endpoint | Description |
|
| Get a single receipt |
|
| Update a receipt |
|
| Get a list of receipts |
|
| Create a new receipt |
Memorandum
Tool | Endpoint | Description |
|
| Get a single memorandum entry |
|
| Update a memorandum entry |
|
| Get a list of memorandum entries |
|
| Create a new memorandum entry |
Reports
Tool | Endpoint | Description |
|
| Get balance sheet |
|
| Get column balance |
Tool naming
Names are derived from the HTTP method and path, not from prose, so they stay stable across spec updates:
Pattern | Example |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Endpoints the naming table does not recognise fall back to <verb>_<path slug>, so a
spec refresh never produces a broken tool.
Keeping up with API changes
The tools are generated from Informer's OpenAPI document, so when Informer adds an endpoint the only thing missing is a fresh copy of that document. The server can fetch it itself.
Three layers, in order of precedence:
A downloaded copy, cached at
~/.informer-mcp.spec.json.The bundled copy in
openapi/api-docs.json, which ships with the server and always works offline.Neither is ever trusted blindly — a download must parse as an OpenAPI 3 document with at least one usable operation, or it is rejected and the current tools stay. A captive portal or a maintenance page cannot wipe your tool set.
On a schedule
Once a day, shortly after starting, the server checks for a newer document in the
background. Startup is never blocked and a failed check is logged and ignored.
INFORMER_SPEC_MAX_AGE_HOURS=0 turns it off.
On demand
The refresh_api_spec tool does the same thing when you ask for it — useful when an
endpoint you expect is missing, or an argument is rejected as unknown:
"Refresh the Informer API description and tell me what changed."
{
"adopted": true,
"api_version": "2.0.0",
"endpoints": 49,
"tools": 68,
"changes": {
"added": [{ "tool": "list_projects", "endpoint": "GET /projects" }],
"removed": [],
"changed": [{ "tool": "create_sales_invoice", "endpoint": "POST /invoices/sales",
"notes": ["body now requires: project_id"] }],
"unchanged": 66
},
"note": "The tool list has been updated; no restart is needed."
}Pass dry_run to see that report without applying anything.
The diff is deliberately specific: it names the tools that appeared and disappeared, and
for the ones that changed it says what changed — a new argument, one that is gone, a
field that is now required. That is the part a bare path comparison misses, and it is
usually the part that would otherwise surface as a puzzling 422.
Adopting a document updates the running server: new tools are registered, withdrawn ones
are removed, changed ones are re-advertised, and a tools/list_changed notification goes
out so your client reloads the list mid-session.
The copy in the repository
npm run update-spec updates the bundled document and reports which paths came and
went. That is the one to run when you want the change committed for everyone who installs
the server; refresh_api_spec only affects your own machine.
Resources
The server also exposes the OpenAPI document itself as an MCP resource at
informer://openapi.json, which is handy when you want the model to check a field
definition without guessing.
Development
npm install # install + build
npm run setup # enter credentials in the browser
npm run bundle # package as informer-mcp.mcpb for one-click install
npm run dev # run from source with tsx
npm test # vitest
npm run typecheck # tsc --noEmit
npm run build # compile to dist/
npm run tools # print the tool surface
npm run update-spec # re-download openapi/api-docs.json and report added/removed pathsProject layout
openapi/api-docs.json vendored OpenAPI 3.0 document — the source of truth
src/openapi.ts spec → operations: tool names, JSON Schema conversion
src/client.ts HTTP client: auth headers, retries, error formatting
src/tools.ts operations → MCP tools, filtering, result formatting
src/server.ts server assembly (tools + openapi resource)
src/spec.ts download, validate, cache and diff the OpenAPI document
src/setup.ts local setup server: verify credentials, write the config file
src/setup-page.ts the HTML it serves
src/index.ts stdio entry point and CLI
manifest.json extension manifest: entry point and install-time settings
scripts/update-spec.mjs refresh the vendored spec
scripts/list-tools.ts print/regenerate the tool reference
scripts/bundle.mjs stage production dependencies and pack the .mcpbAdding endpoints is normally not a code change at all — the running server picks them up
by itself, and npm run update-spec commits the same change to the bundled copy. Only
genuinely new URL shapes need a rule in the RESOURCES table in src/openapi.ts;
without one they still become tools, just with a duller name.
How schemas are converted
OpenAPI 3.0 is not quite JSON Schema. On the way to the MCP tool definition:
#/components/schemas/Xreferences become#/$defs/X, with only the transitive closure each operation actually needs inlined — so tool definitions stay small;nullable: truebecomes a["type", "null"]union;path and query parameters become top-level properties, request bodies go under
body, andadditionalProperties: falsekeeps typos from reaching the API.
Arguments are validated against that schema before any HTTP call is made.
Safety notes
This server can create, update and delete real bookkeeping records. Start with
--read-onlyif you only need reporting, pin individual clients with"mode": "read-only", and let your MCP client prompt for approval on write tools.Credentials for several clients in one process means one misrouted call touches someone else's books. The required
administrationargument, the enum of known aliases, the read-only restriction on fan-out, and the alias prefix on every error message ([acme] HTTP 422: ...) all exist for that reason. Keep the config file out of version control and readable only by you.Tools are annotated with
readOnlyHint,destructiveHintandidempotentHint, so clients that use those hints can gate the risky ones.Nothing is logged to stdout, and credentials are never echoed in tool output or sent back to the setup page.
open_setupreturns a URL, never a key — an assistant has no way to read your credentials and no reason to ask you for them in a chat.The API description is downloaded without credentials, and a document that does not parse as a usable OpenAPI 3 file is rejected rather than adopted.
License
MIT — see LICENSE, with one exception.
openapi/api-docs.json is Informer's own API description, retrieved unmodified from
their published document. It is their
work, carries no licence of its own, and is not covered by the MIT License that
applies to the rest of this repository — a licence only grants what the grantor owns.
It ships here so the server works offline and its tool surface is reproducible; at
runtime the server can fetch the current version instead. See NOTICE.
Available Tools
71 toolscreate_contactCreate a new contactC
Create a new contact.
Create a new contact person linked to a relation.
[Contacts] POST /contact
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false) and non-idempotent. The description adds no additional behavioral context such as required relation existence, uniqueness constraints, or what the API returns upon success. No contradiction exists, but no extra transparency is provided.
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 and mostly to the point, but the first sentence 'Create a new contact.' duplicates the title and adds no value. The API endpoint line is useful but not essential. It is acceptable but not optimally 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?
For a creation tool with no output schema, the description should at least hint at what the caller can expect (e.g., the created contact's ID or a confirmation). It also does not explain the 'linked to a relation' constraint or the role of the 'administration' parameter. This leaves gaps for a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention any parameters or their meanings. Schema coverage is only 50% for top-level parameters, and while the nested ContactInput has detailed fields, the description fails to compensate for the gap by explaining key inputs like relation_id or the administration selector.
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 'Create a new contact person linked to a relation,' which clearly identifies the action and the resource, and distinguishes it from relation-level tools like create_relation. However, the first sentence repeats the title and there is no explicit differentiation from update_contact, so it loses a point.
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, and does not mention any prerequisites (e.g., the relation must exist before linking). It simply restates the function without contextual or exclusionary information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_memorandum_entryCreate a new memorandum entryB
Create a new memorandum entry.
Create a new memorandum journal entry. Debit and credit totals across all lines must be equal.
Optionally link a line to an existing sales invoice, purchase invoice or receipt by providing both type and invoice_id on the line.
[Memorandum] POST /memorandum
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses two behavioral traits beyond the annotations: the balancing requirement ('Debit and credit totals across all lines must be equal') and the optional invoice-linking capability. It does not disclose the side effect that a linked invoice's paid amount is updated automatically (buried in the schema's invoice_id description) or that dates must not fall within a locked period.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact at roughly fifty words and front-loads the core purpose. It loses a point because the first two sentences are redundant: 'Create a new memorandum entry' and 'Create a new memorandum journal entry' say essentially the same thing, with the second merely adding 'journal'.
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 creation tool with a well-documented schema this is adequate, but with no output schema the return value is left to inference, and the description omits behavioral outcomes the agent should know: the automatic paid-amount update on linked invoices (only in the schema) and failure conditions such as unbalanced lines or locked-period rejections.
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?
Top-level schema coverage is only 50% since the body parameter lacks a direct description, but the nested MemorandumInput schema is rich with per-field descriptions, an example, and type+invoice_id pairing rules. The description adds the key debit=credit invariant and repeats the type+invoice_id pairing rule, reinforcing rather than significantly extending what the schema already documents.
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 plus resource ('Create a new memorandum journal entry') and the word 'journal' differentiates it from invoice/receipt/order creation siblings. However, the opening sentence 'Create a new memorandum entry' simply restates the tool name and title, adding no information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance or named alternatives. The note that a line may optionally be linked to an existing sales invoice, purchase invoice, or receipt implies this tool handles manual journal postings with optional invoice linking, but the description never states when to choose this over create_sales_invoice/create_purchase_invoice/create_receipt or contrasts it with update/list_memorandum_entry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_purchase_invoiceCreate a new purchase invoiceA
Create a new purchase invoice.
Create a new purchase invoice. Use the /invoices/purchase/options endpoint first to determine valid combinations of vat_id and ledger_id.
The amount field per line is the gross amount (excl or incl VAT depending on vat_option). The vat_amount is the VAT portion of that amount.
[Purchase Invoices] POST /invoices/purchase
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description clarifies important behavioral semantics: amount is the gross amount and vat_amount is the VAT portion derived from it. It also identifies the exact endpoint path, adding context that the agent would otherwise have to infer.
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 and front-loaded, but it unnecessarily repeats 'Create a new purchase invoice' verbatim in the first two sentences. The endpoint line and semantic clarifications are useful, but the duplication prevents a higher score.
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 create operation with a nested object schema and no output schema, the description conveys the key prerequisite and the amount/VAT semantics. However, it does not mention response behavior, validation failures, or the optional nature of fields like collect and pdf, so complete guidance for invocation is still somewhat lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by explaining that each line's amount is the gross amount and that vat_amount is the VAT portion of that amount. This nuance is not fully explicit in the schema and helps the agent compute or validate invoice lines correctly, even though many parameters are already well described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Create a new purchase invoice' and the endpoint 'POST /invoices/purchase'. It clearly identifies the object being created, though it does not explicitly contrast with sibling tools like create_sales_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit prerequisite: call /invoices/purchase/options first to determine valid vat_id and ledger_id combinations. This provides actionable usage context, but it does not state when this tool should be preferred over alternatives or list exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_quotationCreate a new quotationA
Create a new quotation.
Create a new quotation. Use the /quotations/options endpoint first to determine valid combinations of vat_id, ledger_id and vat_option.
For administrations in Austria (AT) or Germany (DE), the delivery_date field is also required.
[Quotations] POST /quotations
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false and idempotentHint=false, so the 'Create a new quotation' statement is consistent with them. The description adds a validation step (options endpoint) and a jurisdiction-specific field requirement, but it does not describe response behavior or other side effects. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but unnecessarily repeats 'Create a new quotation.' in the first two sentences, wasting a sentence. The remaining content is efficient and front-loaded with the most important prerequisite.
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 rich input schema and the annotations, the description provides adequate high-level context with the options prerequisite and AT/DE condition. However, it does not reference the get_quotation_options sibling tool by name, nor does it describe the return value, which would make it more complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes several fields, but vat_option has no description. The description explains that vat_id, ledger_id, and vat_option must be validated via the options endpoint, which adds actionable meaning beyond the raw schema. The AT/DE delivery_date requirement is also useful, even though the schema already mentions 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 states 'Create a new quotation,' which is a specific verb-resource pair that clearly distinguishes it from sibling tools like create_sales_invoice or create_purchase_invoice. The additional context about /quotations/options and AT/DE delivery_date further confirms it is about quotations specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete preconditions: use the /quotations/options endpoint first to determine valid vat_id, ledger_id, and vat_option combinations, and the delivery_date requirement for AT/DE administrations. It does not explicitly mention alternatives like update_quotation, but the context is clear enough for an agent to know when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_receiptCreate a new receiptC
Create a new receipt.
Create a new receipt.
[Receipts] POST /receipts
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, so the mutation nature is known. The description adds no extra behavioral details such as required permissions, side effects, or rate limits. It doesn't contradict annotations, so the baseline of 3 applies.
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 contains a redundant duplicate sentence ('Create a new receipt.') that provides no additional value. While short, the repetition is unnecessary and wastes space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a nested body schema and many sibling tools, the description provides almost no context beyond the endpoint. No information about required vs optional fields, example usage, or when to choose this over related create tools. The agent must infer everything from 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?
The schema provides detailed descriptions for all properties inside the body object, even though the top-level body parameter lacks a direct description. The tool description itself adds no parameter guidance, but the schema's coverage is sufficient enough to not be a major gap. With 50% formal coverage, the description does not compensate, but the schema carries the weight.
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 new receipt' with a specific verb and resource, and includes the endpoint for reference. However, it does not distinguish this tool from siblings like create_purchase_invoice or create_sales_invoice, so it doesn't fully earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description merely repeats the tool's name and endpoint, offering no context about scenarios, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_recurring_invoiceCreate a new recurring invoiceA
Create a new recurring invoice.
Create a new recurring invoice. Use the /invoices/recurring/options endpoint first to determine valid combinations of vat_id, ledger_id and vat_option.
Lines can be either regular lines (with qty, amount, vat_id, ledger_id) or info lines (with info=true and description only).
[Recurring Invoices] POST /invoices/recurring
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false, destructiveHint=false, and idempotentHint=false, covering the write nature and non-idempotency. The description adds a procedural note about checking option combinations but does not disclose the response format, potential side effects, or required permissions. It does not contradict the annotations, so a mid score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description begins by repeating the title verbatim ('Create a new recurring invoice.') which is redundant. The subsequent information about options and line types is valuable and well-structured, but the duplication and the trailing '[Recurring Invoices] POST /invoices/recurring' line add noise. It is not overly long, but could be tighter.
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 a rich input schema with many parameters and nested objects, but no output schema. The description provides critical guidance on line types and the prerequisite options call, but omits any information about the response or what happens after creation. Given the complexity of the operation and the lack of an output schema, a description that does not explain return values or follow-up actions is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context beyond the schema by explaining the difference between regular lines (qty, amount, vat_id, ledger_id) and info lines (info=true and description). It also mentions the dependency between vat_id, ledger_id, and vat_option, which is not immediately obvious from the schema alone. Schema descriptions are already detailed for many fields, but the description helps prioritize prerequisites.
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 a new recurring invoice' with a specific verb and resource. It also explains the two line types (regular vs info) and references the options endpoint, which helps distinguish it from sibling tools like create_sales_invoice or create_purchase_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to use the /invoices/recurring/options endpoint first to validate VAT/ledger combinations, providing a prerequisite step. It explains when to use info lines versus regular lines. However, it does not explicitly mention when not to use this tool or compare with alternatives, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_relationCreate a new relationA
Create a new relation.
Create a new relation. The relation_number is optional; if omitted or 0, a new number is generated. The fields sales_invoice_template_id and payment_condition_id are optional; default values will be used if not provided.
When relation_type is 0 (company): company_name is required, firstname/surname are forbidden. When relation_type is 1 (private): firstname and surname are required, company_name is forbidden.
[Relations] POST /relations
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is not read-only, not idempotent, and not destructive. The description adds valuable behavioral context: relation_number generation when omitted or 0, default values for invoice template and payment condition, and strict field requirements based on relation_type. This goes beyond the annotations and helps the agent understand side effects and constraints.
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 structurally organized with a clear opening, optional/required field notes, and type-specific rules. However, it redundantly repeats 'Create a new relation' at the start, adding no value. The core content is concise, but the duplication and slightly unstructured flow prevent a higher score.
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 essential context for a creation tool: what happens when optional identifiers are omitted, which fields are required or forbidden per relation type, and that defaults apply. The rich input schema provides detailed field descriptions and examples. There is no output schema to explain return values, but for a create operation the input constraints are the critical part. Minor gaps like error handling or authentication are not necessary given the 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?
Schema description coverage is 50%, meaning the schema documents many fields but not all. The description adds key semantic details for relation_number, sales_invoice_template_id, payment_condition_id, and the relation_type-specific required/forbidden fields. While it doesn't cover every parameter, the input schema already provides descriptions for most fields, so the description compensates reasonably for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Create a new relation.' It distinguishes itself from siblings like update_relation and get_relation by its focus on creation. However, it repeats the phrase 'Create a new relation' twice and doesn't explicitly name sibling alternatives, so it's clear but not fully differentiated.
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: use this tool to create a new relation, with conditions for company vs private types. It does not explicitly state when not to use it or mention alternatives like update_relation for modifications. The guidance is implicit rather than explicit, so it earns a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_salesbook_invoiceCreate a new salesbook invoiceA
Create a new salesbook invoice.
Create a new salesbook invoice. Use the /salesbook/options endpoint first to determine valid combinations of vat_id, ledger_id and vat_option.
A PDF file can optionally be attached as a base64-encoded string.
For administrations in Austria (AT) or Germany (DE), the delivery_date field is also required.
[Salesbook] POST /salesbook
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-read-only, non-idempotent, non-destructive write operation. The description adds valuable behavioral context beyond the annotations: a prerequisite call to /salesbook/options, conditional requiredness of delivery_date for certain administrations, and the optional base64 PDF attachment. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description repeats the opening sentence verbatim: 'Create a new salesbook invoice.' appears twice, wasting a sentence. The remaining content is useful but would benefit from tighter editing. This is not conciseness; it is 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 complex POST tool with a nested body object and no output schema, the description provides essential preconditions (options endpoint, AT/DE delivery_date) but omits details like how the response is structured, common error cases, or how to construct the full body beyond hints. 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 only 50% at the top level (body is undocumented). The description compensates by clarifying important parameter relationships: valid combinations of vat_id, ledger_id, and vat_option must be determined via an options endpoint, and delivery_date is conditionally required. It also restates the optional base64 PDF, though that is already in 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 'Create a new salesbook invoice' with a specific verb and resource, distinguishing it from sibling tools like create_sales_invoice by the explicit 'salesbook' qualifier. The endpoint hint '[Salesbook] POST /salesbook' further anchors what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete usage guidance: 'Use the /salesbook/options endpoint first to determine valid combinations of vat_id, ledger_id and vat_option.' It also notes the AT/DE requirement for delivery_date. However, it does not explicitly state when to prefer this tool over alternatives like create_sales_invoice, leaving that distinction implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sales_invoiceCreate a new sales invoiceA
Create a new sales invoice.
Create a new sales invoice. Use the /invoices/sales/options endpoint first to determine valid combinations of vat_id, ledger_id and vat_option.
Lines can be either regular lines (with qty, amount, vat_id, ledger_id) or info lines (with info=true and description only).
For administrations in Austria (AT) or Germany (DE), the delivery_date field is also required.
[Sales Invoices] POST /invoices/sales
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description adds context about prerequisites and line types, but it does not disclose response behavior, error scenarios, or permission needs. The guidance to call an options endpoint first is a useful behavioral nuance, but overall the description does not go beyond what annotations and common sense imply for a create 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?
The description is fairly concise and front-loaded with the main purpose, but it repeats 'Create a new sales invoice.' twice in consecutive sentences. The other sentences carry relevant operational details, but the redundancy wastes space and slightly undermines the efficiency.
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 (nested line items, many validation rules) and the absence of an output schema, the description could be more complete. It covers key prerequisites and line structure but omits what the response will contain (e.g., the created invoice object or errors). The rich schema compensates for much of the payload detail, so this is adequate but not exceptional.
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 is detailed with per-property descriptions, covering the body object thoroughly. The description adds high-value semantic guidance: the distinction between regular and info lines, and the mandatory delivery_date for AT/DE administrations. It also points to the options endpoint to resolve valid parameter combinations, which directly aids parameter selection beyond schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Create a new sales invoice.' It distinguishes itself from sibling invoice tools (e.g., create_purchase_invoice) and related order/quotation tools by explicitly naming the sales invoice resource. The additional endpoint reference reinforces the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete pre-usage guidance: call /invoices/sales/options first to determine valid vat_id, ledger_id, and vat_option combinations. It also notes country-specific requirements for AT/DE administrations. However, it does not explicitly contrast with alternative tools (e.g., create_purchase_invoice), so the usage context is clear but not fully exclusive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sales_orderCreate a new sales orderA
Create a new sales order.
Create a new sales order. Requires the trade module to be active. Use the /orders/sales/options endpoint first to determine valid combinations of vat_id, ledger_id and vat_option.
For administrations in Austria (AT) or Germany (DE), the delivery_date field is also required.
[Sales Orders] POST /orders/sales
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read-only, non-idempotent mutation, and the description adds useful behavioral constraints beyond them: the trade-module prerequisite, the need to pre-validate VAT/ledger combinations, and the country-specific required field. It does not contradict the annotations and adds context without getting into response 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 compact and roughly front-loaded, but it opens with two identical sentences ('Create a new sales order.' repeated). That redundancy means not every sentence earns its place, which keeps it from being a 4 or 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex creation endpoint with no output schema, the description covers the non-obvious prerequisites and conditional requirements needed to invoke it successfully. It omits response behavior, but the rich schema covers required fields and enums, so no critical invocation information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema coverage, the description compensates by explaining cross-parameter constraints not inferable from the schema: valid combinations of vat_id, ledger_id, and vat_option, and the AT/DE delivery_date requirement. The input schema separately documents the individual field meanings and required fields, so the combination is strong.
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 the exact action and resource ('Create a new sales order') and includes the endpoint POST /orders/sales, so an agent can tell it apart from the get/update/list/send sales-order siblings. It is clear but restates the tool title without adding additional scope or explicit differentiation among the create_* siblings, so not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives actionable preconditions: the trade module must be active, the /orders/sales/options endpoint should be consulted first, and delivery_date is mandatory for AT/DE administrations. This is clear context for when to call the tool, though it does not explicitly list exclusions or compare with alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_sales_invoice_attachmentDelete an invoice-specific attachmentADestructiveIdempotent
Delete an invoice-specific attachment.
Delete a document-specific attachment from a sales invoice. The file is permanently removed from storage.
[Sales Invoices] DELETE /invoices/sales/{id}/attachments/{attachment_id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales invoice. | |
| attachment_id | Yes | The ID of the attachment to delete. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds meaningful behavioral context beyond annotations by stating the file is 'permanently removed from storage' and showing the HTTP DELETE endpoint. This discloses the irreversible nature of the operation, which is valuable for an AI agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and includes the important permanent-deletion warning plus the endpoint reference. The first sentence repeats the title, which is a minor redundancy, but overall the structure is front-loaded and economical. It does not waste space with unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation, the description provides the essential context: what is being deleted, the fact that deletion is permanent, and the endpoint structure clarifying the ID roles. There is no output schema, but none is strictly necessary for a delete operation. Missing details like error behavior would be nice but are not critical for tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage for all three parameters, including id, attachment_id, and administration. The description does not add any parameter-specific semantics beyond what the schema provides. Baseline is therefore appropriate because the schema carries the explanatory burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb 'delete', the resource ('document-specific attachment'), and the container ('sales invoice'). The phrase 'permanently removed from storage' further clarifies the nature of the operation. This distinguishes the tool from sibling upload/download attachment tools without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context: this tool deletes a specific attachment from a sales invoice. It does not explicitly name alternatives or exclusions, but the targeted resource scope is clear and the operation is unambiguous. Because it lacks explicit when-not-to-use guidance, it is slightly below a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_sales_invoice_attachmentDownload an invoice attachmentARead-onlyIdempotent
Download an invoice attachment.
Download the file content of an attachment linked to a sales invoice, base64-encoded. Works for both shared library attachments and invoice-specific document attachments, as long as the attachment is linked to this invoice. The file content is only returned by this endpoint, not in the invoice GET response.
[Sales Invoices] GET /invoices/sales/{id}/attachments/{attachment_id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales invoice. | |
| save_path | No | Optional absolute file path to write the decoded file to. When omitted the file is returned inline as a base64 resource. | |
| attachment_id | Yes | The ID of the attachment to download. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent safety, so the bar is lower. The description adds useful behavioral context: the response is base64-encoded, the content is exclusive to this endpoint, and both shared library and invoice-specific attachments are supported. This goes beyond annotations by explaining the response format and scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short paragraphs with the core verb and resource front-loaded. The first sentence repeats the title, but the second sentence packs essential facts efficiently, and the endpoint reference is a compact, useful addition. No unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the base64-encoded response and the alternative of using save_path (via schema). It also clarifies the relationship between attachments and invoices. It does not mention how to obtain the attachment_id or handle errors, but for a simple download operation with annotations covering safety, the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% parameter coverage, so the baseline is 3. The description adds an implicit relationship constraint—the attachment must be linked to the invoice—which is not explicitly stated in the schema property descriptions. This clarifies the semantics of the id and attachment_id parameters beyond their individual type 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 uses a specific verb ('Download') and resource ('invoice attachment'), and clearly states the scope: both shared library and invoice-specific attachments linked to the invoice. It also differentiates from the invoice GET endpoint by noting the file content is only returned here. This makes the tool's purpose unambiguous and distinct 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 explains that the endpoint works for both attachment types and explicitly notes that the file content is not returned in the invoice GET response, which guides the agent away from the more general GET endpoint. However, it does not explicitly name alternatives like list_attachments or upload/delete attachment tools, so the guidance is clear context rather than an explicit when-to-use vs not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_administrationGet administration detailsARead-onlyIdempotent
Get administration details.
Get details about the administration linked to this API key, including address, contact information, tax IDs and active modules.
[Administration] GET /administration
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to restate safety. It adds useful behavioral context by specifying what details are returned (address, contacts, tax IDs, active modules) and the endpoint. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core purpose, followed by useful detail and the endpoint reference. The opening sentence 'Get administration details' is redundant with the title/name, which prevents a perfect score, but the overall structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only endpoint with one optional, well-documented parameter and no output schema, the description provides enough information to call the tool correctly and set expectations about returned content. It could explicitly mention list_administrations for wider enumeration, but that is not essential for invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single optional parameter is fully documented with an enum and description. The tool description adds no additional parameter guidance, but the schema already carries the necessary meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get details') and names the resource ('administration linked to this API key'), with concrete content such as address, contact information, tax IDs, and active modules. It is clear, though it does not explicitly contrast itself with the sibling list_administrations beyond the singular ownership framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this tool returns details for the administration associated with the API key, which distinguishes it from broader listing operations. It does not explicitly name alternatives or exclusions, but the usage context is sufficiently clear for a single-administration read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balance_reportGet balance sheetBRead-onlyIdempotent
Get balance sheet.
Get a balance sheet report for a given year range and period.
[Reports] GET /reports/balance
| Name | Required | Description | Default |
|---|---|---|---|
| period | Yes | Accounting period number (1–13). | |
| year_to | Yes | End year of the report (e.g. 2024). | |
| year_from | Yes | Start year of the report (e.g. 2024). | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the HTTP endpoint and the year/period scope but does not disclose additional behaviors like return format, pagination, or any limitations. Since annotations cover the key behavioral traits, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and gets to the point. It opens with the tool's purpose, then provides a one-sentence summary and an endpoint reference. Minor redundancy between 'Get balance sheet' and 'Get a balance sheet report' but overall 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 read-only report tool with complete schema and annotations, the description provides the essential purpose and parameters. However, it lacks any mention of when to use this versus the sibling get_column_balance_report, and it does not clarify what the returned report contains. Given the sibling ambiguity, this is a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters (period, year_to, year_from, administration) are already documented in the schema. The description adds no semantic detail beyond what the schema provides. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get') and resource ('balance sheet report') with scope ('for a given year range and period'), and the tool name matches its purpose. It does not explicitly distinguish itself from the sibling get_column_balance_report, but the term 'balance sheet' provides enough semantic separation.
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 get_column_balance_report. The description only states what the tool does, not when to prefer it or what context it applies to. There is no mention of 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_column_balance_reportGet column balanceBRead-onlyIdempotent
Get column balance.
Get a column balance (proef- en saldibalans) for a given year, period range and ledger account range.
[Reports] GET /reports/column-balance
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Fiscal year (e.g. 2024). | |
| period_to | Yes | End period number (1–13). | |
| period_from | Yes | Start period number (1–13). | |
| administration | No | The client administration to act on. Only one is configured: default. | |
| ledger_number_to | Yes | End of the ledger account number range. | |
| ledger_number_from | Yes | Start of the ledger account number range. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the endpoint path and reinforces that this is a report retrieval. No behavioral surprises are disclosed, but none are needed beyond the annotations; no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and the substantive sentence is helpful, but it opens with a redundant 'Get column balance.' that duplicates the title. The endpoint line is useful, though the first sentence could be removed without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only report tool with fully documented parameters and safety annotations, the description is functionally complete for invoking the tool correctly. It lacks explicit return-format information, but no output schema exists and the agent can still call it successfully based on the provided 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?
The input schema provides descriptions for all six parameters, including ranges and the administration enum, so schema description coverage is 100%. The description only restates that the report uses year, period range, and ledger account range, adding no meaningful detail 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 uses a clear verb 'Get' and identifies a specific resource: a column balance (proef- en saldibalans) filtered by year, period, and ledger account range. It accurately describes the operation and is not a tautology, but it does not explicitly differentiate itself from the sibling get_balance_report tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a column balance report is needed for given year, period range, and ledger account range. It provides no explicit guidance about when to choose this tool over alternatives such as get_balance_report, and no exclusions or alternative conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactGet a single contactBRead-onlyIdempotent
Get a single contact.
Get a single contact person by ID.
[Contacts] GET /contact/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the contact. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, fully covering the safety profile. The description adds only the endpoint and confirms a read operation, consistent with annotations. It does not add context about not-found behavior, authentication, or response shape, but the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, but 'Get a single contact.' and 'Get a single contact person by ID.' are redundant restatements of the same purpose. The endpoint line is useful, but the repetition wastes the front-loaded position and could have been merged into one sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with two params, no output schema, and strong annotation coverage, the package is mostly adequate. The main gap is the missing differentiation from get_relation and lack of guidance on when to use this tool over list/other get operations. Minor missing details like not-found behavior are tolerable at this complexity level.
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 both id and administration already well documented in the schema. The description adds no parameter-specific detail beyond restating 'by ID.' With full schema coverage, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get a single contact person by ID.' The endpoint '[Contacts] GET /contact/{id}' reinforces the exact operation. It doesn't explicitly distinguish contact from the sibling get_relation, which could be confused, but the 'contact person' phrasing provides partial differentiation.
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 when-to-use or when-not-to-use guidance is provided. There is no mention of alternatives such as list_relations or get_relation, nor any condition that selects this tool over them. Usage must be entirely inferred from the name and generic 'by ID' phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memorandum_entryGet a single memorandum entryARead-onlyIdempotent
Get a single memorandum entry.
Get a single memorandum journal entry by ID, including all line items.
[Memorandum] GET /memorandum/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the memorandum entry. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds that the operation returns the entry including all line items and shows the endpoint path, providing useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core action in the first sentence. The endpoint line and the line-items detail add value, though the first sentence is slightly redundant with the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-item GET tool with only two parameters and strong annotations, the description is complete enough for correct invocation. It states the line-item return behavior even without an output schema. Minor additional details about error behavior are not essential here.
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 describes both parameters fully with 100% coverage, so the description does not need to add parameter details. It mentions the ID-based lookup, but this does not meaningfully extend the schema documentation. 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 uses a specific verb and resource: 'Get a single memorandum entry' and clarifies 'by ID, including all line items.' This clearly distinguishes it from list_memorandum_entries and other mutation tools such as create_memorandum_entry and update_memorandum_entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies use when retrieving one specific memorandum entry by ID, contrasting with listing operations. It does not explicitly state when not to use it, but the single-entry language and sibling tool names provide sufficient context for an agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_purchase_invoiceGet a single purchase invoiceARead-onlyIdempotent
Get a single purchase invoice.
Get a single purchase invoice by ID, including all line items.
[Purchase Invoices] GET /invoices/purchase/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the purchase invoice. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that line items are included, which is useful but not a major behavioral detail. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded, with the essential action and scope early. There is minor redundancy with the title repetition and the endpoint line, but the overall structure is efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get operation with two well-documented parameters and read-only annotations, the description is adequate. It states the retrieval purpose, the ID parameter meaning, and the inclusion of line items. No output schema exists, but the description gives sufficient 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 description coverage is 100%: both 'id' and 'administration' are fully described in the schema. The description does not add extra parameter meaning beyond what the schema provides, matching 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 specific verb 'Get' with a single purchase invoice resource, and explicitly includes line items. This distinguishes it from list_purchase_invoices and other related tools by emphasizing the singular scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use this tool when you need a single purchase invoice by ID. However, it does not explicitly state when to prefer alternatives like list_purchase_invoices, nor does it provide conditions or exclusions. Usage context is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_purchase_invoice_optionsGet purchase invoice optionsARead-onlyIdempotent
Get purchase invoice options.
Get the available VAT rates with their compatible ledger accounts for creating purchase invoices.
[Purchase Invoices] GET /invoices/purchase/options
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds valuable behavioral context by specifying the exact type of data returned (VAT rates with compatible ledger accounts), which goes beyond what annotations provide. It also gives the API endpoint, offering additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and an API path line. The first sentence 'Get purchase invoice options' is somewhat redundant with the title, but the second sentence carries essential information. Overall, it is well-structured and wastes little space, though the slight redundancy prevents a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description adequately explains what the tool returns (VAT rates with ledger accounts). The single optional parameter is fully documented in the schema. For a simple options-fetching tool, the description is complete enough for an agent to invoke it correctly without ambiguity.
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 fully describes the single optional 'administration' parameter with enum 'default' and a clear description. The description does not add any additional parameter semantics, but because schema coverage is 100%, 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 explicitly states it retrieves purchase invoice options, specifically 'the available VAT rates with their compatible ledger accounts for creating purchase invoices.' This is a clear verb+resource+scope that differentiates it from sibling tools like get_sales_invoice_options, which would focus on sales invoices.
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 preparing to create a purchase invoice by mentioning 'for creating purchase invoices,' but it does not explicitly state when to use this tool versus alternatives or provide exclusion criteria. There is no explicit 'when to use' or 'when not to use' guidance, so the usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_purchase_invoice_pdfGet purchase invoice PDFARead-onlyIdempotent
Get purchase invoice PDF.
Download the PDF attached to a purchase invoice as a base64-encoded string.
[Purchase Invoices] GET /invoices/purchase/pdf/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the purchase invoice. | |
| save_path | No | Optional absolute file path to write the decoded file to. When omitted the file is returned inline as a base64 resource. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
注解已提供readOnlyHint=true、idempotentHint=true、destructiveHint=false,描述额外补充了返回base64字符串、可通过save_path写入文件,以及对应的REST端点。这些信息增加了注解之外的上下文,且与注解不矛盾。
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?
描述简短,包含一句核心功能说明和一行API端点信息。标题与第一句略有重复,但整体信息密度高,没有冗余填充,可快速把握要点。
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?
工具简单,参数完整且带描述,注解覆盖安全属性,描述说明了返回格式和可选的保存路径。虽然缺少输出schema,但base64和save_path已足够代理正确调用,没有明显信息缺口。
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覆盖100%,每个参数(id、save_path、administration)都有清晰描述。描述本身未额外解释参数,但schema已充分承担说明责任,符合基线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?
描述明确陈述了动词“Download”和资源“purchase invoice PDF”,并具体说明输出为base64-encoded string。与兄弟工具get_sales_invoice_pdf通过“purchase invoice”明确区分,无需打开schema即可理解用途。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
描述未显式说明何时使用或何时不使用,但隐含了使用场景:当需要下载购买发票的PDF时。没有提及替代工具或排除条件,相比清晰给出when/when-not的基准有所欠缺。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quotationGet a single quotationARead-onlyIdempotent
Get a single quotation.
Get a single quotation by ID, including all line items.
[Quotations] GET /quotations/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the quotation. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds context about line items and the GET endpoint, but it does not disclose error behavior or response shape beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose, and the endpoint and line-item detail are useful. The opening line repeats the title, so it is not perfectly zero-waste, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool, the description, annotations, and fully documented schema provide everything an agent needs to invoke it correctly. It identifies the endpoint, required ID, optional administration parameter, and the fact that line items are included in the result.
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 input schema already documents both parameters sufficiently. The description does not add new parameter-level meaning, but the baseline of 3 is appropriate because the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), names the resource ('quotation'), and narrows the scope to a single item by ID, including line items. This clearly distinguishes it from sibling tools like list_quotations and create_quotation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys that this tool is for retrieving one quotation by ID, which establishes a clear usage context. It does not explicitly name alternatives or exclusions, but the by-ID requirement sufficiently differentiates it from list-oriented siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quotation_optionsGet quotation optionsARead-onlyIdempotent
Get quotation options.
Get the available VAT rates with their compatible ledger accounts and VAT options for creating quotations.
[Quotations] GET /quotations/options
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds the endpoint and the specific contents returned, but it does not add deeper behavioral context such as response shape, authentication needs, or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the key information about VAT rates and ledger accounts. However, the opening sentence simply repeats the tool title, which is slightly redundant but not damaging.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does a reasonable job of explaining what the tool returns by naming VAT rates, compatible ledger accounts, and VAT options. It lacks detail on response format or errors, but the endpoint is simple, has no required parameters, and annotations cover the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single 'administration' parameter, including an enum and a clear description. The tool description does not need to repeat this and adds no additional 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 states a specific verb and resource ('Get quotation options') and elaborates on the exact contents: VAT rates, compatible ledger accounts, and VAT options for creating quotations. This clearly distinguishes it from sibling get_*_options tools for other document types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for creating quotations' implies the intended use case, but the description gives no explicit guidance on when to choose this over alternatives like get_sales_invoice_options or list_vat_options. No exclusions or alternative routing are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quotation_pdfGet quotation PDFARead-onlyIdempotent
Get quotation PDF.
Download the PDF of a quotation as a base64-encoded string.
[Quotations] GET /quotations/pdf/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the quotation. | |
| save_path | No | Optional absolute file path to write the decoded file to. When omitted the file is returned inline as a base64 resource. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds behavioral detail by specifying that the PDF is returned as a base64-encoded string, which is valuable and not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and to the point. The first line repeats the title, but the following sentences add value by explaining the output format and the endpoint. It is efficient without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only download tool with full schema coverage and supportive annotations, the description is complete enough. It explains the output format (base64) and clearly identifies the resource, so an agent can invoke it correctly without additional 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?
The schema already provides 100% description coverage for all three parameters. The description mentions base64 encoding, which relates to the save_path parameter, but does not add detailed syntax or default behavior 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 verb 'Download' and the resource (PDF of a quotation) plus the output format (base64-encoded string). It distinguishes itself from sibling tools like get_sales_invoice_pdf or get_purchase_invoice_pdf by naming the specific entity 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 provides clear context on what the tool does and implies when it would be used (whenever a quotation PDF is needed). It does not explicitly list exclusions or alternatives, but the purpose is specific enough that an agent would not confuse it with other PDF getters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_receiptGet a single receiptCRead-onlyIdempotent
Get a single receipt.
Get a single receipt by ID.
[Receipts] GET /receipts/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the receipt. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context such as return structure, error handling, or access requirements, so it does not go beyond what annotations provide.
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 but redundant: the first sentence 'Get a single receipt.' is essentially repeated by 'Get a single receipt by ID.' in the second sentence. The endpoint line adds some useful context, but the duplication wastes space and weakens clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with full schema coverage and rich annotations, the description is mostly adequate. It includes the endpoint path, which is helpful, but lacks any context about how this receipt retrieval relates to other receipt operations or what the caller can do with the result.
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 both parameters (id and administration) already documented clearly. The description adds no extra meaning beyond the endpoint path hint, so the schema carries the semantic burden; this meets the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get' and resource 'single receipt', so an agent knows exactly what operation this performs. However, it does not distinguish this from sibling get_* tools beyond the resource name, and it largely repeats the title.
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 list_receipts, create_receipt, or update_receipt. There is no mention of prerequisites, typical use cases, or alternatives, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recurring_invoiceGet a single recurring invoiceARead-onlyIdempotent
Get a single recurring invoice.
Get a single recurring invoice by ID, including all line items.
[Recurring Invoices] GET /invoices/recurring/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the recurring invoice. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint, idempotentHint, and destructiveHint=false. The description adds useful context by noting that the response includes all line items and by showing the exact REST endpoint. It does not disclose error behavior or auth requirements, but annotations lower the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core behavior, and the endpoint details are useful. However, the first sentence 'Get a single recurring invoice.' redundantly repeats the title before the more informative follow-up sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-resource GET with strong annotations and full schema coverage, the description provides enough information: required ID, optional administration, and the endpoint. It could be slightly more complete by explicitly directing collection needs to list_recurring_invoices, but this is not a blocking gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already well documented. The description reinforces that lookup is by ID but adds no meaning beyond the schema, meeting the baseline for schema-covered 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 a specific action ('Get') on a specific resource ('a single recurring invoice'), further clarified by 'by ID, including all line items.' This distinguishes it from sibling tools like list_recurring_invoices, which operate on collections, and update/create variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: use this when you need one recurring invoice identified by its ID. It does not explicitly name alternatives or exclusion cases, but the 'single... by ID' phrasing strongly implies the appropriate condition and separates it from list-oriented tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recurring_invoice_optionsGet recurring invoice optionsARead-onlyIdempotent
Get recurring invoice options.
Get the available VAT rates with their compatible ledger accounts and VAT options. Use this endpoint to determine valid combinations of vat_id, ledger_id and vat_option when creating recurring invoices. Per VAT rate the usable ledger accounts and compatible vat_option values are returned.
[Recurring Invoices] GET /invoices/recurring/options
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, fully covering the safety profile. The description adds minimal behavioral context by noting that per VAT rate the usable ledger accounts and vat_option values are returned, but this is more return-value detail than behavioral disclosure. No contradictions; the description aligns with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the tool name and purpose, then details the usage. The only minor redundancy is the first sentence repeating the tool name/title, but the rest is concise and informative. The endpoint path is included, which adds practical value without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter and comprehensive annotations, the description is complete. It states the purpose, what will be returned, and how to use it. The absence of an output schema is mitigated by the explicit statement about the returned VAT rates, ledger accounts, and vat_options, making the tool callable without further 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% for the single parameter, with the description 'The client administration to act on. Only one is configured: default.' already explaining the parameter fully. The tool description does not add extra semantics beyond what the schema provides, 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 names the resource ('recurring invoice options') and the action ('Get'), and further specifies exactly what the options consist of: VAT rates, compatible ledger accounts, and VAT options. This distinguishes it clearly from sibling tools like get_sales_invoice_options or get_purchase_invoice_options, as it is scoped to recurring invoices.
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 directly states the purpose: 'Use this endpoint to determine valid combinations of vat_id, ledger_id and vat_option when creating recurring invoices.' This provides a clear when-to-use instruction. It does not explicitly mention alternatives or exclusions, but the guidance is precise enough for an agent to select this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_relationGet a single relationARead-onlyIdempotent
Get a single relation.
Get a single relation by ID. Includes contacts, tags and custom fields (free fields).
[Relations] GET /relations/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the relation. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior. The description adds value by specifying the response scope (includes contacts, tags, custom fields) and the HTTP endpoint, which the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and efficient, with the first sentence restating the title but the second adding specific behavior. The HTTP endpoint line is a useful reference, though slightly redundant. Overall, it is well-structured and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with rich annotations (read-only, idempotent), the description covers the response contents and endpoint. Without an output schema, it could be more explicit about return format, but the included fields offer sufficient operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with clear descriptions for both 'id' and 'administration'. The description itself does not need to add parameter details, as the schema fully documents them, meeting the baseline requirement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a single relation by ID', identifying the specific verb, resource, and identifier. It mentions the included data (contacts, tags, custom fields), which distinguishes it from list operations and other resource-specific getters like get_contact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a relation ID and want that single record, providing no explicit when-not-to-use or comparison with sibling tools. Some context is derivable but no exclusions or alternatives are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_salesbook_invoiceGet a single salesbook invoiceARead-onlyIdempotent
Get a single salesbook invoice.
Get a single salesbook invoice by ID, including all line items.
[Salesbook] GET /salesbook/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the salesbook invoice. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the detail that line items are included and shows the endpoint format, but does not disclose additional behavioral traits like pagination or response structure. This is sufficient given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and to the point, but the first sentence repeats the tool title exactly. The second sentence and endpoint reference add valuable detail. Minor redundancy prevents a perfect score, but overall it is 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?
For a simple read operation with full schema coverage and safety annotations, the description provides enough context to invoke the tool correctly. It notes the ID lookup and inclusion of line items, which are the key details. Without an output schema, a bit more about return format would help, but this is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes both parameters fully (id as integer, administration enum with 'default'). Schema coverage is 100%, so the description need not add parameter semantics. The description does not enrich parameter meaning beyond the schema, matching 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 states a specific verb ('Get'), resource ('salesbook invoice'), and scope ('by ID, including all line items'). It clearly distinguishes this from other invoice-related tools by explicitly mentioning the inclusion of line items and the ID-based retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a single invoice with line items, but does not explicitly state when to use this over the many sibling tools (e.g., get_sales_invoice, get_salesbook_invoice_pdf). No exclusions or alternatives are named, so the agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_salesbook_invoice_optionsGet salesbook optionsARead-onlyIdempotent
Get salesbook options.
Get the available VAT rates with their compatible ledger accounts and VAT options for creating salesbook invoices.
[Salesbook] GET /salesbook/options
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is clear. The description adds the endpoint method (GET) and the nature of the data returned, which is consistent with the annotations but does not disclose additional behavioral traits such as authentication requirements or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line title (slightly repetitive with the tool name), a useful explanatory sentence, and the endpoint reference. There is minimal waste, though the first line could be merged but is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only options tool with one optional parameter and clear annotations, the description provides sufficient information about what the tool returns. No output schema exists, but the description outlines the content (VAT rates, ledger accounts, VAT options), making it complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with a clear enum and description for 'administration'. The description does not add extra meaning to the parameter, but it is not needed since the schema is self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb (Get) and a specific resource (salesbook options) and elaborates on what is returned: VAT rates with compatible ledger accounts and VAT options. This sufficiently distinguishes it from similar option-fetching tools like get_sales_invoice_options or get_purchase_invoice_options.
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 is used when needing salesbook invoice configuration options, but it does not explicitly state when to use this tool over alternatives, nor does it mention any exclusions or context for selection among the many option-fetching siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_salesbook_invoice_pdfGet salesbook PDFARead-onlyIdempotent
Get salesbook PDF.
Download the PDF file attached to a salesbook invoice as a base64-encoded string.
[Salesbook] GET /salesbook/pdf/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the salesbook invoice. | |
| save_path | No | Optional absolute file path to write the decoded file to. When omitted the file is returned inline as a base64 resource. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is known to be safe. The description adds valuable context beyond annotations: it states the download returns a base64-encoded string and mentions the optional save_path behavior, which informs expected output handling. The endpoint path is also included, which is extra useful 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: three short lines with zero filler. The first line restates the title but the second line provides the actionable definition, and the endpoint line adds precise reference. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only download tool with no output schema, the description adequately explains the returned format (base64) and the optional save-path behavior. Missing are potential error conditions or notes on file size limits, but these are not critical for basic invocation. The main gap is the lack of usage-versus-alternative guidance.
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 all three parameters are already self-documenting. The description does not add new meaning to the parameters, though the base64-encoding mention indirectly clarifies the output related to save_path. 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 action ('Download the PDF file attached to a salesbook invoice') and the resource (salesbook invoice PDF). It distinguishes this from sibling PDF tools like get_sales_invoice_pdf and get_quotation_pdf by explicitly referencing 'salesbook invoice'.
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 about when to use this tool versus the many sibling PDF retrieval tools (e.g., get_sales_invoice_pdf, get_purchase_invoice_pdf). The description assumes the agent already knows it should be used specifically for salesbook invoices, without explicitly stating selection criteria or excluding alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sales_invoiceGet a single sales invoiceARead-onlyIdempotent
Get a single sales invoice.
Get a single sales invoice by ID, including all line items.
[Sales Invoices] GET /invoices/sales/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales invoice. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the agent knows it's safe. The description adds 'including all line items' which is useful context about the response content. No mention of potential errors or prerequisites, but annotations cover the key 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?
Three short sentences, efficient. The repeated phrase 'Get a single sales invoice' appears twice (first line and second line), which is slightly redundant. But the structure is clean and front-loaded with 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?
For a simple GET-by-ID operation with rich annotations and 100% schema coverage, the description is adequately complete. It doesn't describe response format, but no output schema is present; still this is a basic retrieval tool, and the description covers the essential behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description says 'by ID' reinforcing the id parameter but adds no new detail about admin parameter. Baseline 3 is appropriate when schema covers everything.
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 'Get a single sales invoice' with specific verb and resource, and adds 'by ID, including all line items' for specificity. It is distinguishable from sibling list_sales_invoices and update_sales_invoice, though doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use: when you need a single invoice by ID. No explicit exclusions or alternatives are mentioned, but the 'Get' verb and ID requirement make it straightforward. Sibling tools exist but no comparison is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sales_invoice_optionsGet sales invoice optionsARead-onlyIdempotent
Get sales invoice options.
Get the available VAT rates with their compatible ledger accounts and VAT options. Use this endpoint to determine valid combinations of vat_id, ledger_id and vat_option when creating invoices.
[Sales Invoices] GET /invoices/sales/options
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context by specifying what the endpoint returns and how that output is intended to be used, which goes beyond the structured annotation data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and informative, with the key purpose stated early and detail about usage and the endpoint path following. Minor redundancy exists in repeating 'Get sales invoice options', but it does not detract from clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only options endpoint with zero required parameters and no output schema, the description sufficiently explains what will be returned and why it matters. The endpoint path and intended use case are included, making it complete enough for safe 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% with a well-documented single parameter (administration) that has a constrained enum, so the schema carries the full semantic burden. The description adds no parameter-specific detail, which is acceptable given complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (sales invoice options) and the specific content returned: available VAT rates with compatible ledger accounts and VAT options. It doesn't explicitly contrast with sibling get_purchase_invoice_options, but the sales-specific scope makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: use this endpoint to determine valid combinations of vat_id, ledger_id, and vat_option when creating invoices. It lacks explicit when-not-to-use guidance or named alternatives, but the stated use case is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sales_invoice_pdfGet sales invoice PDFARead-onlyIdempotent
Get sales invoice PDF.
Download the PDF of a sales invoice as a base64-encoded string.
[Sales Invoices] GET /invoices/sales/pdf/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales invoice. | |
| save_path | No | Optional absolute file path to write the decoded file to. When omitted the file is returned inline as a base64 resource. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds meaningful behavior by specifying that the PDF is returned as a base64-encoded string and mentions the endpoint, which is beyond the annotations. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact – a title line, a concise explanation of the output format, and an endpoint reference. There is slight redundancy between the title and the first sentence, but overall every sentence contributes information without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple download operation with a fully documented schema and safety-bearing annotations, the description covers the essential behavior (base64 return, endpoint). It doesn't describe error cases or pagination, but these are less critical for a single-resource PDF fetch, and the absence of an output schema is acceptable here.
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 all parameters (id, save_path, administration) are already documented in the input schema. The description adds no extra parameter-specific meaning beyond what the schema provides, matching the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Download') and resource ('PDF of a sales invoice'), and notes the return format as base64. It distinguishes from siblings like get_sales_invoice by focusing on the PDF artifact, though it doesn't explicitly compare against other PDF tools (e.g., get_sales_order_pdf).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: when you need the PDF version of a sales invoice, use this tool. However, there is no explicit when-to-use guidance or mention of alternatives (e.g., use get_sales_invoice for structured data), leaving the agent to infer from name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sales_orderGet a single sales orderARead-onlyIdempotent
Get a single sales order.
Get a single sales order by ID, including all line items. Requires the trade module to be active.
[Sales Orders] GET /orders/sales/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales order. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the read-only, idempotent, open-world, and non-destructive nature of the operation. The description adds useful behavior beyond that: the response will include all line items, and the trade module must be active. It does not describe error behavior, but the annotations lower the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence 'Get a single sales order.' is redundant with the second sentence, which repeats the same idea with more detail. The endpoint summary and prerequisite are useful, but the duplication makes the definition less tight 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?
For a two-parameter read operation with strong annotations, the description provides the essential facts: resource type, ID-based lookup, inclusion of line items, and a module prerequisite. Even without an output schema, an agent has enough information to select and call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, with descriptions for both id and administration. The description's 'by ID' aligns with the required id parameter but adds no meaningful detail beyond the schema. This matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the operation explicitly: 'Get a single sales order by ID, including all line items.' It names a specific resource, retrieval method, and scope, making it easy to distinguish from sibling tools such as list_sales_orders or get_sales_order_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this tool fetches one sales order by ID and includes line items. It also states a concrete prerequisite, 'Requires the trade module to be active,' which helps the agent decide whether the call is valid. It does not name alternatives explicitly, but the usage context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sales_order_optionsGet sales order optionsARead-onlyIdempotent
Get sales order options.
Get the available VAT rates with their compatible ledger accounts and VAT options for creating sales orders. Requires the trade module to be active.
[Sales Orders] GET /orders/sales/options
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by stating the module requirement and previewing the response contents, which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and ends with a useful endpoint reference. The opening line 'Get sales order options.' is redundant with the title, but the rest of the description earns its place with concrete content and a prerequisite.
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 is simple: one optional parameter fully documented in the schema, annotations covering read-only behavior, and a description that explains what the response contains. No output schema is present, but the description adequately compensates by naming the returned VAT rates, ledger accounts, and VAT options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the only parameter, administration, including its enum and meaning. The description does not need to add parameter details, and it does not; baseline 3 applies because the schema fully carries the 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 states a specific verb and resource: 'Get the available VAT rates with their compatible ledger accounts and VAT options for creating sales orders.' It clearly distinguishes this from sibling tools like get_sales_invoice_options or get_quotation_options by anchoring it to sales orders and naming the returned data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when creating sales orders and needing VAT rates, compatible ledger accounts, and VAT options. It also includes a prerequisite, 'Requires the trade module to be active.' It does not explicitly name alternative tools or exclusions, but the context 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_sales_order_pdfGet sales order PDFARead-onlyIdempotent
Get sales order PDF.
Download the PDF of a sales order as a base64-encoded string.
[Sales Orders] GET /orders/sales/pdf/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales order. | |
| save_path | No | Optional absolute file path to write the decoded file to. When omitted the file is returned inline as a base64 resource. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only, idempotent, open-world, and non-destructive. The description contributes additional behavioral context by stating the response is a base64-encoded PDF and exposing the REST endpoint; the save_path write behavior is left to the schema, which documents it.
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 and front-loads the key purpose and output format. The opening 'Get sales order PDF' sentence is redundant with the title and the endpoint line is optional context, but there is no real bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only download with fully described parameters and rich annotations, the definition is largely complete: it states output encoding, target resource, and endpoint. There is no output schema, so the return-format statement is essential and present; error behavior is not described, but this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented and the description needs to add little. The description does not elaborate on id, save_path, or administration beyond the schema, so the 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 uses a specific verb ('Download') and resource ('PDF of a sales order') and adds the output encoding ('base64-encoded string'). This clearly identifies the purpose and distinguishes it from sibling PDF tools such as get_sales_invoice_pdf or get_purchase_invoice_pdf by 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 provides no when-to-use guidance, exclusions, or alternatives; it never explains when to choose this over a sibling PDF downloader. The purpose sentence implies a use case, but that is not explicit usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_administrationsList configured administrationsARead-onlyIdempotent
List the client administrations this server is configured for, with the alias to pass as the "administration" argument of every other tool, and whether each one may be written to. Set "verify" to also fetch each company name from the API, which confirms the credentials work and that each alias points at the company you expect. To change any of it — add a client, replace a key, switch one to read-only — use open_setup.
| Name | Required | Description | Default |
|---|---|---|---|
| verify | No | Call the API once per administration to resolve the real company name. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds valuable context about the 'verify' side effect (calls the API per administration) and what information the result contains (alias and writability), going beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: main purpose, verify behavior, and pointer to the mutation sibling. Information is front-loaded efficiently 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 read-only list tool with one optional parameter and no output schema, the description fully covers what the tool does, what the return includes, how to verify credentials, and how to make changes. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'verify' is fully described in the input schema (calls API once, defaults to false). The description restates this but adds no new meaning beyond what the schema provides, 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 states a specific verb ('List') and resource ('client administrations'), and specifies the output includes the alias and write permissions. It distinguishes itself from sibling tools like get_administration (fetching one) and open_setup (changing configuration), making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool: to list administrations and optionally verify credentials. It also clearly directs to open_setup for any modification tasks ('To change any of it ... use open_setup'), providing a direct alternative and exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_attachmentsGet all attachmentsBRead-onlyIdempotent
Get all attachments.
Get a list of all available document attachments for this administration.
[Attachments] GET /attachments
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds the administration scoping context beyond the annotations but does not disclose additional traits such as pagination, response shape, or what counts as an attachment. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with only three brief lines. However, the opening 'Get all attachments.' repeats the title verbatim and adds no value, while the '[Attachments] GET /attachments' line provides marginal API-path detail. Minor redundancy prevents a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional enum parameter, no required inputs, no output schema, and rich safety annotations, the description covers the essential invocation facts: it lists all document attachments for the administration. The main gap is not clarifying whether returned attachments span all invoice/document types or how they relate to the sibling attachment tools, but this is minor for a list 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%; the single 'administration' parameter is already fully documented in the input schema with its enum and purpose. The description adds no new parameter-level semantics beyond echoing the administration scope, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get a list of all available document attachments for this administration.' The scope clarifies it lists all attachments rather than invoice-specific ones, which implicitly distinguishes it from sibling tools like upload/download/delete_sales_invoice_attachment. However, it does not explicitly name any sibling to differentiate against, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as upload_sales_invoice_attachment, download_sales_invoice_attachment, or delete_sales_invoice_attachment. The scope statement 'for this administration' gives some context, but there are no explicit conditions, exclusions, or alternative routing to help an agent decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cost_centresGet all cost centre accountsARead-onlyIdempotent
Get all cost centre accounts.
Get a list of all cost centre accounts for this administration.
[Costs] GET /costs
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds context that this returns a list of all cost centre accounts and mentions the underlying endpoint, but does not disclose additional behavioral traits such as pagination or ordering. Given annotation coverage, the description provides moderate added 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 short and front-loaded with the core action ('Get all cost centre accounts'), followed by a clarifying sentence and an endpoint hint. There is slight redundancy between the first line and the second sentence, but overall every line contributes useful information without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with only one optional parameter and no output schema, the description is sufficiently complete. It indicates the resource, scope (administration), and a direct API endpoint. No critical missing information such as authentication or prerequisites is expected for this read-only list tool, though pagination behavior is 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?
The single parameter 'administration' is fully documented in the schema with an enum of 'default' and a description stating it is the client administration to act on. The description's phrase 'for this administration' aligns with the schema but adds no extra meaning beyond it. With 100% schema description coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get all cost centre accounts' and elaborates with 'Get a list of all cost centre accounts for this administration.' It uses a specific verb (get/list) and resource (cost centre accounts), distinguishing it from sibling tools like list_ledgers or list_journals. The endpoint reference further clarifies the intent.
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 is used to retrieve all cost centre accounts for a given administration, but it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or selection criteria. Since there are no directly competing sibling tools (no other cost-centre-specific tool exists), the implied usage is adequate but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_currenciesGet all currenciesARead-onlyIdempotent
Get all currencies.
Get a list of all currencies configured for this administration, including exchange rates.
[Currencies] GET /currencies
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety and side effects. The description adds that it targets a specific administration and includes exchange rates, which is context beyond the annotations but not a deep behavioral disclosure (e.g., pagination, result size).
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 contains three lines but the first two largely repeat the same idea ('Get all currencies' vs 'Get a list of all currencies...'). The API path line is informative but redundant. It is concise but not tightly structured due to duplication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with zero required parameters and full schema documentation, the description sufficiently explains what is returned (all currencies with exchange rates for the administration). No output schema exists, but the description covers the essential return content. Minor gaps like pagination are not critical for this simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional parameter, including an enum and a clear description. The tool description does not add further parameter-specific semantics, 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 uses a specific verb ('Get') and resource ('currencies'), and explicitly states the scope: 'configured for this administration, including exchange rates'. This clearly distinguishes it from other list tools like list_administrations or list_relations.
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 its use for retrieving currency data but does not provide explicit when-to-use guidance or mention alternatives. While the intent is clear, there is no direct comparison to sibling tools or conditions for choosing this over another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_journalsGet all journalsBRead-onlyIdempotent
Get all journals.
Get a list of all journals (dagboeken) for this administration.
[Journals] GET /journals
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds useful context by specifying the HTTP endpoint and the administration scope. However, it does not disclose response format, pagination behavior, or any limitations beyond 'all journals', leaving the description to carry some weight but not much beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the main purpose, then adds the scope and endpoint. There is minor redundancy between 'Get all journals' and 'Get a list of all journals', but it remains efficient and easy to scan.
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, non-destructive list operation with a single fully documented optional parameter, the description conveys the essential behavior: return all journals for the administration. No output schema exists, but the description states the result is a list of journals, which is sufficient for basic invocation. It could mention return structure or pagination but this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single administration parameter is fully documented with type, enum, and a clear description. The tool description adds no additional information about the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get a list'), the resource ('all journals'), and the scope ('for this administration'), and includes the HTTP endpoint 'GET /journals'. It is specific enough to identify the tool as a list operation on the journals resource, though it does not explicitly differentiate itself from sibling list tools beyond the named 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 says what the tool does but provides no guidance on when to choose it over alternatives such as list_ledgers or other list_* tools. There is no mention of prerequisites, exclusions, or which sibling tools are preferable in other contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ledgersGet all ledger accountsARead-onlyIdempotent
Get all ledger accounts.
Get a list of all ledger accounts (chart of accounts) for this administration, including VAT codes, cost centre settings, RGS codes and condensation codes.
[Ledgers] GET /ledgers
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds minor context about the content of the response (VAT codes, cost centre settings, etc.) but does not disclose behaviors such as pagination, error conditions, or authentication requirements. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and mostly efficient, with the second sentence providing valuable details about included fields. However, the first sentence exactly repeats the title, adding no new information. The structure is still compact and front-loaded, so it earns a 4 rather than a 5.
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 parameter, no nested objects) and strong annotations, the description is mostly adequate. It clarifies the scope and content of the response but does not describe the output structure or mention any potential limitations (e.g., pagination). For a simple list operation, this is a minor gap, so a 4 fits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for its single parameter, administration, which includes an enum and clear description. The tool description adds no extra meaning beyond what the schema already provides, so a 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 'Get' and the resource 'all ledger accounts (chart of accounts)', and further specifies what is included (VAT codes, cost centre settings, RGS codes, condensation codes). This unambiguously differentiates it from sibling tools like list_currencies or list_journals based on 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?
The description implies usage by stating 'Get all ledger accounts for this administration', but it does not explicitly state when to use this over alternatives. There is no mention of when not to use it or reference to a sibling tool. The intended use is clear but only implicitly conveyed through the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_memorandum_entriesGet a list of memorandum entriesARead-onlyIdempotent
Get a list of memorandum entries.
Get a paginated list of all memorandum journal entries with their line items.
[Memorandum] GET /memorandum
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default = 1). | |
| records | No | Number of records per page. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds context about pagination and inclusion of line items, but does not disclose additional behavioral traits like rate limits or default page size. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but includes a redundant first sentence ('Get a list of memorandum entries') that repeats the title, plus a code-path line. The core second sentence is clear and front-loaded, but the redundancy prevents a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation, the description plus annotations and schema cover the essentials: what it returns (paginated list with line items) and all optional pagination parameters. However, no output schema exists and the description does not explain pagination defaults or response shape beyond line items, leaving a moderate gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; each parameter (page, records, administration) already has a description. The tool description adds no parameter-specific meaning, 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?
States 'Get a paginated list of all memorandum journal entries with their line items' – a specific verb (get list), resource (memorandum entries), and scope (all, with line items). Clearly distinguishes from sibling get_memorandum_entry / create / update tools, so an agent can select appropriately.
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?
Description implies usage: use when you need a paginated collection of memorandum entries. It does not explicitly mention alternatives or when not to use (e.g., for a single entry use get_memorandum_entry), so guidance is clear context but without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_payment_conditionsGet all payment conditionsBRead-onlyIdempotent
Get all payment conditions.
Get a list of all payment conditions configured for this administration.
[Payment Conditions] GET /payment-conditions
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds that results are scoped to the administration but does not disclose pagination, result format, or other behaviors beyond the endpoint line.
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 brief and well-structured, with the API endpoint provided as a helpful anchor. The first sentence repeats the title, which is mildly redundant, but overall it is 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?
For a simple list operation with one optional parameter and no output schema, the description covers the essential purpose and scope. It could mention result list semantics or pagination, but these are not critical for such a straightforward tool given the 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?
Schema description coverage is 100% and the only parameter is well-documented with an enum and explanation. The description adds no extra parameter semantics, so the baseline of 3 applies given the schema's completeness.
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 all payment conditions, with a specific verb and resource. It adds scope ('for this administration') but does not explicitly contrast with sibling tools, so it is clear but not fully differentiated.
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 or when to avoid it. The description only states what it does, leaving the agent to infer usage context from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsGet all productsARead-onlyIdempotent
Get all products.
Get a list of all products for this administration, including supplier information. Requires the trade module to be active.
[Products] GET /products
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds beyond this: it specifies the return includes supplier information and states the module prerequisite. This is useful behavioral context that annotations do not provide, though it does not describe pagination or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but contains minor redundancy: the first sentence repeats the tool's title verbatim before expanding. The key details (supplier info, module requirement) are clear and the content is otherwise efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless-in-practice list tool with readOnly/idempotent annotations, the description provides essential prerequisites and return content. An output schema is absent, but the description notes supplier info inclusion. No critical missing information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with the 'administration' parameter fully described via its enum and description. The description's mention of 'this administration' aligns with the parameter but adds no additional semantic detail 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 states a specific verb ('Get'), resource ('products'), and scope ('for this administration'), and adds detail about included supplier information. This clearly distinguishes it from sibling tools like list_relations or list_sales_invoices, all of which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the prerequisite that the trade module must be active, giving the agent a concrete condition for when the tool can be used. It does not explicitly name excluded scenarios or alternatives, but among siblings there is no competing product-list tool, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_purchase_invoicesGet a list of purchase invoicesARead-onlyIdempotent
Get a list of purchase invoices.
Get a paginated list of all purchase invoices with their line items.
[Purchase Invoices] GET /invoices/purchase
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default = 1). | |
| sort | No | Sort order. Format: field.direction (e.g. date.desc). Available fields: created, name, number, date, expiry_date, amount, invoiceAmountPaid, invoiceAmountOpen. | |
| filter | No | Filter purchase invoices by status. | |
| records | No | Number of records per page. | |
| last_edit | No | Only return invoices edited after this date (format: YYYY-mm-dd). | |
| relation_id | No | Only return invoices for the relation with this ID. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that results are paginated and include line items, which is useful context beyond the schema. However, it does not detail any quirks, rate limits, or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose. The first sentence repeats the tool title, but the second adds concrete scope (line items) and the third provides the endpoint path. Minimal redundancy, clear structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward list operation with full parameter documentation and annotations covering read-only/idempotent behavior, the description is sufficient. It lacks details on default pagination behavior or return format, but the absence of an output schema and the simple nature keep the gap minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented in the schema. The description adds no extra meaning beyond 'paginated' and 'with line items', which does not further clarify any specific parameter. Thus the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), resource ('purchase invoices'), and scope ('paginated list of all purchase invoices with their line items'). It clearly differentiates from sibling tools like get_purchase_invoice by emphasizing the list and pagination, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as get_purchase_invoice or list_sales_invoices. It only states that it lists purchase invoices; there is no mention of prerequisites, filtering scenarios, or when a different tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_quotationsGet a list of quotationsARead-onlyIdempotent
Get a list of quotations.
Get a paginated list of all quotations with their line items.
[Quotations] GET /quotations
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default = 1). | |
| sort | No | Sort order. Format: field.direction (e.g. date.desc). Available fields: created, number, name, date, expirationDate, succesRate, amount. | |
| filter | No | Filter quotations by status. | |
| records | No | Number of records per page. | |
| last_edit | No | Only return quotations edited after this date (format: YYYY-mm-dd). | |
| relation_id | No | Only return quotations for the relation with this ID. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the description only needs to add meaningful behavioral context. It adds pagination behavior and notes that line items are included, which is useful beyond the structured annotations. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core purpose. The opening sentence mostly repeats the title, and the endpoint notation adds minor value, so it is not perfectly lean, but it remains concise and well-structured overall.
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 no required parameters and a fully documented schema, the description adequately covers purpose, pagination, and response content. It could mention default page size or records-per-page behavior, but nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning all seven parameters are already documented in the input schema. The description does not add parameter-specific meaning beyond indicating that the list includes line items, so the 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 a specific action ('Get') and resource ('quotations'), then further specifies 'a paginated list of all quotations with their line items.' This distinguishes it from sibling tools like get_quotation or list_sales_invoices by making both the resource and the list behavior explicit.
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 phrasing 'Get a paginated list of all quotations' implies this tool is for enumerating multiple quotations rather than retrieving a single one, but it does not explicitly name alternatives or state when not to use it. The usage context is implied by the resource and list semantics rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_receiptsGet a list of receiptsBRead-onlyIdempotent
Get a list of receipts.
Get a paginated list of all receipts (bonnetjes) for this administration.
[Receipts] GET /receipts
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default = 1). | |
| sort | No | Sort order in `field.direction` format. Supported fields: `date`, `type`, `description`, `amount`. Default: `date.desc`. | |
| filter | No | Filter results by processing status. | |
| records | No | Number of records per page. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context about pagination and that it retrieves all receipts, but does not disclose details like default page size, result order, or potential performance implications. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description contains three sentences, but the first sentence 'Get a list of receipts.' is a redundant restatement of the title. The second sentence provides the substantive information, and the third gives an API endpoint reference. Slightly bloated for the content delivered.
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 operation with no required parameters and full schema coverage, the description is nearly sufficient. It states the overall behavior and pagination, and annotations cover safety. It does not describe the return structure, but since there is no output schema, a brief note on response format would improve completeness, though it is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters already have meaningful documentation in the schema itself. The description mentions 'paginated' which aligns with the 'page' parameter but adds no extra meaning beyond the schema's 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?
Description clearly states the action ('Get a paginated list'), the resource ('receipts (bonnetjes)'), and the scope ('for this administration'). It is unambiguous and distinguishes itself from sibling tools like get_receipt, create_receipt, and update_receipt by being the list operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_receipt or filtered list endpoints. The description does not mention when not to use it or direct the agent to a sibling for single-item retrieval. Usage context is only implicit in the word 'list'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recurring_invoicesGet a list of recurring invoicesARead-onlyIdempotent
Get a list of recurring invoices.
Get a paginated list of all recurring invoices with their line items.
[Recurring Invoices] GET /invoices/recurring
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default = 1). | |
| sort | No | Sort order. Format: field.direction (e.g. start_date.desc). Available fields: created, name, contact, number, type, period, start_date, end_date, invoice_date, amount. | |
| filter | No | Filter recurring invoices by status. | |
| records | No | Number of records per page. | |
| last_edit | No | Only return recurring invoices edited after this date (format: YYYY-mm-dd). | |
| relation_id | No | Only return recurring invoices for the relation with this ID. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral context beyond those structured signals: the operation is paginated, returns line items, and maps to the concrete GET /invoices/recurring endpoint. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence largely repeats the title, and the second sentence is only slightly more specific. The endpoint line is useful, but the opening adds redundancy. The description is compact but not tightly 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?
The description conveys the core operation, pagination, and line-item inclusion, and the schema covers all parameters. However, there is no output schema and no detail about response shape, pagination defaults, or how filters combine. It is adequate but not fully complete for a 7-parameter collection 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 parameters like page, sort, filter, records, last_edit, relation_id, and administration are already fully documented. The description does not add additional meaning to any parameter, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get a paginated list of all recurring invoices with their line items.' This clearly identifies the tool as a collection-level retrieval operation and distinguishes it from single-item siblings like get_recurring_invoice.
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 a paginated list of recurring invoices is needed, but it does not explicitly contrast with alternatives or state when not to use this tool. Usage context is present only implicitly through the word 'list' and 'all.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_relationsGet a list of relationsARead-onlyIdempotent
Get a list of relations.
Get a paginated list of all relations. For each relation the contacts, tags and subtypes are included.
[Relations] GET /relations
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default = 1). | |
| search | No | Search string. Searches in company name, street, city and relation number. | |
| records | No | Number of records per page (default = 20). | |
| last_edit | No | Only return relations edited after this date (format: YYYY-mm-dd). | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by specifying that the result is paginated and that each relation includes contacts, tags, and subtypes—information not present in the annotations. It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short with two substantive sentences, though the first sentence largely repeats the tool title and the second provides the real detail. There is minor redundancy but no wasted words, and key information is front-loaded in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated list operation with fully documented parameters and comprehensive annotations, the description covers the essential behavior. It lacks an explicit statement about response format or pagination limits, but the schema's defaults and the description's mention of included fields are sufficient for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters have descriptions in the input schema (100% coverage), so the schema carries the full semantic load. The description itself adds no extra parameter detail beyond what is already in the schema, matching the baseline score for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the operation: 'Get a paginated list of all relations' with the specific verb 'get' and resource 'relations'. It differentiates from sibling tools like get_relation by indicating it returns all relations, not a single one, and adds detail about included contacts, tags, and subtypes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the main use case clear: retrieving all relations in a paginated list. However, it does not explicitly mention when not to use it or name alternatives (e.g., get_relation for a single relation), leaving the comparison to inference rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_salesbook_invoicesGet a list of salesbook invoicesBRead-onlyIdempotent
Get a list of salesbook invoices.
Get a paginated list of all salesbook invoices with their line items.
[Salesbook] GET /salesbook
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default = 1). | |
| sort | No | Sort order. Format: field.direction (e.g. date.desc). Available fields: created, name, number, date, amount, invoiceAmountPaid, invoiceAmountOpen. | |
| filter | No | Filter salesbook invoices by status. | |
| records | No | Number of records per page. | |
| last_edit | No | Only return salesbook invoices edited after this date (format: YYYY-mm-dd). | |
| relation_id | No | Only return salesbook invoices for the relation with this ID. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that results are paginated and include line items, which is useful but does not disclose other behaviors like response format or rate limits. Neutral given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two main sentences and an endpoint line. However, the first sentence 'Get a list of salesbook invoices' repeats the title, but the second sentence adds value. No filler, well 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?
For a read-only list tool with full schema coverage and annotations, the description is adequate but not complete. It does not explain the return structure (no output schema) or clarify how to use filters/sorting beyond what is in the schema. The lack of usage context also weakens completeness.
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 all parameters have descriptive text in the schema. The description itself does not add any parameter-specific 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 states a specific verb and resource: 'Get a paginated list of all salesbook invoices with their line items.' It clearly distinguishes this from sibling tools like list_sales_invoices by naming the 'salesbook' resource. The endpoint reference further reinforces the 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?
No explicit guidance on when to use this tool versus alternatives. The description implies it is for salesbook invoices, but there is no mention of when to choose this over list_sales_invoices or other list tools. Lacks actionable usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sales_invoicesGet a list of sales invoicesBRead-onlyIdempotent
Get a list of sales invoices.
Get a paginated list of all sales invoices with their line items.
[Sales Invoices] GET /invoices/sales
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default = 1). | |
| sort | No | Sort order. Format: field.direction (e.g. date.desc). Available fields: created, name, number, date, amount, invoiceAmountPaid, invoiceAmountOpen. | |
| filter | No | Filter invoices by status. | |
| records | No | Number of records per page. | |
| last_edit | No | Only return invoices edited after this date (format: YYYY-mm-dd). | |
| relation_id | No | Only return invoices for the relation with this ID. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
注解已声明readOnlyHint=true、idempotentHint=true和destructiveHint=false,提供了安全画像。描述额外说明返回包含行项目,但没有涉及分页行为细节、权限要求或返回格式。有注解降低标准,描述增加了一些上下文,但未达到更丰富的行为披露。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
描述整体简短,但存在冗余:'Get a list of sales invoices'与'Get a paginated list of all sales invoices'重复。'[Sales Invoices] GET /invoices/sales'提供了端点信息,但并非必需。结构上能接受,但不够精炼。
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?
该工具没有输出schema,描述仅说明返回列表和行项目,但未说明分页响应结构或其他可能的输出字段。对于7个参数且全部有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覆盖100%,所有参数都有详细描述(如page、sort、filter等)。描述本身没有额外解释参数,基线3分合理。描述中提到的'line items'补充了返回内容,但对参数语义没有增加价值。
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?
描述明确说明了工具的功能:获取销售发票的列表,并包含行项目。动词'Get'和资源'sales invoices'清晰,与兄弟工具如get_sales_invoice(获取单个发票)和list_purchase_invoices(采购发票)有区分,但未明确指出与这些工具的区别,因此不是最高分。
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?
描述暗示了使用场景(获取所有销售发票的列表),但未提供何时使用此工具与替代工具(如get_sales_invoice或list_salesbook_invoices)的明确指导。没有when/when-not说明,只能从'paginated list of all sales invoices'中推断用途。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sales_ordersGet a list of sales ordersARead-onlyIdempotent
Get a list of sales orders.
Get a paginated list of all sales orders with their line items. Requires the trade module to be active.
[Sales Orders] GET /orders/sales
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default = 1). | |
| sort | No | Sort order. Format: field.direction (e.g. date.desc). Available fields: created, number, name, date, amount. | |
| filter | No | Filter orders by status. | |
| records | No | Number of records per page. | |
| last_edit | No | Only return orders edited after this date (format: YYYY-mm-dd). | |
| relation_id | No | Only return orders for the relation with this ID. | |
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful context beyond annotations by clarifying pagination, inclusion of line items, and the trade module requirement, which are not obvious from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loads the core purpose in the first sentence. It includes a necessary prerequisite and an endpoint hint, but it slightly repeats the tool title in the first sentence, which is a minor 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 simplicity, the description adequately covers output context (list with line items) and the module requirement. The lack of an output schema is partly mitigated by the description's mention of return contents, though field-level detail is not provided.
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 seven parameters thoroughly. The description adds no extra parameter-level detail, which is acceptable since the baseline for full coverage is 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 the specific verb 'Get' with resource 'sales orders' and clearly states the scope: a paginated list including line items. This distinguishes it from sibling tools like get_sales_order (single order) and create_sales_order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states a prerequisite ('Requires the trade module to be active') and clearly frames the tool as a list operation. It does not name alternatives, but the context of 'list all sales orders' is unambiguous enough for an agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subscription_typesGet all subscription typesARead-onlyIdempotent
Get all subscription types.
Get a list of all subscription types (abonnementstypes) for this administration.
[Subscription types] GET /subscription-types
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds minimal behavioral context beyond stating it gets a list and showing the GET endpoint, but it does not introduce any new behavioral traits such as pagination 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?
The description is concise and includes the purpose, scoping, and endpoint. It has minor redundancy between the first and second sentences, but each sentence contributes useful information without excessive verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: a read-only list operation with one optional parameter. The description and annotations cover the essential aspects, but since there is no output schema, a brief note on the return format would have been helpful for full completeness.
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 for the 'administration' parameter, which includes an enum and explanation. The description's phrase 'for this administration' reinforces the parameter meaning but does not add new information 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 action and resource: 'Get all subscription types' and 'Get a list of all subscription types (abonnementstypes) for this administration.' It also includes the endpoint, making the tool's purpose explicit 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?
The description provides clear context by specifying 'for this administration,' and there are no sibling tools for subscription types, so no alternatives need to be excluded. However, it does not explicitly state when to use this tool versus another, leaving usage guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesGet all templatesBRead-onlyIdempotent
Get all templates.
Get a list of all document templates configured for this administration.
[Templates] GET /templates
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the description adds little beyond confirming the scope ('for this administration'). No additional behavioral traits like pagination, response format, or authentication are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and mostly to the point, though the first sentence repeats the title and the third line is an HTTP endpoint reference that adds minor clutter. Still, it remains 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?
For a simple read-only list tool with one optional parameter and no output schema, the description covers the basic purpose and scope. It lacks information about return value shape or any filtering options, but the annotations and schema fill the main gaps, making this minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the only parameter (administration) fully with an enum and description. The description does not add parameter-level detail, but with 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all templates') and the resource ('document templates configured for this administration'). It distinguishes this tool from siblings that operate on invoices, relations, etc., by specifically targeting templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, nor any exclusions. It simply states what it does, leaving the agent to infer applicability from the tool name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vat_optionsGet all VAT optionsARead-onlyIdempotent
Get all VAT options.
Get a list of all VAT/tax rates configured for this administration, including their percentages, codes and availability status.
[VAT] GET /vat
| Name | Required | Description | Default |
|---|---|---|---|
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is well covered. The description adds no additional behavioral traits such as pagination, ordering, or output format beyond the content of the response, so it neither strongly enhances nor contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the essential scope in the first sentence. There is minor redundancy between 'Get all VAT options' and the expanded second sentence, and the '[VAT] GET /vat' hint is helpful but slightly extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one optional parameter and no output schema, the description provides enough detail about the returned data categories. It could mention the response shape or pagination, but the operation is straightforward and annotations cover the safety context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, fully documenting the single optional 'administration' parameter and its enum. The tool description itself adds no parameter-level detail, so it does not need to compensate; the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (get a list) on a specific resource (VAT/tax rates) and details the included fields (percentages, codes, availability status). This distinguishes it from sibling list tools and invoice-specific options 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 implies the tool is used to retrieve VAT rates configured for the administration, providing clear context for when to call it. However, it does not explicitly mention when not to use it or name alternatives such as get_sales_invoice_options or get_purchase_invoice_options, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_setupOpen the Informer configuration pageAIdempotent
Open the Informer settings, configuration or setup page. This is the single answer to every request about configuring this server: first-time setup, "open the config/settings/configuration site", adding a client or administration, changing or rotating an API key or security code, switching a client between read-only and read-write, removing one, or fixing a call that failed with 401 Authentication failed. It opens a form on 127.0.0.1 in the user's browser, one card per administration: alias, company name, API key, security code, access. Call this instead of searching the filesystem for config files, reading the installation directory, running the setup command in a shell, or asking the user for a key in the conversation — credentials belong in the page, not in a chat. Returns the URL to pass on in case the browser did not open. Saving verifies each key against the API and applies the change to this server immediately.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotentHint=true, destructiveHint=false), the description discloses important behavioral traits: it opens a form on 127.0.0.1 in the user's browser, returns a URL to pass on, and that saving verifies keys against the API and applies changes immediately. This significantly enriches the agent's understanding of side effects and environment interaction.
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 comprehensive yet efficient: the purpose is front-loaded in the first sentence, followed by concrete examples and explicit exclusions. It is longer than average but every clause serves a purpose, and the structure guides the agent from what it does, to when to use it, to what to expect.
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 no parameters and no output schema, the description covers all necessary context: purpose, use cases, exclusions, behavior, and return value. The agent has everything needed to invoke and handle the tool correctly without further guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters in the schema, the description cannot add parameter-level meaning. The baseline of 4 is appropriate because there is no parameter information needed; the description instead covers the tool's behavior and usage, which is more relevant here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Open the Informer settings, configuration or setup page.' It enumerates specific use cases (first-time setup, adding a client, rotating API keys, fixing 401 errors) and contrasts with the CRUD-heavy sibling tools, making the tool's scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly declares this is 'the single answer to every request about configuring this server' and lists concrete scenarios. It also names alternatives to avoid: searching the filesystem, reading installation directory, running setup commands, or asking the user for a key in chat, giving 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.
refresh_api_specRefresh the Informer API descriptionAIdempotent
Download the current OpenAPI description from Informer and update this server's tools to match, without restarting. New endpoints become new tools, removed ones disappear, and changed arguments are re-advertised. Use it when an endpoint you expect is missing, when an argument is rejected as unknown, or to check whether Informer has changed anything. Pass dry_run to see the differences without applying them. This only touches this server; it never changes bookkeeping data.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Report what would change without adopting the new description. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states the scope and side effects: it only touches this server's tool definitions, never bookkeeping data, and requires no restart. Annotations already indicate readOnlyHint=false, idempotentHint=true, and destructiveHint=false, and the description aligns with them, adding context about tool visibility changes.
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 tightly written sentences cover function, use cases, and side effects with no filler. The most important action is front-loaded, and all information 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 single-parameter management tool with no output schema, the description covers the operation's purpose, trigger conditions, dry-run option, and impact boundary. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, dry_run, is fully documented in the schema with a clear description and default. The tool description repeats essentially the same information in natural language, adding no new semantic meaning beyond the schema. Baseline 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: it downloads the current OpenAPI description and updates this server's tools to match, without restarting. It also clearly distinguishes itself from the many business CRUD sibling tools by being a server-management operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit conditions for when to use it: when an expected endpoint is missing, when an argument is rejected as unknown, or to check for changes. It also instructs passing dry_run to preview differences, and clarifies what the tool does not affect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_quotationSend a quotationA
Send a quotation.
Send a quotation via email, mark as sent, or send via Peppol.
[Quotations] POST /quotations/send/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the quotation to send. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal this is a write operation (readOnlyHint=false), and the description adds the concrete sending mechanisms. It does not disclose additional behavioral traits such as whether marking as sent is reversible or what side effects occur on the quotation record, but the lack of contradiction with annotations keeps it neutral.
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 and informative, listing the core purpose and methods in two sentences. There is slight redundancy with 'Send a quotation' appearing twice, but it remains 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?
For a straightforward send operation with a well-defined schema and accompanying annotations, the description covers the essential modalities. It omits return value details or error conditions, but no output schema exists and the operation is not complex enough to require more.
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 67% and the schema itself documents method, email_address, and id reasonably well. The description adds no parameter-level detail beyond what is in the schema, so it neither compensates for gaps nor adds extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes a specific action on a specific resource: sending a quotation. It further narrows the action by enumerating three concrete methods (email, mark as sent, Peppol), which clearly distinguishes it from sibling send tools for invoices/orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when you need to send a quotation) and lists the available send methods, but it does not explicitly contrast this with sibling tools like send_sales_invoice or send_sales_order, nor does it mention conditions when this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_sales_invoiceSend a sales invoiceB
Send a sales invoice.
Send a sales invoice via email, mark as sent, or send via Peppol. The invoice will be finalized before sending.
[Sales Invoices] POST /invoices/sales/send/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales invoice to send. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral detail that the invoice will be finalized before sending, which is not captured by the annotations (readOnlyHint=false, destructiveHint=false). It also implies the 'mark' method is simply marking as sent rather than actually dispatching. However, it does not disclose potential authorization requirements, whether the operation is reversible, or what happens to the invoice after sending.
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 and front-loaded with the primary action and methods. It includes the API endpoint in brackets, which is useful but slightly redundant. Every sentence contributes meaningful information; no filler or tautology.
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 absence of an output schema and the moderate complexity of the request (3 parameters, nested body), the description provides a functional overview but lacks details such as response behavior, potential errors, or prerequisites (e.g., invoice must exist and be in a sendable state). It is adequate for basic invocation but leaves some operational context unclear.
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 67%, with the body's method and email_address already described in the schema. The description's mention of the three send methods aligns with the method enum, adding a small amount of context beyond the schema. But it does not clarify the 'id' or 'administration' parameters, and the schema already covers the essential 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 explicitly states the action (send a sales invoice), the three methods (email, mark as sent, Peppol), and a key side effect (finalized before sending). This clearly distinguishes it from sibling tools like send_sales_order or send_quotation, leaving no ambiguity about the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. It does not mention conditions for choosing email over mark or Peppol, nor does it reference sibling tools such as update_sales_invoice or get_sales_invoice_pdf. The usage context is only implicit from the tool name and the three methods listed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_sales_orderSend a sales orderA
Send a sales order.
Send a sales order via email or mark as sent. Requires the trade module to be active. Peppol is not available for sales orders.
[Sales Orders] POST /orders/sales/send/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales order to send. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-readOnly, non-idempotent behavior. The description adds useful context about the trade module requirement and Peppol unavailability, but doesn't disclose side effects like marking the order as sent changing its state permanently.
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 and front-loaded with the main action, followed by prerequisites and constraints. The endpoint mention is slightly redundant but harmless.
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 send operation, the description covers the key prerequisites and limitations. The schema handles parameters, and annotations cover mutability. It lacks a note on what the response contains, but no output schema exists, so this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, and the schema already documents method and email_address semantics. The description does not add extra parameter meaning beyond what the schema provides, so a 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 the tool sends a sales order via email or marks it as sent. This provides a specific verb and resource, and the method distinction helps separate it from other send tools like send_sales_invoice or send_quotation.
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 states the prerequisite that the trade module must be active and explicitly notes that Peppol is not available for sales orders. While it doesn't name alternative tools, this contextual guidance helps the agent decide when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactUpdate a contactAIdempotent
Update a contact.
Update an existing contact person by ID.
[Contacts] PUT /contact/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the contact to update. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate that this is not read-only, is idempotent, and is not destructive. The description adds the PUT endpoint and the 'existing contact' scope, but does not disclose whether the update replaces the whole contact or only supplied fields. It neither contradicts the annotations nor adds significant behavioral context beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action. The first line repeats the tool title somewhat redundantly, but the second line adds specificity and the third line gives the HTTP endpoint, so there is minimal 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?
The description is sufficient for a straightforward update operation, especially with schema details and annotations covering idempotency and destructive behavior. However, it does not clarify partial versus full update semantics or describe what the tool returns, and there is no output schema to fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description only reinforces that the update is by ID, which the schema already documents. The schema provides descriptions for the id, administration, and most contact body fields, so the moderate schema coverage carries most of the burden. The description does not add meaningful parameter 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 states a specific verb and resource: 'Update an existing contact person by ID.' It clearly distinguishes this from create_contact and get_contact by emphasizing 'existing' and 'Update,' so an agent can identify the tool's purpose without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: to update a contact that already exists, identified by ID. However, it does not explicitly mention alternatives like create_contact for new contacts or get_contact for reads, leaving the usage routing partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_memorandum_entryUpdate a memorandum entryAIdempotent
Update a memorandum entry.
Update an existing memorandum journal entry. All lines are replaced with the newly provided lines. Debit and credit totals across all lines must be equal.
[Memorandum] PUT /memorandum/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the memorandum entry to update. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a non-obvious destructive behavior: 'All lines are replaced with the newly provided lines', which is valuable beyond annotations. It also states the balancing constraint. Annotations declare idempotentHint=true and destructiveHint=false, and the description does not contradict them; it adds practical behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence 'Update a memorandum entry.' duplicates the title and adds no value. The remaining sentences are informative and the HTTP endpoint is useful, but the redundancy and lack of clear front-loading of the most critical warning (full line replacement) prevent a higher score.
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 update operation with no output schema, the description covers the essential semantics: update existing, replace lines, enforce balancing. It does not mention response details or permissions, but the schema and annotations cover the main constraints, so the agent has sufficient context to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides rich descriptions for all parameters, including date format, line requirements, and the equal-total constraint. The description repeats the balancing condition but does not add meaning beyond the schema. With 67% schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: 'Update an existing memorandum journal entry.' It also specifies key behavior (all lines replaced, debit/credit totals must be equal) and the HTTP endpoint, making it easy to distinguish from create_memorandum_entry or get_memorandum_entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for modifying an existing entry ('Update an existing...'), so an agent can infer it is not for creation or retrieval. However, it does not explicitly mention when to prefer this over create_memorandum_entry or provide exclusion criteria, leaving usage context only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_quotationUpdate a quotationBIdempotent
Update a quotation.
Update an existing quotation by ID.
[Quotations] PUT /quotations/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the quotation to update. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, which cover the safety profile. The description does not add any behavioral context beyond the update action itself, such as field overwrite semantics or required fields on update. No contradiction with annotations, but no added value either.
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 short, but it repeats the tool name and title in the first sentence, and then repeats the same idea in the second sentence. The endpoint line is useful. Slight redundancy, but overall efficient and front-loaded with 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?
For an update tool with no output schema, the description is too minimal. It does not explain whether the PUT replaces the entire object or merges fields, nor does it warn that omitting certain fields (like attachments) may clear them. The schema provides some guidance, but the description leaves important behavioral context unaddressed, especially for an API where PUT semantics can be non-obvious.
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 67%, meaning some parameters lack descriptions, but the tool description adds no parameter-level meaning beyond what the schema provides. It does not clarify that the body must contain all required fields for the update, nor does it explain the PUT overwrite semantics. A brief param summary in the description would have compensated for the incomplete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Update') and resource ('a quotation'), further specifying 'an existing quotation by ID'. It clearly differentiates from create or get operations for quotations, and the HTTP PUT endpoint reinforces the update semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives like create_quotation or get_quotation. It does not mention that the quotation must already exist or that this tool is for modifying existing records only. The statement 'Update an existing quotation by ID' implies a precondition, but no explicit exclusions or references to sibling tools are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_receiptUpdate a receiptBIdempotent
Update a receipt.
Update an existing receipt.
[Receipts] PUT /receipts/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the receipt to update. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds the endpoint method 'PUT' which subtly suggests full replacement semantics, but it does not explain whether omitted fields are cleared, whether the receipt must already exist, or what happens on update. No contradiction with annotations exists; the description is neutral but does not significantly enrich 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 very short—three short phrases—but it includes redundant lines: 'Update a receipt.' and 'Update an existing receipt.' say essentially the same thing. The endpoint header adds slight structural value, but the redundancy wastes a sentence. Overall it is concise but not optimally structured; the key detail (PUT endpoint) is placed last.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and annotations cover basic operation traits, but the description does not specify return values, error cases, or side effects. Since it is a simple update tool with a well-described schema, an agent can probably proceed, but it lacks important context like what fields may be omitted, whether partial updates are allowed, and the response format. This is 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?
The schema covers 67% of parameters with descriptions, and the description itself adds little beyond the schema. However, the schema clearly documents the id and body, and the nested ReceiptInput properties include descriptions and examples. The description emphasizes 'existing receipt', reinforcing that the id refers to an existing resource. Although the description does not compensate fully for the 33% gap, the schema itself is fairly descriptive, so the parameter semantics are adequately conveyed.
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 existing receipt' and references the REST endpoint 'PUT /receipts/{id}', which identifies the resource and operation. It distinguishes from siblings like create_receipt and get_receipt through the verb 'update', though it does not explicitly name alternatives. The title 'Update a receipt' reinforces clarity, but the description is somewhat terse and duplicates the title.
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 offers no explicit guidance on when to use this tool versus alternatives such as create_receipt or update_purchase_invoice. It only states the action, leaving the agent to infer usage from the endpoint pattern. There is no mention of prerequisites, typical scenarios, or exclusions, so an agent receives minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_recurring_invoiceUpdate a recurring invoiceBIdempotent
Update a recurring invoice.
Update an existing recurring invoice by ID.
[Recurring Invoices] PUT /invoices/recurring/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the recurring invoice to update. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=true, so the safety profile is covered, but the description adds no extra behavioral context such as whether the update is a full replacement, what happens to existing fields, or any side effects. The only hint is the PUT method in the endpoint line, which is not expanded.
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 and front-loaded with the core purpose, but it redundantly repeats 'Update a recurring invoice' in the first two sentences. The endpoint line is useful context, but the repetition wastes space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the RecurringInvoiceInput with nested subscription and line objects, the description is minimal. It does not explain how updates behave (e.g., whether omitted fields are reset, how to preserve attachments), which is important for a PUT operation. The schema partially compensates, but the description leaves key decisions to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema's description coverage is 67% and the parameter definitions are detailed (e.g., attachments note, subscription fields). The tool description itself adds no parameter-specific meaning, so it stays at the baseline since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Update' with a specific resource ('recurring invoice') and identifies 'by ID', making it unambiguous. It inherently distinguishes from sibling tools like create_recurring_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It is implied that this tool is used when you need to modify an existing recurring invoice, and the tool name itself contrasts with create_recurring_invoice. However, there is no explicit guidance on when to prefer this over alternatives or what conditions must be met (e.g., the invoice must already exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_relationUpdate a relationBIdempotent
Update a relation.
Update an existing relation by ID. Not all fields are required; you can send only the fields you want to update.
[Relations] PUT /relations/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the relation to update. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutating behavior (readOnlyHint=false) and idempotency (idempotentHint=true). The description adds value by explicitly stating that partial updates are allowed ('Not all fields are required; you can send only the fields you want to update'), which is useful behavioral context not present in annotations. However, it does not mention validation rules, error conditions, or side effects beyond the update.
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 and mostly front-loaded, but the first sentence 'Update a relation.' repeats the tool title and adds no information. The second sentence carries the meaningful content, and the endpoint reference is helpful. Slight redundancy prevents a 5.
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 complex input schema (nested oneOf, many optional fields) and no output schema, the description provides only minimal guidance. The partial-update note is important, but the tool would benefit from context about when to use it relative to create_relation, how the body selection works, or what happens on success. The rich schema compensates somewhat, but the description alone is not fully complete for an agent trying to decide and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, and the input schema richly documents the body structure with oneOf types, examples, and field-level descriptions. The description adds a key semantic point about partial updates, which directly affects how the body parameter should be constructed. This is valuable but not extensive; it does not clarify the discrimination between RelationInputCompany and RelationInputPrivate 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 action ('Update an existing relation by ID') with a specific resource. It does not explicitly differentiate from sibling tools like create_relation, but the verb 'update' and 'existing by ID' make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus create_relation or other relation tools. There are no exclusions, prerequisites, or alternative suggestions. An agent must infer that this is for modifying an existing relation based only on the name and the phrase 'existing relation'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_salesbook_invoiceUpdate a salesbook invoiceCIdempotent
Update a salesbook invoice.
Update an existing salesbook invoice by ID.
[Salesbook] PUT /salesbook/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the salesbook invoice to update. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=true), the description adds no behavioral detail such as partial vs full replacement, permission requirements, or effects on existing data. It does not contradict annotations, but also does not enrich them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the essential action. The HTTP endpoint line adds concrete detail without waste, though the first sentence repeats the tool title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an update operation, the description omits important context such as whether it is a full replacement (typical for PUT) or a partial update, and what the response contains. With no output schema and no mention of side effects, an agent gets only the bare minimum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the parameters thoroughly, including the 'body' object with field-level descriptions. The description adds minimal semantic value ('by ID' aligns with the id parameter), and with 67% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Update') and a specific resource ('existing salesbook invoice by ID'), which distinguishes it from creating or listing salesbook invoices. It directly identifies the operation's target, though it does not explicitly mention alternative 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 provides no guidance on when to use this tool versus siblings like create_salesbook_invoice or update_sales_invoice. It only states what it does, leaving the agent to infer when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sales_invoiceUpdate a sales invoiceAIdempotent
Update a sales invoice.
Update an existing sales invoice by ID. The invoice must be in concept status.
[Sales Invoices] PUT /invoices/sales/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales invoice to update. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, readOnlyHint=false, and destructiveHint=false, so the description does not need to repeat those. However, it misses the PUT semantics: the schema's attachments field hint implies a full replacement on PUT, but the description does not state this. The concept-status constraint is useful but not enough to earn a higher score.
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 and an endpoint reference. It front-loads the action and resource, then adds the critical status condition. No redundant words or filler. The structure is efficient and easy to scan.
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 detailed input schema and annotations, the description is mostly sufficient, but it fails to disclose the PUT replacement behavior, which significantly impacts how an agent constructs the body. It also does not mention return values or error conditions for non-concept-status invoices. The missing PUT semantics is a notable gap in a complete context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions updating 'by ID', which maps to the id parameter, and the schema covers all parameters with detailed nested descriptions. Schema description coverage is 67%, and the description adds no extra meaning beyond the schema. The schema's comprehensive field-level documentation carries the bulk of 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 states a clear verb ('Update') and resource ('a sales invoice'), and specifies the operation is done by ID. It also names siblings like create_sales_invoice and get_sales_invoice, and the 'by ID' qualifier distinguishes it from creation or listing. The requirement for concept status further clarifies what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context: the invoice must be in concept status, which is a key prerequisite. It does not explicitly mention when to use this over alternatives, but the update semantics are self-evident and the status condition provides practical guidance. No exclusions or alternatives are named, but the single constraint is enough for a clear use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sales_orderUpdate a sales orderBIdempotent
Update a sales order.
Update an existing sales order by ID. Requires the trade module to be active.
[Sales Orders] PUT /orders/sales/{id}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales order to update. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds the trade module requirement and the PUT method, which gives some behavioral context. However, it does not disclose that a PUT is a full replacement of the order or that omitting attachments removes them — though the schema mentions this. The added behavior is accurate but thin.
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 and includes the endpoint line, but the opening 'Update a sales order.' is redundant with the title and the next sentence. It could be tightened without losing information. Overall it is concise and front-loaded, but not perfectly lean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is an update operation with a complex nested body, no output schema, and many sibling tools. The description does not explain that a PUT requires the entire order object in the body, nor does it mention that the fields in SalesOrderInput are required for a full update. It also does not describe any return value or finalization behavior. The gap is significant given the importance of full-replacement semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter-related phrase in the description is 'by ID', which merely restates the schema description for the `id` parameter. It gives no additional guidance about the `body` parameter (the SalesOrderInput) or the `administration` parameter. With 67% schema coverage, the description does not compensate for the undocumented `body`, even though nested schema descriptions are rich.
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 ('Update'), the resource ('sales order'), and the mechanism ('by ID'). It also includes the HTTP endpoint PUT /orders/sales/{id}, which uniquely identifies the operation among many sibling update_* tools. The repeated 'Update a sales order' does not add much, but the overall purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying 'Update an existing sales order by ID' and mentions a prerequisite ('Requires the trade module to be active'). However, it does not explicitly contrast with create_sales_order or partial-update alternatives, nor does it state when not to use this tool. The guidance is present by implication rather than direct routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_sales_invoice_attachmentUpload an invoice-specific attachmentA
Upload an invoice-specific attachment.
Upload a file as a document-specific attachment for a sales invoice. The file content must be base64-encoded. Supported types: PDF, PNG, JPEG, GIF, DOC, DOCX, XLS, XLSX. Maximum size: 10 MB. The attachment is automatically included when the invoice is sent by email and is preserved when the invoice is updated. Do not reference these IDs in the 'attachments' field of POST/PUT requests; manage them only through this endpoint.
[Sales Invoices] POST /invoices/sales/{id}/attachments
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the sales invoice. | |
| body | Yes | ||
| administration | No | The client administration to act on. Only one is configured: default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses key behavioral traits: the attachment is automatically included in invoice emails, preserved on invoice updates, and managed only through this endpoint. This gives the agent a clear mental model of side effects and lifecycle behavior, exceeding what annotations provide.
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 information-dense but slightly repetitive ('Upload' appears twice) and includes an endpoint reference that may be redundant. Still, key facts are front-loaded and every sentence carries useful guidance. Minor redundancy keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description does not specify the response format, which is a minor gap. However, for an upload operation, the key success criteria (file types, size, inclusion behavior) are covered. The description is complete enough for an agent to call the tool correctly, with only slight ambiguity about return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all three top-level parameters and nested fields, so baseline is 3. The description adds meaningful details: base64-encoding requirement, supported file types, and maximum size, which complement the schema's 'Base64-encoded file content' and filename example. This adds value beyond the schema, justifying a 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 states a specific verb ('Upload') and resource ('invoice-specific attachment for a sales invoice'), making the tool's purpose immediately clear. It also distinguishes it from siblings like download_sales_invoice_attachment and delete_sales_invoice_attachment by explicitly mentioning the upload action and the invoice context.
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 strong usage context: supported file types, size limits, and automatic inclusion in email sends. It also gives an important exclusion ('Do not reference these IDs in the 'attachments' field of POST/PUT requests'), which guides correct use. However, it does not explicitly name alternative tools or state when not to use this endpoint, leaving some inference to the agent.
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.
71 tool updates
v1.0.0- First observed
create_contact - First observed
create_memorandum_entry - First observed
create_purchase_invoice - First observed
create_quotation - First observed
create_receipt - First observed
create_recurring_invoice - First observed
create_relation - First observed
create_sales_invoice - First observed
create_sales_order - First observed
create_salesbook_invoice - First observed
delete_sales_invoice_attachment - First observed
download_sales_invoice_attachment - First observed
get_administration - First observed
get_balance_report - First observed
get_column_balance_report - First observed
get_contact - First observed
get_memorandum_entry - First observed
get_purchase_invoice - First observed
get_purchase_invoice_options - First observed
get_purchase_invoice_pdf - First observed
get_quotation - First observed
get_quotation_options - First observed
get_quotation_pdf - First observed
get_receipt - First observed
get_recurring_invoice - First observed
get_recurring_invoice_options - First observed
get_relation - First observed
get_sales_invoice - First observed
get_sales_invoice_options - First observed
get_sales_invoice_pdf - First observed
get_sales_order - First observed
get_sales_order_options - First observed
get_sales_order_pdf - First observed
get_salesbook_invoice - First observed
get_salesbook_invoice_options - First observed
get_salesbook_invoice_pdf - First observed
list_administrations - First observed
list_attachments - First observed
list_cost_centres - First observed
list_currencies - First observed
list_journals - First observed
list_ledgers - First observed
list_memorandum_entries - First observed
list_payment_conditions - First observed
list_products - First observed
list_purchase_invoices - First observed
list_quotations - First observed
list_receipts - First observed
list_recurring_invoices - First observed
list_relations - First observed
list_sales_invoices - First observed
list_sales_orders - First observed
list_salesbook_invoices - First observed
list_subscription_types - First observed
list_templates - First observed
list_vat_options - First observed
open_setup - First observed
refresh_api_spec - First observed
send_quotation - First observed
send_sales_invoice - First observed
send_sales_order - First observed
update_contact - First observed
update_memorandum_entry - First observed
update_quotation - First observed
update_receipt - First observed
update_recurring_invoice - First observed
update_relation - First observed
update_sales_invoice - First observed
update_sales_order - First observed
update_salesbook_invoice - First observed
upload_sales_invoice_attachment
TDQS
Scored across 71 tools
每个工具都针对不同的资源或操作,命名后缀明确区分了销售发票、销售账簿发票、经常性发票、报价等相似概念。不过销售发票与销售账簿发票名称相近,仍需依赖描述细节来避免误选,因此略扣一分。
所有工具都遵循一致的 snake_case verb_noun 模式,如 create_sales_invoice、list_relations、update_receipt、get_quotation_pdf,没有混用 camelCase 或不同的动词风格。即使像 open_setup 和 refresh_api_spec 这样的特殊工具也保持了可预测的动词开头。
工具数量达到71个,远超25个的合理上限。虽然这个服务器试图完整覆盖 Informer API,但庞大的工具集对代理来说选择负担很重,而且大量重复的 CRUD 模式让规模显得臃肿。
覆盖了关系、联系人、销售/购买发票、经常性发票、销售订单、报价、收据、备忘录和报告等核心会计领域,并提供了选项、PDF、附件和发送等辅助操作。但缺少购买发票的更新操作,也没有任何通用的删除功能(除附件外),存在一些可绕过的小缺口。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
MCP server for Quaderno — tax-rate calculation, invoices, contacts, products, receipts & expenses.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.
Related MCP Servers
- AlicenseBqualityCmaintenanceMCP server to interact with the Cuéntica accounting API, allowing users to manage invoices, expenses, income, clients, providers, and bank accounts via natural language.592MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for the Billingo V3 Hungarian invoicing API. Manage invoices, partners, products, spendings, and bank accounts from any MCP client.181MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that wraps the cebelca.biz accounting API, exposing tools for operations like managing partners, invoices, proformas, and fetching PDFs.2-
- AlicenseBqualityAmaintenanceRead-only MCP server for self-hosted Manager.io bookkeeping, providing curated GET tools to access accounting data like invoices, balances, and reports.101MIT