Skip to main content
Glama
tillbooks

tillbooks

Official

TILL

npm (beta) MCP Registry Glama score License: MIT

Trusted Independent Ledger Library. An agent-first ERP for Swiss SMEs.

TILL is a free, open-source (MIT) ERP for Swiss small businesses: sales, purchasing, payments, stock, projects, books and MWST. Every function is exposed as an MCP tool, 844 of them, so your AI agent runs it and the Studio (the app you work in) shows you what it did. It works with Claude Desktop, Cursor and other MCP clients that can start a local stdio server. TILL runs on your own computer, or on a server you host yourself. Your books are a single SQLite file on that machine, and no server of ours holds a copy.

By default, the agent waits for your OK before it books anything, moves your money, grants access or deletes your data for good: it drafts, and you approve. For each of those areas you decide whether it may act on its own. Much of what you can change back, such as drafts and contact details, runs without asking, and every call the agent makes is recorded. The dial covers agents that connect to TILL. An agent that can drive your browser or run commands on your computer can act as you: give your agent TILL, not your browser or your shell.

Public beta, version 1.0.0-beta.2. Nomadik GmbH, the company behind TILL, keeps its own books in it. If you move your books to TILL, keep your old system running until the figures match, and read what the beta does not do yet first.

Why

TILL is MIT licensed and costs nothing. You can run it, change it and keep it, with no limit on users, companies or bookings, and your books stay on a computer you control. It is built for what makes Swiss books Swiss:

  • QR-bill (Swiss QR-Rechnung) with the structured-address standard

  • MWST at 8.1%, 3.8% and 2.6%, with the effective and the Saldosteuersatz method, and the MWST-Abrechnung drawn straight from the ledger

  • Kontenrahmen KMU seeded out of the box

  • ISO 20022 banking: camt.053 statements in, pain.001 payment files out

  • de-CH and en

Related MCP server: bookie

What TILL covers

  • Accounting: double-entry ledger, period locks and year close, foreign currencies and revaluation, accruals, fixed assets, and several companies in one install.

  • MWST: the MWST-Abrechnung per period, reconciled to the ledger, and the eCH-0217 file you upload to the ESTV ePortal.

  • Sales: quotes, orders, delivery notes, invoices with the QR-bill, credit notes, recurring invoices, reminder letters and the open-items list.

  • Purchasing: supplier bills with input VAT, purchase orders, goods receipt, expense claims, and pain.001 payment files that you release in your eBanking. TILL never sends a payment.

  • Bank: import the camt.053 statements from your eBanking. The bank inbox proposes a booking for each line it can place, and you confirm it.

  • Contacts and CRM, products and stock (warehouses, lots and serial numbers, stock valuation), projects and time tracking, documents, reports.

  • Moving in: import from bexio's CSV and Excel exports (there is no bexio API connection), a trial company to try the import on, and a parallel run that checks TILL's figures against your old system. Fixed assets, stock and payroll history do not come over, and last year's journal lands in a read-only archive beside the live books.

The ledger is not negotiable

Posted entries are append-only and immutable. A correction is a reversing entry, never a destructive edit, exactly as real accounting works. Posting is idempotent: a double-post does not double-count. These are asserted in the test suite, not merely promised in a README.

Install and run

You need Node.js 22 or newer on macOS or Linux. The quickest way in is to let your agent do it: tillbooks.ch/en/start has a setup prompt for Claude Code (terminal or desktop app), Cursor or Windsurf: it installs TILL, starts the Studio, asks you to open the demo company and connects itself. By hand, it is two commands:

npm install -g tillbooks@beta
till up

Keep the @beta. Until the beta ends, a plain tillbooks on npm is the old 0.1.0, which has no Studio.

till up starts the Studio at http://127.0.0.1:8788 and opens it in your browser. It listens on your own machine only. The first screen offers three ways in: create a new ledger, restore a backup, or restart TILL on an existing database file. Beneath them, Try the demo sets up a demo workspace with sample postings. Your books go to ~/.till/till.db; set TILL_DB_PATH to put them somewhere else.

To connect an MCP client such as Claude Desktop or Cursor, point it at the stdio server. No account and no API key are needed:

{
  "mcpServers": {
    "tillbooks": {
      "command": "npx",
      "args": ["-y", "tillbooks@beta", "mcp"]
    }
  }
}

In Claude Code, the same server is one line:

claude mcp add tillbooks -- npx -y tillbooks@beta mcp

Or install it as a plugin, which pins the server to the current beta: in Claude Code, /plugin install tillbooks --marketplace tillbooks/tillbooks. The same plugin folder works in Cursor.

The agent and the Studio work on the same file, so what the agent does shows up in the Studio.

To work on TILL itself, build it from a checkout:

npm run setup            # installs the core and the Studio dependencies
npm run build:all        # builds the core into dist/ and the Studio into app/dist/
node bin/till.mjs up

CONTRIBUTING.md has the full dev setup, and the quickstart walks through the first run.

Your data

  • Your books are one SQLite file. You can copy it, back it up and open it with standard tools.

  • No account, no sign-up, no telemetry. TILL does not report on you or on how you use it. Error details are recorded only if you switch that on, they stay on your machine, and they leave it only in a feedback mail you send yourself.

  • You can export a whole company at any time in an open, documented format, and a backup restores into a fresh workspace without touching the ones you have.

Privacy Policy

TILL is software you run yourself. Nomadik GmbH, which publishes it, does not run a server for it and receives nothing from it. This covers the tillbooks package, its MCP server, the Studio and the plugin in plugins/tillbooks.

  • Data collection. TILL collects no data about you or how you use it: no account, no sign-up, no telemetry, no analytics. Error details are recorded only if you switch that on.

  • Usage and storage. What you enter (your company, contacts, documents and postings) is stored in one SQLite file on your machine, ~/.till/till.db or the path in TILL_DB_PATH. Diagnostics, backups and feedback reports you create stay in ~/.till or TILL_SUPPORT_DIR. TILL itself opens no outbound connection: the MCP server talks over stdio and the Studio listens on 127.0.0.1 only.

  • Third-party sharing. TILL shares nothing with anyone. Two things leave your machine because other software sends them: npm or npx downloads the package from the npm registry, under npm's terms, and what your agent reads through TILL's tools becomes part of your conversation with your AI provider, under that provider's terms. Files TILL writes for you (an eCH-0217 return, a pain.001 payment file, an invoice PDF, a feedback report) leave only when you upload or send them yourself.

  • Data retention. Your data stays on your disk until you delete it. Posted entries are append-only, as Swiss bookkeeping requires; a correction is a reversing entry. Deleting the database file and ~/.till removes everything TILL stored. Keeping your books for the statutory period (OR Art. 958f) is your responsibility.

  • Contact. Nomadik GmbH, Männedorf, Switzerland, hello@tillbooks.ch. The privacy statement for the tillbooks.ch website is at tillbooks.ch/en/legal.

What the beta does not do yet

  • No payroll. TILL exports your employee data for your payroll provider and posts the wage journal you bring back. Pay slips, AHV and Swissdec stay with the provider.

  • No MWST filing. TILL prepares the MWST-Abrechnung and writes the eCH-0217 file. You upload it and file in the ESTV ePortal yourself.

  • No MWST on received consideration (vereinnahmte Entgelte). TILL computes the Abrechnung on agreed consideration (vereinbarte Entgelte) and refuses a period set up the other way.

  • No email sending yet. TILL makes the PDF of an invoice, quote or reminder, and you send it from your own mail program. Sending through your own mail account is planned for a later beta release.

  • German (de-CH) and English only. No French or Italian yet.

  • No mobile app, and no Windows app. We do not test on Windows; the documented route there is running TILL inside an agent.

  • No direct bank connection in this release. The EBICS client is built and has been tested with ZKB's test platform, but the module that connects it to the bank is not published yet (it will be, under MIT). Until then you download camt.053 statements from your eBanking and import them.

  • On your own computer, backups run when you start them (Data & Backup, "Back up now"), not on a schedule. Keep a copy of the backup file somewhere other than the computer the books are on. (The self-hosting recipe replicates the book continuously with Litestream.)

  • Several people in one book only on a server you host yourself. The local app is for one computer.

  • No eBill sending, e-signature or online customer portal.

Documentation

Before you use it

TILL keeps books, so DISCLAIMER.md is worth two minutes: TILL is not tax advice, you stay responsible for your own filings, and a beta deserves a parallel run before you rely on it.

Help is free and best effort during the beta, and paid help with setup and with moving from bexio is available. SUPPORT.md has the details.

Contributing

License

MIT, Copyright (c) 2026 Nomadik GmbH. See LICENSE.

TILL is an independent project. It is not affiliated with, endorsed by, or derived from bexio AG or any other accounting vendor, and it copies no code, UI or trade dress from any of them.

Available Tools

822 tools
accept_inviteA
Idempotent

Redeem an invite token: bind this session actor to the invited identity and activate the membership. Pre-workspace, because the accepter is not a member yet.

NameRequiredDescriptionDefault
tokenYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: it mutates session/actor binding and activates a membership, and it flags the pre-workspace prerequisite. It doesn't cover token expiry, single-use semantics, or failure behavior, which keeps it from a 5.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and effect, with the prerequisite placed after. Every clause carries information; no filler.

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

Completeness3/5

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

Given a single-parameter activation tool with annotations covering idempotency and safety, no output schema, and a sibling invite_member, the description covers the core intent and the pre-workspace constraint. It is still missing how to obtain the token and what happens on invalid, expired, or already-used tokens, which matters for a token-redemption flow.

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

Parameters2/5

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

With only 1 parameter, 0% schema description coverage, and no enums, the description should carry the burden of explaining the token. It only implies the parameter is an invite token; it says nothing about where the token comes from, its format, or whether it is single-use, so it does not compensate for the schema gap.

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

Purpose4/5

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

States a specific verb and resource ('Redeem an invite token') plus the resulting effect (bind session actor to the invited identity, activate membership). It doesn't explicitly distinguish itself from the sibling invite_member, but 'redeem' vs 'invite' is clear enough that an agent won't confuse them.

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

Usage Guidelines4/5

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

Gives a concrete usage condition: it must be used pre-workspace because the accepter is not yet a member. That resolves the natural ambiguity about why a workspace-scoped tool wouldn't apply. It doesn't name alternatives or exclusion cases explicitly, so not a 5.

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

account_set_tax_defaultC
DestructiveIdempotent

Set (or clear) an account's default tax code.

NameRequiredDescriptionDefault
taxCodeNo
accountIdYes
workspaceIdYes

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already disclose that the operation is idempotent and potentially destructive, and the description is consistent with that by mentioning clearing. However, it does not explain what clearing affects, whether an existing default is replaced, or what permissions are required.

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

Conciseness4/5

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

The description is a single efficient sentence with the core operation front-loaded and no filler. Its terseness is not wasted, though the brevity comes at the cost of useful detail rather than through deliberate compression.

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

Completeness2/5

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

For a destructive account-setting mutation with three undocumented parameters and no output schema, the description is too thin. It omits the clearing semantics, replacement behavior, and any prerequisite or permission context needed to invoke it confidently.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, but it only addresses the tax code implicitly. It does not explain that omitting taxCode clears the default, nor does it describe accountId or workspaceId beyond their names.

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

Purpose4/5

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

The description states a specific verb and resource: setting or clearing an account's default tax code. It clearly distinguishes the operation from general account update or tax-code maintenance tools, though it does not explicitly name a sibling alternative.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus update_account or tax-code configuration tools. It also does not state prerequisites, such as whether the tax code must already exist in the workspace.

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

accrual_createA
DestructiveIdempotent

Describe an Abgrenzung (OR Art. 958b) and save it as a DRAFT: kind is one of prepaid_expense (Aufwand vorausbezahlt, Dr 1300), accrued_income (Ertrag noch nicht fakturiert, Dr 1300), accrued_expense (Aufwand noch nicht fakturiert, Cr 2300) or deferred_income (Ertrag vorausbezahlt erhalten, Cr 2300); contraAccount is the P&L account (number or id, income for the income kinds, expense for the expense kinds); amountMinor is integer Rappen; periodEnd is the balance-sheet date. Returns the draft with the exact lines the post will write and the reversal lines dated the day after. Nothing is posted.

NameRequiredDescriptionDefault
kindYes
currencyNo
periodEndYes
sourceRefNo
amountMinorYes
descriptionYes
workspaceIdYes
costCenterIdNo
contraAccountYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare idempotency and a destructive hint. The description adds useful behavior beyond them: the draft is not posted, and the response includes the exact future post lines plus reversal lines dated the day after. It does not explain why destructiveHint is true or what could be overwritten, which is the remaining gap.

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

Conciseness4/5

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

The description is dense but front-loaded and every clause adds useful information. It is a single long sentence, so it could be more scannable if split, but there is essentially no filler.

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

Completeness4/5

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

There is no output schema, so the description appropriately explains what the call returns: the draft with exact post lines and reversal lines dated the next day. It also establishes that nothing is posted. The main missing completeness item is guidance around the required idempotency key and other secondary parameters.

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

Parameters4/5

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

With 0% schema description coverage, the description carries substantial weight and succeeds for the critical fields: it defines the four `kind` values with accounting treatment, explains that `contraAccount` is the P&L account with direction by kind, states `amountMinor` is integer Rappen, and defines `periodEnd` as the balance-sheet date. Several parameters such as `idempotencyKey`, `sourceRef`, `currency`, `costCenterId`, and `workspaceId` remain unaddressed.

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

Purpose5/5

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

The description states a specific action: describe an Abgrenzung (OR Art. 958b) and save it as a DRAFT. The explicit 'Nothing is posted' clause distinguishes it from the sibling accrual_post, so an agent can tell exactly what this tool creates.

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

Usage Guidelines4/5

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

The description clearly sets the context that this is draft creation only and that nothing is posted, implying that accrual_post is the separate posting step. It stops short of naming the alternatives or stating exclusions explicitly, so it is strong but not fully routing-aware.

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

accrual_discardA
Idempotent

Retire a drafted Abgrenzung before it posts. The row stays on record as discarded with its reason; a posted accrual cannot be discarded (already_posted), reverse it instead.

NameRequiredDescriptionDefault
reasonNo
accrualIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds real substance: the row is retained as `discarded` with its reason, and the failure mode surfaces as `already_posted`. That tells the agent the outcome is a soft state transition, not a delete, and what error to expect.

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

Conciseness5/5

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

Two tight sentences with the action and precondition front-loaded, then the outcome and error case. Every clause carries information an agent needs.

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

Completeness4/5

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

No output schema, so the description correctly explains the resulting state and error code, and it routes the mis-case to the right sibling. The remaining gap is parameter-level detail (notably idempotencyKey behavior) rather than tool behavior.

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

Parameters2/5

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

Schema description coverage is 0% and the description only implicitly explains one of four parameters (the reason string being persisted on the discarded row). accrualId, workspaceId, and especially idempotencyKey — whose semantics matter for a retryable mutation — are undocumented in both schema and description.

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

Purpose5/5

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

Specific verb ('Retire') plus specific resource ('a drafted Abgrenzung before it posts'), and it explicitly separates this from accrual_reverse / accrual_post by naming the post-state boundary. An agent can identify the tool from the description alone.

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

Usage Guidelines5/5

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

States the precondition (drafted, not yet posted), the exclusion (a posted accrual cannot be discarded), and names the correct alternative for that case ('reverse it instead'). Nothing is left to inference.

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

accrual_getA
Read-only

Read one Abgrenzung: the row, its lines and reversal lines (from the same function the post uses), and the journal entries it has produced (the accrual, its reversal, the Storno pair).

NameRequiredDescriptionDefault
accrualIdYes
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

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

The readOnlyHint=true annotation already declares the read-only safety profile, and the description aligns with it by opening with 'Read'. The description adds meaningful context beyond the annotation by disclosing what is actually returned (row, lines, reversal lines, journal entries, Storno pair) and notes the provenance consistency ('from the same function the post uses'). This is useful behavioral detail for an agent deciding what it can rely on.

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

Conciseness4/5

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

The description is one front-loaded sentence with no filler; the verb 'Read' appears immediately and each subsequent clause enumerates a distinct return component. The parentheticals ('from the same function the post uses', 'the accrual, its reversal, the Storno pair') are dense but each earns its place by clarifying provenance or terminology.

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

Completeness3/5

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

For a simple two-parameter read tool backed by readOnlyHint=true, the return contents are well described and the safety profile is covered by annotations. The notable gaps are that both parameters are under-documented across schema and description, and the German term 'Abgrenzung' is used without being fully defined, so the agent needs context from the sibling accusatory set to fully understand the concept being read.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden of explaining the two parameters, but it never mentions workspaceId or accrualId or clarifies their meaning, format, or relationship. The only oblique connection is that 'Read one Abgrenzung' implies the accrualId selects the record; the workspace dimension is entirely unaddressed.

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

Purpose5/5

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

The description opens with a specific verb and resource — 'Read one Abgrenzung' — and then enumerates the exact return scope: the row, its lines, reversal lines, and produced journal entries (accrual, reversal, Storno pair). This scope is specific enough to clearly distinguish it from the mutating accrual siblings (accrual_create, accrual_post, accrual_reverse, accrual_discard) and from the collection-focused accrual_list. It does not name a sibling, but the read-target and depth are unambiguous.

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

Usage Guidelines3/5

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

The phrasing 'Read one Abgrenzung' implies the intended use — fetch the full detail of a single accrual record — and the listed return components imply the data depth an agent should expect. However, there is no explicit guidance about when to prefer this tool over accrual_list or the read-style siblings (e.g., provision_get), and no exclusions or prerequisites are stated.

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

accrual_listA
Read-only

List Abgrenzungen, newest period first, filtered by periodEnd, status (draft | posted | reversed | discarded) or kind. totalMinor sums the drafts and the posted ones. savedViewId applies a saved view (G00).

NameRequiredDescriptionDefault
kindNo
statusNo
periodEndNo
savedViewIdNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses meaningful behaviors: results are ordered newest period first, totalMinor aggregates drafts and posted accruals, and savedViewId applies a saved view. This provides useful behavioral context without contradicting the read-only annotation.

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

Conciseness5/5

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

Two compact sentences deliver the core action, sorting, filters, status enum, a computed-field behavior, and saved-view semantics. Every phrase earns its place with no redundancy or padding.

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

Completeness4/5

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

The description covers the essential call dimensions: filtering, ordering, and the special totalMinor/savedView behaviors. It does not document output structure or pagination, but given no output schema exists, but the core information needed to invoke the tool correctly is present.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by explaining the filter semantics for periodEnd, status (with explicit allowed values), kind, and savedViewId. It does not define periodEnd format or kind value options, but it adds substantial meaning beyond the bare parameter names.

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

Purpose5/5

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

The description states a specific verb ('List'), the resource ('Abgrenzungen'/accruals), and concrete dimensions of the operation: newest period first, with filtering by periodEnd, status, and kind. This clearly distinguishes it from singular operations like accrual_get and from related but different list tools such as provision_list.

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

Usage Guidelines4/5

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

The description gives clear usage context by specifying sort order and available filters, so an agent knows when to call this listing tool rather than a get/create/post operation. It does not explicitly name alternatives or exclusions, but the list-vs-get distinction is strongly implied.

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

accrual_postA
Idempotent

Post a drafted Abgrenzung as an atomic PAIR: the accrual entry dated periodEnd (source accrual) and its automatic Rückbuchung dated the first day after (a real reversal, linked). A locked reversal date rolls the whole pair back, so the books never carry an accrual without the reversal that backs it out. Idempotent per accrual: the same key replays, a different key on a posted accrual is already_posted, a discarded draft is draft_discarded. CONSEQUENCE: Books the accrual and its automatic reversal in the next period as one pair. If it is wrong, you revert it with a mirror pair; all four entries stay visible.

NameRequiredDescriptionDefault
accrualIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

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

Goes well past the idempotentHint/destructiveHint annotations: discloses atomic all-or-nothing semantics, that a locked reversal date rolls back the whole pair, the exact outcome codes (replay, already_posted, draft_discarded), and that a mistake is corrected by a mirror pair leaving four visible entries. That is precisely the behavioral context annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with the atomic-pair mechanic, then errors, then consequence. The CONSEQUENCE sentence partially restates the opening pair description, so it is slightly redundant, but every other sentence adds distinct information.

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

Completeness4/5

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

No output schema, and the description does not say what a successful post returns (entry ids? the pair?), nor whether the draft must be validated first. Otherwise the mutation semantics, failure modes and undo path are covered well enough to call it safely.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It thoroughly explains idempotencyKey semantics (replay vs. already_posted vs. draft_discarded) and implies accrualId names the draft being posted, but workspaceId and the key's format/scope are left undocumented.

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

Purpose5/5

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

States a specific verb and resource ('Post a drafted Abgrenzung') and pins down the scope: it creates an atomic pair, not a single entry. This distinguishes it cleanly from accrual_create (draft), accrual_reverse (mirror pair) and accrual_discard without needing the schema.

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

Usage Guidelines4/5

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

Implies the precondition clearly ('a drafted Abgrenzung') and describes the revert path ('you revert it with a mirror pair'), which routes an agent away from trying to undo via this tool. It stops short of naming accrual_reverse/accrual_discard explicitly as the alternatives, so selection still takes one inference step.

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

accrual_reverseA
Idempotent

Revert a posted Abgrenzung without editing history: posts the MIRROR pair (the Storno dated periodEnd, its own reversal dated the day after), so all four entries net to zero on every account in both periods. Refuses already_reversed a second time and not_posted on a draft. CONSEQUENCE: Books the mirror pair against a posted accrual, so every account nets to zero; the original pair stays visible. If the reversal was wrong, you create and post the accrual again.

NameRequiredDescriptionDefault
reasonNo
accrualIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the idempotentHint/destructiveHint annotations: it discloses that four entries are produced, that the original pair remains visible, that balances net to zero in both periods, which error codes are returned, and that the operation is not editable/reversible in place. That is exactly the consequence-level detail an agent needs before mutating books.

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

Conciseness4/5

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

Front-loaded with the mechanism, then the error contract, then a labelled 'CONSEQUENCE:' block – easy to scan. The consequence sentence partly restates the opening 'net to zero on every account' claim, so there is minor repetition, but every other sentence adds new information.

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

Completeness4/5

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

For a complex, irreversible-in-practice accounting mutation with no output schema and no annotations covering side effects, the description supplies the accounting semantics, the failure modes, and the undo story. The remaining gap is the return payload and the meaning of the four inputs, which leaves it slightly short of fully self-sufficient.

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

Parameters2/5

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

Schema description coverage is 0% for four parameters, so the description must carry the burden and largely does not: it never explains accrualId, workspaceId, idempotencyKey, or the optional reason. Worse, the one identifier it does mention, `periodEnd`, is not an input parameter at all, so it cannot help the agent fill the schema.

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

Purpose5/5

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

States a specific verb and resource ('revert a posted Abgrenzung') and then explains the exact mechanism (posts the mirror pair: Storno on periodEnd, its own reversal the day after). It is clearly distinguishable from siblings like accrual_post, accrual_discard, provision_reverse, and vat_settlement_reverse because it names the object it operates on and what the outcome is.

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

Usage Guidelines4/5

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

The refusal conditions ('already_reversed' a second time, 'not_posted' on a draft) implicitly define the valid precondition: only posted, not-yet-reversed accruals. It also gives a recovery path ('if the reversal was wrong, you create and post the accrual again'). It stops short of naming the alternative tool for drafts (accrual_discard), so it is clear context rather than full when/when-not routing.

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

advance_move_stepA
DestructiveIdempotent

Persist the move-checklist resume point, absolutely (the advance_onboarding_step shape): direction alone starts or re-asserts the move; direction plus step (1-5, done defaulting true) checks a step off or, with done:false, un-checks it (the trial-balance-mismatch recovery); abandon:true deletes the pointer (Umzug abbrechen). Never a gate: the real actions of the journey (create_backup, archive_workspace, the manual legs on the other machine) keep their own validation, and the step timestamps record a claim, not a proof. A different direction than the stored one resets the checklist. completedAt is derived: stamped when all five steps are done, cleared when one is un-done.

NameRequiredDescriptionDefault
doneNo
stepNo
abandonNo
directionYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=true; the description earns credit by explaining exactly what is destroyed (abandon deletes the pointer), that a differing direction resets the checklist, and that completedAt is derived (stamped at five done, cleared on un-done). It also discloses the important caveat that timestamps are a claim, not proof. Auth/permission behavior is not covered.

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

Conciseness3/5

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

Purpose is front-loaded in the first clause, which is good, but the single dense paragraph is padded with 'absolutely', the German 'Umzug abbrechen', and parenthetical asides like 'the trial-balance-mismatch recovery' that cost tokens without adding callable information. The signal is there but interleaved with noise.

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

Completeness4/5

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

For a 5-parameter mutation tool with no output schema and only two annotations, the description covers the modes, the reset rule, the derived completedAt, and the non-gating caveat — enough to call it correctly. The unexplained workspaceId and unenumerated direction values are the only material omissions.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the burden and largely does: step is bounded 1-5, done defaults true with an un-check use case, abandon deletes the pointer, and direction drives start/reset semantics. Two gaps remain — workspaceId is never explained, and direction's allowed string values are not enumerated.

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

Purpose4/5

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

The opening clause names a specific verb and resource: persist the move-checklist resume point. It distinguishes itself from the parallel advance_onboarding_step by reference to its 'shape' and from the real journey actions (create_backup, archive_workspace) which it explicitly says it is not. Slightly obscured by dense parentheticals ('absolutely', 'Umzug abbrechen'), but an agent can still identify the tool's job.

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

Usage Guidelines4/5

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

It spells out the invocation modes clearly: direction alone starts/re-asserts, direction+step checks or un-checks, abandon deletes. The 'Never a gate' clause is real guidance — it tells the agent this tool does not perform or validate the actual journey actions, so it must not be used as a substitute. It stops short of explicitly routing to advance_onboarding_step for onboarding, which keeps it from a 5.

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

advance_onboarding_stepA
DestructiveIdempotent

Persist the first-run wizard resume point: path (fresh|import|demo) and the current step, absolutely, so a closed tab reopens where it left off. Never a business-logic gate: every underlying setup verb keeps its own validation and idempotency, and an agent session skips this bookkeeping entirely (spec US-G03.5). completed:true stamps the wizard finished, once; a later call never un-completes it.

NameRequiredDescriptionDefault
pathYes
stepYes
completedNo
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

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

Goes well beyond the annotation hints by disclosing that this is never a validation gate, that underlying setup verbs keep their own idempotency, and that completed:true is a one-way stamp that 'never un-completes'. The destructiveHint:true annotation is left unexplained, though, so the agent never learns that an existing resume point can be overwritten.

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

Conciseness4/5

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

Dense and front-loaded — the persist-point purpose lands in the first clause and the disclaimers follow. The spec citation (US-G03.5) adds traceability rather than bloat, though the sentence structure is somewhat packed.

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

Completeness3/5

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

For a 4-parameter mutation with no output schema and a destructiveHint annotation, the definition is reasonable but leaves gaps: nothing says what is lost when the resume point is overwritten, nothing scopes workspaceId, and no return value is implied.

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

Parameters3/5

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

Schema coverage is 0%, so the description carries the full burden: it distinguishes path (fresh|import|demo) and step ('absolutely'), and pins down completed as a one-way finished flag. However, workspaceId is never mentioned and the step value's format is not specified, so compensation is only partial.

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

Purpose5/5

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

States a specific verb and resource: 'Persist the first-run wizard resume point: path (fresh|import|demo) and the current step'. It explicitly contrasts with the read-side sibling by describing itself as bookkeeping that business verbs ignore, so an agent can tell it apart from get_onboarding_progress without opening a schema.

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

Usage Guidelines4/5

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

Gives a concrete exclusion: 'an agent session skips this bookkeeping entirely', which tells the caller when NOT to use it. It does not name the sibling read tool it complements (get_onboarding_progress), leaving that inference to the caller.

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

agent_askB
Idempotent

Ask the books a question in prose (the Studio composer, D90 D-1). Needs a registered E05 local runtime (needs_local_runtime otherwise); the runtime only classifies the question onto one of the three A26 read models and the executed verb is ALWAYS a read, so no write is reachable from prose. Persists the sentence as a turn (D-5) and records the answering call in the trace.

NameRequiredDescriptionDefault
textYes
periodEndNo
periodStartNo
workspaceIdYes
idempotencyKeyYes

TDQS

B3.3/5.0
Behavior4/5

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

Beyond the idempotent and non-destructive annotations, the description discloses that the runtime only classifies onto read models, that no write is reachable, that the sentence is persisted as a turn, and that the answering call is traced. These are meaningful side-effect disclosures. It does not describe failure modes beyond missing runtime or the shape of the answer.

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

Conciseness3/5

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

The purpose is front-loaded, but the text is dense with internal identifiers (D90 D-1, E05, A26, D-5) that consume space without helping an external agent. It is appropriately short but not maximally clear.

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

Completeness3/5

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

For a prose-query tool with no output schema, the description adequately covers runtime prerequisites and side effects such as turn persistence and tracing. However, it leaves all non-text parameters unexplained and gives no indication of what the caller receives back.

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

Parameters2/5

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

Schema description coverage is 0% across five parameters, and the description only indirectly maps 'text' to the prose question. It says nothing about workspaceId, periodStart, periodEnd, or idempotencyKey, leaving most required inputs unexplained.

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

Purpose4/5

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

The description states a specific verb and resource: ask the books a question in prose. It also clarifies that the executed operation is always a read, which helps distinguish it from mutation-oriented siblings. Internal codes like D90 D-1, E05, and A26 add noise but do not obscure the core purpose.

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

Usage Guidelines3/5

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

It gives an important precondition (a registered E05 local runtime, otherwise needs_local_runtime) but does not explain when to choose this over other query or search tools. Usage is implied by the prose-query framing rather than explicitly contrasted with alternatives.

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

agent_prose_deleteA
DestructiveIdempotent

Delete one agent session’s stored prose (D90 D-5): every turn text of the session is cleared, the call trace stays. The words are the user’s to remove; what actually ran is the trust view’s substrate and remains. Owner-gated (manage_agent_dial); idempotent per key. CONSEQUENCE: Deletes the words of this agent conversation for good; the record of what the agent did stays. The text cannot be restored.

NameRequiredDescriptionDefault
sessionIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint and idempotentHint, yet the description goes well beyond them: it specifies exactly what is removed (every turn text), what survives (the call trace / trust-view substrate), that the action is permanent and unrestorable, and that it requires owner-level permission. This is precisely the extra context annotations cannot carry.

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

Conciseness3/5

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

The core facts are front-loaded, which is good, but the final CONSEQUENCE sentence substantially restates the opening paragraph (words gone, trace stays, irreversible), and the "D90 D-5" token is dead weight. Two sentences of the roughly five could be cut without loss.

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

Completeness4/5

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

For a destructive mutation with no output schema, the description covers the essentials an agent needs before acting: the exact blast radius, what is preserved, irreversibility, and the authorization gate. The remaining shortfall is parameter-level detail, which is captured in the parameter score, not here.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning and largely does not. Only "idempotent per key" hints at the role of idempotencyKey; sessionId and workspaceId are never explained, nor is the key's scope. With three required, undocumented parameters this leaves a real gap.

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

Purpose4/5

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

States a specific verb and resource ("Delete one agent session's stored prose") and immediately delimits scope: turn text is cleared, the call trace remains. That contrast makes the operation distinguishable from generic session or audit tooling in the sibling list. The cryptic internal reference "(D90 D-5)" adds no value to an agent and slightly muddies the opening.

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

Usage Guidelines3/5

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

Gives a prerequisite ("Owner-gated (manage_agent_dial)") and a strong consequence warning, which implies this is a deliberate, high-friction action rather than routine cleanup. However, it never states when an agent should choose this over alternatives such as archiving, retaining, or simply leaving the session alone, and offers no explicit when-not guidance.

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

agent_trust_summaryA
Read-only

The trust evidence per dial capability (Vertrauen): stored and effective level, who set it and when, and the proposed/approved/rejected/auto-executed counts over a stated window (default the last 90 days). Derived from the trace at read time; never stored, never a score.

NameRequiredDescriptionDefault
toNo
fromNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description goes further by stating the data is 'derived from the trace at read time; never stored, never a score.' This adds meaningful behavioral context beyond the annotation, preventing misconceptions about persistence and semantics.

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

Conciseness5/5

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

Two focused sentences convey the resource, the exact contents, the time-window behavior, and the key semantic caveat ('never a score'). No filler or repetition; the most important qualifiers are front-loaded.

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

Completeness4/5

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

Given no output schema, the description enumerates the main return contents and clearly states the computation and persistence model. It lacks exact response structure and date format details, but for a simple read-only evidence tool, it is nearly complete.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It adds the concept of a 'stated window (default the last 90 days)', giving some meaning to the from/to parameters, but it does not name them, specify date formats, or clarify the required workspaceId. The compensation is partial but not complete.

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

Purpose5/5

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

The description names the specific deliverable ('trust evidence per dial capability'), enumerates the data it returns (stored/effective levels, who set it, when, counts over window), and explicitly distinguishes it from a score. This differentiates it from sibling tools like get_agent_dial and set_agent_dial.

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

Usage Guidelines4/5

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

The description provides clear context: this is a read-only, trace-derived evidence view over a default 90-day window. It implies when to use it (when historical trust evidence is needed) without explicitly naming alternatives, but the context is sufficient for an agent to route correctly.

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

aging_reportA
Read-only

The receivables summary behind the aging bar: the same open items list_open_items itemises, totalled per bucket and per customer, largest debtor first. byBucket is the invoice-currency sum and baseByBucket the base-currency one, which is the figure that ties to baseTotalOpenMinor in a workspace holding more than one currency. Use it to answer "how much is over 90 days overdue and who owes it" in one call. Carries the same reconciliation flag against 1100 Debitoren. Reads only.

NameRequiredDescriptionDefault
asOfNo
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

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

The annotations provide readOnlyHint=true, and the description reinforces this with 'Reads only.' It adds useful behavioral context beyond that: the relationship to baseTotalOpenMinor in multi-currency workspaces conveniently ties to reconciliation flags against account 1100 Debitoren. No contradiction exists between description and annotations.

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

Conciseness4/5

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

The description is dense but efficient: each sentence contributes meaningful information (report nature, aggregation method, currency handling, use case, reconciliation flag, read-only status). It is front-loaded with the core summary, though it could be slightly trimmed without losing value.

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

Completeness3/5

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

Given there is no output schema, the description does a decent job of explaining the report's output shape: totals per bucket and customer, and the difference between byBucket and baseByBucket. However, it does not mention the asOf parameter or any pagination/limits for large result sets, leaving some operational context missing. For a read-only report, this is a moderate gap.

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

Parameters2/5

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

The schema has 0% description coverage, providing only parameter names (workspaceId and asOf) without any meaning. The description does not explain these parameters at all; it only mentions output-related fields like byBucket and baseByBucket. The agent must guess what asOf does (likely a date for the aging snapshot), and workspaceId is presumed from the required flag. This is a clear gap in compensating for the schema's lack of detail.

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

Purpose5/5

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

The description clearly states what the tool does: it provides a receivables summary totalled per aging bucket and per customer, with the largest debtor first. It explicitly differentiates itself from list_open_items by noting it is the same open items 'totalled' rather than itemised, and gives a concrete use case ('how much is over 90 days overdue and who owes it').

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

Usage Guidelines4/5

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

The description provides a clear usage context: 'Use it to answer ... in one call.' It also references list_open_items as the underlying itemised view, implying the alternative for detailed line items. However, it does not explicitly state when not to use this tool or mention other alternatives, so it lacks exclusion guidance.

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

allocate_paymentB
Idempotent

Allocate a parked Guthaben to open items. The money was already booked when the payment arrived, so this posts no entry: it records which open items that money settles. Requires intent='allocate_payment'. A wrong allocation is corrected by reversing the whole payment and recording it again. CONSEQUENCE: Applies a payment already on the books to open items and marks them paid; nothing new is booked. A wrong allocation is corrected by reversing the whole payment and recording it again.

NameRequiredDescriptionDefault
intentYes
paymentIdYes
allocationsYes
workspaceIdYes
idempotencyKeyYes

TDQS

B3.2/5.0
Behavior4/5

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

Adds real context beyond the idempotent/non-destructive annotations: it explains that no entry is posted, that open items get marked paid, and that the only correction path is reversing the entire payment and re-recording it. That correction note is exactly the kind of irreversibility caveat an agent needs. It does not cover idempotencyKey behavior or what happens on partial/over-allocation.

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

Conciseness3/5

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

The core explanation is front-loaded and useful, but the sentence 'A wrong allocation is corrected by reversing the whole payment and recording it again' appears twice, and the CONSEQUENCE line largely restates the opening. Roughly a third of the text is redundant.

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

Completeness2/5

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

The behavioral side is well covered for a mutation tool, but the tool's real complexity lives in the undocumented allocations array with eight free-form fields at 0% schema coverage, and the description says nothing about how to construct it or how much of the parked amount must be allocated. An agent could not reliably call this from the description alone.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, yet it only pins the value of 'intent'. The nested allocations object (targetId, documentId, targetKind, amountMinor, skontoMinor, dunningItemId, writeOffMinor, paymentAmountMinor) and the roles of paymentId and idempotencyKey are entirely unexplained.

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

Purpose4/5

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

States a specific verb and resource: allocate a parked Guthaben (credit) against open items, with the key clarification that no new journal entry is posted. It is distinguishable from pure posting tools, but it never names a sibling (e.g. record_payment, apply_qr_match, suggest_payment_matches) to sharpen the boundary.

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

Usage Guidelines3/5

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

It specifies the precondition 'Requires intent=allocate_payment' and the situation (money already booked on an incoming payment), which implies when to reach for it. However, there is no explicit when-not guidance and no comparison to adjacent tools such as record_payment, reverse_payment, or the match-suggestion tools.

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

apply_qr_matchA
Idempotent

Settle an invoice from a queued credit, delegating the posting to A14 record_payment (source 'qr'): debit Bank, credit Debitoren, document status and Ist-VAT stamp included, A21 posts nothing itself. Every figure is NET of linked credit notes: a payer holding a Gutschrift owes the principal, and paying it exactly settles in full. mode defaults to 'partial' (allocates up to the open amount, parks any surplus as Guthaben, never writes off); mode 'full' additionally writes off a SHORT credit's residual, and only within the A14 one-click write-off threshold (default CHF 1.00): a larger residual refuses with write_off_above_threshold naming the amount (type a deliberate larger Ausbuchung through record_payment). A foreign-currency credit refuses with currency_mismatch. P8: pass confirmed=true, or the auto-apply dial must be ON with a LIVE 'high' score for exactly this invoice. NOT automatable (D77): a stored rule may never make this judgment. Idempotent per credit AND per decision: the same invoice+mode replays, a different mode refuses honestly as already_applied. CONSEQUENCE: Settles the invoice from the received payment and books it. If the match is wrong, you undo it, which reverses the payment with a correcting entry; both stay visible.

NameRequiredDescriptionDefault
modeNo
creditIdYes
confirmedNo
invoiceIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the accounting posting path, net-of-credit-note calculation, partial/full mode behavior, surplus parking as Guthaben, write-off refusal behavior, currency mismatch behavior, P8 confirmation requirements, non-automatability, idempotency semantics, and undo consequences. This is unusually complete for a mutation tool.

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

Conciseness4/5

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

The purpose and consequence are front-loaded, and most sentences carry operational information. The description is dense and includes internal references such as A14, A21, P8, and D77, but the length is largely justified by the complexity of the operation.

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

Completeness5/5

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

For a complex settlement tool with no output schema and minimal annotations, the description covers the important behavioral edges: posting delegation, write-off thresholds, currency refusal, confirmation requirements, idempotency, and reversal consequences. An agent has enough context to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry parameter meaning. It adds substantial semantics for mode, confirmed, and idempotency behavior, but does not explicitly define workspaceId and only implies creditId and invoiceId through surrounding context.

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

Purpose5/5

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

The description states a specific verb and resource: settle an invoice from a queued credit, with posting delegated to record_payment using source 'qr'. It also distinguishes the posting behavior by saying A21 posts nothing itself, so the agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

The description gives clear usage conditions: mode defaults to 'partial', mode 'full' applies only within the A14 write-off threshold, and larger residuals must be handled through record_payment. It also states confirmed=true or the auto-apply dial requirement. It does not explicitly compare this tool with sibling override_qr_match or match_qr_payment.

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

approve_drafted_actionA
DestructiveIdempotent

Approve a drafted agent action from the inbox: replay its verb through the shared dispatch as the approver (RBAC re-checked, idempotent on the stored key, so approve-twice never double-posts) and mark it executed. allowFuture additionally records the standing per-capability grant to auto (D103): the same attributed, revocable dial write set_agent_dial performs. The agent can never self-approve; a second, independent actor must review. Owner-gated (manage_agent_dial).

NameRequiredDescriptionDefault
actionIdYes
allowFutureNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: RBAC is re-checked, idempotency is enforced on the stored key so double-approval does not double-post, the action is marked executed, and allowFuture creates a standing revocable grant equivalent to set_agent_dial. It also discloses the critical authorization constraint that self-approval is impossible and an independent reviewer is required.

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

Conciseness4/5

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

The description is front-loaded with the action and its main effects, and every sentence carries useful security or side-effect information. It is dense, with internal references like D103 and nested clauses, but not verbose enough to obscure the core operation.

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

Completeness4/5

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

For a destructive approval tool with no output schema, the description covers the approval flow, authorization, idempotency, and allowFuture side effect well. The main gap is that the two required identifiers are not explicitly explained, though their roles can be inferred from context.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It explains allowFuture in detail, but workspaceId is not described at all and actionId is only implied through phrases like 'drafted agent action' and 'stored key' rather than explicitly defined.

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

Purpose5/5

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

States a specific verb and resource: approving a drafted agent action from the inbox. It clearly distinguishes approval from listing or rejecting drafted actions through the explicit approve/execute framing.

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

Usage Guidelines4/5

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

Gives clear contextual guidance: use this to approve an inbox action, but the agent cannot self-approve and a second independent actor must review, owner-gated by manage_agent_dial. It does not explicitly name reject_drafted_action or list_drafted_actions as alternatives, but the exclusions and prerequisites are strong.

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

approve_entryA
Idempotent

Sign off one checked entry (freigeben): sets its review status to approved, as metadata, neither locking nor altering the entry. Approving an already-reversed entry is allowed and reported with alreadyReversed. A sign-off is a human act: requires the review capability (Treuhänder/owner) and no automation rule may fire it. CONSEQUENCE: Signs off this posted entry as checked, in your name; the entry itself does not change. A later flag on the entry reopens the question, and the sign-off stays on record.

NameRequiredDescriptionDefault
noteNo
entryIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare idempotentHint and destructiveHint=false; the description goes well beyond by explaining that the change is metadata-only, does not lock or alter the entry, records the sign-off in the actor's name, survives a later flag, and returns alreadyReversed for reversed entries. The permission model and the prohibition on automation firing it are exactly the kind of operational context annotations cannot convey.

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

Conciseness4/5

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

Front-loaded with the verb and effect, and every clause is informative. It loses a point for redundancy: 'CONSEQUENCE: ... the entry itself does not change' restates 'neither locking nor altering the entry,' and 'in your name' repeats the preceding 'human act' sentence.

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

Completeness4/5

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

With no output schema, the description usefully discloses the alreadyReversed outcome and confirms the entry is unchanged, so the agent understands the effect and result signal. The remaining gap is parameter-level detail for a 4-parameter tool, which is left entirely to the bare schema.

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

Parameters2/5

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

Schema description coverage is 0% across four parameters, so the description must carry the burden, and it does not: workspaceId, entryId, idempotencyKey, and note are never mentioned. The idempotencyKey is only obliquely implied by the idempotentHint annotation, and the purpose of the optional note field is undocumented anywhere.

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

Purpose5/5

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

States a specific verb and resource: sign off one checked entry, setting its review status to approved as metadata only. It immediately delimits scope with 'neither locking nor altering the entry,' which separates it from mutating siblings like post_entry or reverse_entry, and the German term (freigeben) anchors the domain concept.

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

Usage Guidelines4/5

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

Explicit preconditions are given: requires the review capability (Treuhänder/owner) and no automation rule may fire it, which tells the agent when this tool is legitimate. It also clarifies the edge case that approving an already-reversed entry is allowed. It stops short of naming an explicit alternative (e.g. flag_entry or review_status) as the channel for the opposite action.

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

archive_accountB
DestructiveIdempotent

Archive an account (soft; the account keeps its postings).

NameRequiredDescriptionDefault
accountIdYes
workspaceIdYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=true; the description adds genuinely non-obvious context by clarifying the operation is a soft archive that preserves postings, which tempers the destructive hint. It still omits whether the account remains usable in new postings and whether the change is reversible via unarchive_account.

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

Conciseness4/5

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

A single front-loaded sentence plus a parenthetical that earns its place by disambiguating soft vs hard deletion. No filler, though the parenthetical shorthand is terse enough that it verges on under-specification.

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

Completeness3/5

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

For a two-parameter state-changing tool with no output schema, the description covers the core effect and retention behavior but leaves the agent guessing about parameter meaning, permission requirements, and post-conditions (can the account still be posted to or reported on).

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden for the two required parameters, yet it says nothing about accountId or workspaceId — not even tenant scoping or whether the accountId must be active/non-system. The names are largely self-explanatory, which keeps this above a 1.

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

Purpose4/5

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

States a specific verb and resource (archive an account), so an agent can distinguish it from delete_account, update_account and unarchive_account without opening a schema. It does not name those siblings explicitly, so differentiation is inferred from the verb rather than stated.

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

Usage Guidelines3/5

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

The parenthetical 'soft; the account keeps its postings' implies the archive-vs-delete distinction and gives a reason to prefer this over delete_account, but the description never states when to use this tool, what prerequisites apply (e.g. open items, active postings), or that unarchive_account is the escape hatch.

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

archive_automation_ruleA
Idempotent

Retire a rule: it stops matching, disappears from the default list, and stops being enable-able. Never a delete, and its run history is untouched, because a firing that happened stays true after the rule that caused it is gone.

NameRequiredDescriptionDefault
ruleIdYes
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

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

Adds real state-change semantics beyond the annotations: the rule stops matching, drops out of the default list, and becomes non-enable-able, while run history survives because firings are immutable. That is exactly the 'what is and isn't destroyed' context annotations cannot convey. What it does not state is whether archiving can be undone — notable given there is no unarchive_automation_rule sibling.

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

Conciseness4/5

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

Front-loaded with the state change in the first clause, then the non-delete/non-destructive guarantees. The trailing rationale about firings staying true is slightly rhetorical but does explain why history is preserved, so it earns most of its length.

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

Completeness4/5

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

For a two-parameter mutation with no output schema, the description gives an agent enough to predict the outcome and avoid the destructive reading. The remaining gaps — parameter documentation and reversibility — are the only things missing.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden of explaining workspaceId and ruleId, and it says nothing about either. The parameter names are largely self-explanatory, which prevents a 1, but no format, scoping, or behavioral meaning is added.

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

Purpose5/5

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

States a specific verb and resource ('Retire a rule') and immediately defines the resulting state in terms an agent can act on: stops matching, leaves the default list, cannot be enabled. That phrasing implicitly separates it from the sibling enable/disable_automation_rule tools and from any delete-style tool, so no sibling confusion remains.

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

Usage Guidelines4/5

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

'Never a delete' and 'stops being enable-able' give clear when-to-use context relative to deleting and to merely disabling a rule. It lacks an explicit alternative ('use archive_automation_rule instead of delete when ...'), but the operative distinctions are recoverable from the described effects.

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

archive_bank_accountA
Destructive

Archivieren: hide a closed Bankkonto from pickers while keeping it referenceable by historical statements and entries. Never deletes the account.

NameRequiredDescriptionDefault
workspaceIdYes
bankAccountIdYes
idempotencyKeyNo

TDQS

A3.5/5.0
Behavior4/5

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

The description adds real behavior beyond the lone destructiveHint=true annotation: it discloses the visible effect (removed from pickers), the retained behavior (still referenceable by historical statements/entries), and that nothing is deleted. It does not mention that the action is reversible via unarchive_bank_account or how the destructiveHint relates to the 'never deletes' claim, leaving a mild tension for the agent to resolve.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core effect front-loaded after the verb label. Every clause carries information an agent needs.

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

Completeness3/5

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

There is no output schema and no annotation coverage beyond destructiveHint, so the description should say what the call yields or what happens on an already-archived account. Preconditions (closed account) and effect are covered, but parameter meaning and return/retry behavior are not, so it is only adequate for a 3-parameter mutation.

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

Parameters2/5

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

With schema description coverage at 0%, the description carries the full burden and names none of the three parameters (workspaceId, bankAccountId, idempotencyKey). In particular the idempotencyKey and its retry semantics are undocumented anywhere.

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

Purpose4/5

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

States a specific verb + resource (hide/archive a Bankkonto) and clarifies the exact semantic of the action: hide from pickers while remaining referenceable. An agent can distinguish this from a delete, though the description never names the directly adjacent siblings (delete_account, unarchive_bank_account, archive_account) that make the choice non-obvious.

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

Usage Guidelines3/5

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

The phrase 'a closed Bankkonto' implies the precondition that the account should be closed, which is useful guidance. However there is no explicit when-to-use/when-not, no statement about how this differs from delete_account or when to prefer unarchive_bank_account, so usage is only implied.

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

archive_contactC
DestructiveIdempotent

Archive a contact (soft).

NameRequiredDescriptionDefault
contactIdYes
workspaceIdYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true and destructiveHint=true, so the safety profile is largely covered. The description adds one genuinely useful nuance with '(soft)', clarifying the record is retained rather than purged, but it says nothing about reversibility via unarchive_contact, side effects on linked documents/transactions, or what happens on a repeat call.

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

Conciseness4/5

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

A single short sentence with the action front-loaded and no filler. It is efficient, though its brevity is closer to under-specification than to disciplined concision.

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

Completeness2/5

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

For a mutating, workspace-scoped tool with no output schema and zero parameter documentation, the description is far too thin. An agent cannot tell from it what 'soft' means operationally, whether the contact disappears from list_contacts, or how to recover it.

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

Parameters2/5

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

Both parameters (contactId, workspaceId) have 0% schema description coverage, so the description carries the full burden of explaining them — and it mentions neither. The names are largely self-evident, but no scoping or format meaning is added.

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

Purpose4/5

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

States a specific verb and resource (archive a contact) and the parenthetical '(soft)' signals the archive is a soft delete rather than a hard purge. It does not distinguish itself from siblings such as unarchive_contact or contacts_anonymise, but the action itself is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to archive versus anonymise, update, or unarchive a contact, and no stated prerequisites or exclusions. The agent must infer the workflow entirely from the tool name and the presence of a sibling unarchive_contact.

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

archive_cost_centerC
DestructiveIdempotent

Archive a cost centre (soft).

NameRequiredDescriptionDefault
workspaceIdYes
costCenterIdYes

TDQS

C2.8/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true and idempotentHint=true; '(soft)' usefully tells the agent the record is retained rather than purged, which tempers the destructive hint. However, nothing is said about whether existing entries referencing the cost centre block archiving, who may archive, or how to reverse it (presumably unarchive_cost_center).

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

Conciseness3/5

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

It is a single front-loaded phrase with no wasted words, but the terseness crosses into under-specification rather than efficient concision – the one qualifier '(soft)' is doing nearly all the work.

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

Completeness2/5

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

For a mutation tool with no output schema, two undocumented required parameters, and only hint-level annotations, the description leaves key questions open: side effects on related records, error conditions, and reversibility path. '(soft)' covers one gap but not the rest.

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

Parameters2/5

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

Schema description coverage is 0% for both required parameters (workspaceId, costCenterId), and the description says nothing about either. With no compensation from the description, an agent gets no guidance on identifier format or workspace scoping beyond the field names themselves.

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

Purpose4/5

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

States a specific verb (archive) and resource (cost centre), and the '(soft)' qualifier signals a distinction from delete_cost_center. It does not name the sibling explicitly, but the implication of a reversible archive is clear enough for an agent to differentiate it.

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

Usage Guidelines2/5

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

There is no statement of when to use this instead of delete_cost_center, unarchive_cost_center, or archive_account. The agent must infer from the '(soft)' hint alone that this is the non-destructive retirement path, and no prerequisites or conditions are given.

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

archive_document_templateA

Soft-archive a template (and clear it as default). NOT destructive: a template frozen onto an already-issued document keeps rendering that document forever; archiving only removes it from the active list and from new defaults.

NameRequiredDescriptionDefault
templateIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.7/5.0
Behavior5/5

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

Goes well past destructiveHint=false by explaining exactly what survives (templates frozen onto issued documents keep rendering) and exactly what changes (removed from active list and from new defaults). This is the precise reversal/recoverability information an agent needs before mutating a template.

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

Conciseness5/5

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

Two tight sentences, the action and its scope front-loaded, the non-destructive reassurance second. Nothing is padded and no sentence is redundant.

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

Completeness3/5

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

Behavioral semantics are excellent for a mutation with only destructiveHint available, and no output schema means return values needn't be explained. However, the complete absence of parameter guidance (including the idempotency key, which matters for a retryable archive) leaves a real completeness gap.

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

Parameters2/5

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

Schema description coverage is 0% across three parameters, yet the description never mentions templateId, workspaceId, or especially idempotencyKey. With the schema carrying no meaning of its own, the description fails to compensate for the gap.

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

Purpose4/5

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

States a specific verb ('soft-archive') and resource ('a template'), plus its secondary effect ('clear it as default'), which cleanly separates it from create_document_template, update_document_template and set_default_document_template. It doesn't explicitly name a sibling, so differentiation is implied rather than stated.

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

Usage Guidelines3/5

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

The 'NOT destructive' framing hints at when this is the right choice over a hard delete, but there is no explicit when-to-use, when-not-to-use, or prerequisite (e.g. permissions, whether the template must be inactive first). The agent must infer context from the semantics paragraph.

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

archive_fieldA

Archive a custom field so it stops being offered as an input. Never a delete: every value already stored survives and stays readable through list_field_values. Returns how many saved views still name the field, so the caller can warn rather than be surprised later.

NameRequiredDescriptionDefault
fieldDefIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

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

Beyond destructiveHint=false it explicitly clarifies the semantics ('Never a delete: every value already stored survives and stays readable through list_field_values'), which is exactly the reassurance an agent needs before mutating a schema object. It also discloses the return payload (count of saved views still naming the field) despite there being no output schema, and frames the caller's follow-up action (warn the user).

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

Conciseness5/5

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

Three tight sentences, each carrying distinct information: purpose, non-destructive guarantee, and return value. The most important constraint (it is not a delete) is front-loaded.

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

Completeness4/5

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

For a simple 3-parameter mutation with no output schema, the description covers effect, safety, side effects, and the return shape. The only real gap is the undocumented parameters, especially idempotencyKey.

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

Parameters2/5

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

Schema description coverage is 0% for all three parameters, and the description says nothing about workspaceId, fieldDefId, or the idempotencyKey — notably the idempotencyKey, whose retry semantics are non-obvious. The names are largely self-explanatory, but the description does not compensate for the coverage gap.

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

Purpose5/5

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

States a specific verb and resource ('Archive a custom field') plus the operational effect ('stops being offered as an input'), which cleanly separates it from define_field, confirm_field, set_field_value and list_field_defs in the sibling list.

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

Usage Guidelines4/5

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

The condition for use is clear — retiring a field from the input surface while keeping its data — and it points to list_field_values as the way to still read stored values. It stops short of explicitly naming when not to archive or which sibling to use instead of archiving, but the context is unambiguous.

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

archive_itemC
DestructiveIdempotent

Archive an item (soft).

NameRequiredDescriptionDefault
itemIdYes
workspaceIdYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true and destructiveHint=true, so the safety profile is covered. The description adds the useful 'soft' nuance (state change rather than physical removal), but omits whether the item disappears from list_items, whether it blocks downstream transactions, or what is required to restore it.

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

Conciseness4/5

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

A single three-word sentence with zero filler and the key qualifier ('soft') front-loaded. It is efficient but borders on under-specification rather than tight writing.

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

Completeness2/5

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

For a two-required-parameter mutation with no output schema and zero schema descriptions, the definition leaves the agent guessing on identifier semantics, side effects, and reversibility. Annotations cover safety only; the rest of the burden is unfilled.

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

Parameters2/5

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

Schema description coverage is 0% and both parameters (workspaceId, itemId) are bare strings with no format, scope, or constraint notes. The description adds nothing about which item/workspace identifiers are expected, so the documentation gap is left entirely unfilled.

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

Purpose4/5

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

Names a specific verb and resource ('archive an item') and the '(soft)' qualifier signals it is not a hard delete, which is meaningful next to siblings like delete_item and unarchive_item. It stops short of naming any sibling to differentiate further.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance: nothing says how this differs from delete_item, unarchive_item, or serial_archive/asset_archive, and no prerequisites (permissions, item state) are mentioned. The agent must infer the routing entirely from the tool name.

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

archive_roleA
Idempotent

Soft-flag a custom role so it stops being offered. Never a delete, so historical attributions still resolve, and refused while any member still holds it (role_in_use). CONSEQUENCE: Stops offering this custom role; it is refused while anyone still holds it, and past actions keep their role. You can define a role with the same rights again.

NameRequiredDescriptionDefault
roleIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the annotations: explains it is never a delete, that historical attributions still resolve, the exact failure mode with error code (role_in_use) while the role is held, and the reversibility path (you can define a role with the same rights again). That is exactly the extra context annotations cannot carry.

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

Conciseness3/5

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

Front-loaded and readable, but the CONSEQUENCE sentence largely restates the first sentence ('refused while any member still holds it' appears twice), so part of the text does not earn its place against a hard length constraint.

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

Completeness3/5

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

Behavior is fully covered for a mutation with no output schema, and the refusal/error behavior is spelled out. However, with 0% schema coverage on all three required parameters, the definition leaves an agent unable to determine argument intent or idempotency-key expectations from any source.

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

Parameters2/5

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

Schema description coverage is 0% and three parameters are required, yet the description never mentions roleId, workspaceId, or idempotencyKey. The agent is told the role_in_use error but not what identifies the role, nor that idempotencyKey must be supplied even though idempotentHint is true.

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

Purpose5/5

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

States a specific verb+resource with precise semantics: 'Soft-flag a custom role so it stops being offered.' The word 'custom' plus the role vocabulary separates it cleanly from define_role, set_role, list_roles and revoke_member in the sibling list.

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

Usage Guidelines4/5

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

Implies the triggering condition (a custom role should no longer be offered) and adds a hard prerequisite: the call is refused while any member still holds the role, which tells the agent to reassign members first. It stops short of naming the sibling operations that satisfy that precondition.

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

archive_workspaceA
DestructiveIdempotent

Archivieren: retire a finished mandate (archived:true) or put it back in play (archived:false). A reversible flag, never a delete: the books stay intact and exportable (OR 958f), reads keep answering, and every OTHER write into an archived workspace returns workspace_archived.

NameRequiredDescriptionDefault
archivedYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: bookkeeping data stays intact and exportable (cited to OR 958f), reads continue to work, and any other write into an archived workspace fails with the specific code workspace_archived. This explains the consequence that makes destructiveHint=true meaningful while clarifying that no data is destroyed. It adds no note on required permissions, but the core behavioral contract is fully disclosed.

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

Conciseness4/5

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

Two dense sentences, front-loaded with the state semantics before the safety caveats; every clause carries information. The leading German label "Archivieren:" is mild redundancy against an English description but does not obscure the content.

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

Completeness4/5

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

For a state-mutating toggle with no output schema and 0% schema coverage, the description covers the essential contract: reversibility, data preservation, read availability, and the failure mode for other writes. The remaining gap is the role of idempotencyKey and any permission/auth requirement for archiving a workspace.

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

Parameters3/5

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

Schema description coverage is 0%, and the description fully explains only `archived` (true/false semantics), which is the crux parameter. `workspaceId` and `idempotencyKey` get no mention at all, so two of three required parameters remain undocumented in both schema and description; the idempotentHint annotation only partially compensates for the latter.

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

Purpose5/5

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

States a specific verb+resource pair (archive a workspace/mandate) and disambiguates the direction of the operation: archived:true retires, archived:false restores. It also explicitly separates itself from a delete, which is the main confusable sibling operation in this tool family (archive_account, asset_archive, files_delete).

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

Usage Guidelines4/5

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

Gives clear conditions for both directions of the flag ("retire a finished mandate" vs "put it back in play"), which resolves the main usage ambiguity for a toggle tool. It does not name an alternative tool or state when not to use it (e.g. when to export or delete instead), so it stops short of explicit routing.

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

asset_acquireA
Idempotent

Record the PRIMARY acquisition of a draft fixed asset (H02): the first financial event, which capitalises the asset. In ONE atomic transaction it writes a sub-ledger asset_transaction (type=acquisition) AND posts the balanced GL journal via A02 (Dr the asset GL account inherited from the category, Cr the chosen creditAccountId, for acquisitionCostRappen), then moves the asset draft -> active and confirms its cost base. creditAccountId must be a real asset/liability/equity account (credit_account_wrong_type otherwise; invalid_credit_account when missing or foreign). An optional residualValueRappen (0..cost) overrides the residual; optional costCenterId stamps both legs; optional source (manual|vendor_bill|project|opening) + sourceDocumentId link the event (source_document_not_found if the id does not resolve). Refused with invalid_cost (cost <= 0), asset_not_acquirable (disposed/archived), already_acquired (a primary acquisition already exists), invalid_residual, or period_locked (date in a hard-locked A03 period). After success the H01 financial-field lock is active. Idempotent on idempotencyKey: a replay returns the original {asset, transaction, journalEntry} and posts no second entry. CONSEQUENCE: Books the asset's purchase and adds it to the register, which locks its cost figures. If it is wrong, you reverse the purchase; the asset is closed and you record it anew.

NameRequiredDescriptionDefault
dateYes
sourceNo
assetIdYes
descriptionNo
workspaceIdYes
costCenterIdNo
idempotencyKeyYes
creditAccountIdYes
sourceDocumentIdNo
residualValueRappenNo
acquisitionCostRappenYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare idempotentHint and destructiveHint; the description goes far beyond by disclosing the atomic sub-ledger + GL posting, the cost-base lock, the full error-code surface, and exact idempotent replay semantics (returns the original {asset, transaction, journalEntry}, no second entry). The CONSEQUENCE paragraph even explains the reversal path, which is precisely the context an agent needs before committing a locking mutation.

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

Conciseness4/5

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

Purpose is front-loaded, then mechanics, then error surface, then a clearly labelled CONSEQUENCE block, so the structure is navigable. It is a dense single paragraph with heavy parenthetical error codes and internal references (H02, A02, A03, H01) that an outside agent cannot resolve, which slightly hurts scanability.

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

Completeness4/5

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

For an 11-parameter, no-output-schema mutation, the description covers side effects, refusals, idempotency and even the return shape, which is unusually complete. The gaps are minor: no mention of required permissions/account roles and no explanation of the 'description' parameter.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does for most inputs: creditAccountId type constraints and error codes, residualValueRappen's 0..cost range, costCenterId's effect on both legs, source enum values with sourceDocumentId linkage, and acquisitionCostRappen's >0 rule via invalid_cost. Only workspaceId and the generic 'description' parameter go unexplained.

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

Purpose5/5

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

States a specific verb and resource ('Record the PRIMARY acquisition of a draft fixed asset'), and the word 'PRIMARY' plus 'the first financial event' cleanly separates it from subsequent-capitalisation siblings such as asset_add_capitalisation and asset_opening_balance. An agent can distinguish it from other asset tools without opening a schema.

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

Usage Guidelines4/5

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

The 'PRIMARY / first financial event' framing implies when this tool applies versus top-up or opening-balance tools, and the refusal conditions (already_acquired, asset_not_acquirable) make the boundary explicit. It never names an alternative tool outright, so the routing is strong but inferred rather than stated.

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

asset_acquisition_summaryA
Read-only

What was capitalised in a period (H09, US-H09.5): every acquisition and additional-capitalisation event (H02) posted between fromDate and toDate (ISO, inclusive) with its asset number/name, acquisitionDate, costRappen (the capitalised delta), category code/name, the GL asset account (id/number/name), the source (source_document_type or "manual"), sourceDocumentId and journalEntryId. Footer totals: count and sum cost. Optional filter by categoryIds and locationIds. Empty range is an empty success. Pure read, §H-TENANT.

NameRequiredDescriptionDefault
filterNo
toDateYes
fromDateYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true and the description aligns with it by stating 'Pure read, §H-TENANT'. Beyond the annotation it adds valuable behavioral context: ISO dates are inclusive, an empty range is an empty success, footer totals are returned, and the source field covers source_document_type or 'manual'.

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

Conciseness4/5

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

A dense single sentence enumerating output fields, followed by two short sentences for totals, empty-range behavior, and read-only status. Front-loaded with the purpose; every element earns its place, though the field enumeration makes it long.

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

Completeness4/5

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

Since there is no output schema, the description carries the full burden of describing the return shape, and it does so thoroughly: all fields, footer totals, filters, and the empty-range success behavior. Missing only minor details such as result ordering and pagination limits.

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

Parameters3/5

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

With 0% schema coverage, the description must compensate. It adds meaning for fromDate/toDate (ISO, inclusive) and filter.categoryIds/locationIds (optional), but the required workspaceId parameter is never mentioned, leaving a gap for a required input.

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

Purpose5/5

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

The description names a concrete resource and scope: 'What was capitalised in a period (H09, US-H09.5)' covering acquisition and additional-capitalisation events (H02). It lists output fields explicitly and is clearly distinguishable from siblings like asset_acquire (a mutation), asset_transaction_list (all transactions), and asset_depreciation_* (depreciation).

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

Usage Guidelines4/5

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

Provides clear usage context: it is the H09/H09.5 capitalisation report, a pure read, with date-range and optional category/location filters. It does not explicitly name alternatives or state when-not-to-use, but the scope definition is precise enough to route an agent correctly.

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

asset_add_capitalisationA
Idempotent

Capitalise ADDITIONAL cost onto an already-acquired asset (H02): an improvement or major overhaul. In ONE atomic transaction it writes a sub-ledger asset_transaction (type=additional_capitalisation) AND posts the same balanced Dr asset / Cr creditAccountId pattern via A02 for amountRappen, then raises the asset acquisition_cost_rappen and net_book_value_rappen by that amount (accumulated depreciation is left unchanged; residual and useful life are untouched). Requires a live asset carrying a primary acquisition (not_acquired otherwise; asset_not_acquirable when disposed/archived). Same credit-account, source-document and period rules as asset_acquire. Idempotent on idempotencyKey. CONSEQUENCE: Books additional cost onto the asset and raises its book value. If it is wrong, you reverse it with a correcting entry and the book value falls back.

NameRequiredDescriptionDefault
dateYes
sourceNo
assetIdYes
descriptionNo
workspaceIdYes
amountRappenYes
costCenterIdNo
idempotencyKeyYes
creditAccountIdYes
sourceDocumentIdNo

TDQS

A4.4/5.0
Behavior5/5

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

The description richly discloses behavior beyond the annotations: atomic sub-ledger plus journal posting, Dr asset / Cr creditAccountId pattern, increases to acquisition_cost and net_book_value, unchanged accumulated depreciation/residual/useful life, prerequisites, error conditions, idempotency, and reversal consequences. This is well beyond what idempotentHint and destructiveHint provide.

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

Conciseness4/5

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

The definition is front-loaded with the core purpose and then layers in mechanics, prerequisites, and consequences. It is dense but mostly earns its length; the long second sentence is packed but still relevant to correct invocation.

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

Completeness5/5

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

For a complex accounting mutation with no output schema, the description supplies enough behavioral, accounting, precondition, and reversal context to call it correctly. The missing output details are not material because no output schema exists.

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

Parameters3/5

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

With 0% schema description coverage, the description must carry parameter meaning. It explains amountRappen, creditAccountId, idempotencyKey, and partially assetId/date/sourceDocumentId through accounting and period-rule context, but leaves workspaceId, source, description, and costCenterId undocumented.

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

Purpose5/5

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

The description uses a precise verb and resource: capitalising additional cost onto an already-acquired asset, specifically for an improvement or major overhaul. It clearly distinguishes this from initial acquisition by emphasizing ADDITIONAL cost and naming the sub-ledger transaction type.

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

Usage Guidelines4/5

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

It gives clear usage context: only for a live asset that already carries a primary acquisition, with explicit error states when not acquired or disposed/archived. It references asset_acquire for shared credit-account, source-document, and period rules, though it does not explicitly say when to choose asset_acquire instead.

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

asset_archiveB
Idempotent

Soft-archive an asset (status=archived): it leaves the active register but stays readable. Refused with asset_in_use while the asset is active or fully_depreciated (an asset the ledger still depends on cannot be hidden; dispose it via H06 instead). Only a draft or already-terminal asset may be archived.

NameRequiredDescriptionDefault
assetIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

B3.3/5.0
Behavior4/5

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

Annotations only declare idempotentHint and destructiveHint=false; the description adds real behavioral context beyond them: the resulting status, that the record remains readable, the specific error code asset_in_use, and the ledger-dependency rationale. It does not contradict the non-destructive annotation. Missing is what a caller gets back or whether unarchive exists.

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

Conciseness3/5

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

The core effect is front-loaded and the size is reasonable, but the parenthetical '(an asset the ledger still depends on cannot be hidden; dispose it via H06 instead)' is dense and the closing sentence partially restates the refusal rule in a way that muddies rather than sharpens it.

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

Completeness3/5

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

There is no output schema, so the description should carry return-value expectations, and it says nothing about what a successful archive returns. Combined with zero parameter coverage and the eligibility ambiguity, the definition is adequate on semantics but incomplete for a mutating lifecycle operation.

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

Parameters2/5

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

Schema description coverage is 0% across three required parameters (workspaceId, assetId, idempotencyKey), so the description must compensate, but it mentions none of them. Notably the idempotencyKey — the most non-obvious parameter for a mutating call — gets no explanation of expected format or reuse semantics.

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

Purpose4/5

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

States a specific verb and resource plus the resulting state ('Soft-archive an asset (status=archived)') and contrasts it with disposal, so an agent can distinguish it from asset_dispose or asset_transfer. The contrast is weakened by referring to the alternative only as the opaque code 'H06' rather than naming the sibling tool.

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

Usage Guidelines3/5

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

It does give a when-not condition ('Refused with asset_in_use while the asset is active or fully_depreciated') and points at disposal instead. However, the final sentence ('Only a draft or already-terminal asset may be archived') sits in tension with the refusal list — fully_depreciated reads as both a terminal state and a refusal — leaving the agent to guess the exact eligibility set.

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

asset_category_archiveA
Idempotent

Soft-archive a category (active=false): it leaves the default picker but stays resolvable for historical assets. Refused with category_in_use while any asset (even disposed) still references it. Deletion is never offered (a category must stay resolvable for its assets whole depreciable life).

NameRequiredDescriptionDefault
categoryIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare idempotent and non-destructive; the description adds the substantive behavior: this is a soft archive that keeps historical resolvability, it can fail with a named error (category_in_use), and no hard delete exists. That is exactly the extra context annotations cannot convey.

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

Conciseness5/5

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

Three sentences, front-loaded with the operation and its effect, then the failure condition, then the no-delete rationale. No filler and no repetition of the name.

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

Completeness4/5

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

For a mutation tool with no output schema, the description covers effect, failure mode, and the deliberate absence of a delete path. The remaining gap is parameter-level guidance (idempotencyKey behavior, workspace scoping), which matters but is secondary to the behavioral picture it paints.

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

Parameters2/5

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

All three parameters (workspaceId, categoryId, idempotencyKey) have 0% schema description coverage, so the description must carry the burden. It only implicitly references the category being archived and says nothing about workspaceId scoping or what idempotencyKey does on retry.

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

Purpose5/5

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

States a specific verb and resource ("Soft-archive a category") and immediately defines the mechanics: active=false, leaves the default picker, stays resolvable. It is clearly distinguishable from siblings like asset_category_update, asset_category_get, or item_categories_delete.

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

Usage Guidelines4/5

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

Gives a concrete refusal condition (category_in_use when any asset, even disposed, references it) and rules out deletion entirely, which steers the agent away from a wrong path. It stops short of naming sibling tools such as asset_category_update as the alternative for renaming or reactivating.

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

asset_category_createA
Idempotent

Create a fixed-asset category carrying the defaults every asset created under it inherits (H01): a depreciation method (straight_line | declining_balance | units_of_production | none), a useful life in months, a residual value (basis points or absolute Rappen), the three GL accounts (cost=asset, accumulated depreciation=asset/liability contra, depreciation expense=expense), and an optional default cost centre. code is 1-20 chars, unique per workspace case-insensitively (duplicate_code). Wrong account types are refused with invalid_account_type before any write.

NameRequiredDescriptionDefault
codeYes
nameYes
descriptionNo
workspaceIdYes
idempotencyKeyYes
glAssetAccountIdYes
residualValuePctNo
usefulLifeMonthsNo
depreciationMethodNo
defaultCostCenterIdNo
residualValueRappenNo
glAccumDeprAccountIdYes
glDeprExpenseAccountIdYes

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing inheritance behavior, required GL account type constraints, uniqueness semantics for code, specific error codes (duplicate_code, invalid_account_type), and the fact that invalid account types are refused before any write. This gives an agent substantial operational detail for a mutation tool.

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

Conciseness4/5

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

The description is front-loaded with purpose and inheritance semantics, then validation details. It is dense and packed into a long first sentence, but every clause carries useful operational information and there is little outright waste.

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

Completeness4/5

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

For a create tool with no output schema and sparse annotations, the description supplies the crucial business behavior, field meanings, and validation failure modes. It is still missing some completeness details such as the response shape, idempotency behavior, and workspace scoping, but the core is strong.

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

Parameters4/5

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

With schema description coverage at 0%, the description does significant work: it explains code length/uniqueness, depreciation method options, useful life in months, residual value as basis points or Rappen, the three GL account roles and type constraints, and the optional default cost centre. It still omits workspaceId, idempotencyKey, name, and description, and does not explicitly map every business term to its parameter name, so it does not fully compensate for the schema gap.

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

Purpose5/5

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

States a specific verb and resource ('Create a fixed-asset category') and immediately explains the defining behavior: the category carries defaults inherited by every asset created under it. This distinguishes it clearly from siblings such as asset_category_update, asset_category_get, asset_category_list, and asset_category_resolve_defaults.

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

Usage Guidelines4/5

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

The description makes clear this is the creation path for fixed-asset categories and names validation failure cases, giving strong context for when to call it. It does not explicitly route the agent to update/archive/get alternatives or state prerequisites like existing GL accounts, so it falls short of a full when/when-not/alternative statement.

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

asset_category_getA
Read-only

Read one fixed-asset category by id, archived or not.

NameRequiredDescriptionDefault
categoryIdYes
workspaceIdYes

TDQS

A3.6/5.0
Behavior3/5

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

The annotation readOnlyHint=true already covers safety. The description adds one useful behavioral detail—'archived or not'—indicating the tool returns categories regardless of archive status. However, it omits error behavior, permission requirements, or response shape, so the added transparency is limited.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the verb and resource. It contains no filler, repetition, or superfluous details, making it efficient and immediately scannable.

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

Completeness3/5

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

For a simple read tool with two required parameters and a read-only annotation, the description is adequate but not complete. It does not mention what the response contains, what happens if the category is not found, or how to locate the ID, which an agent might need given the large sibling tool set.

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

Parameters2/5

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

With 0% schema description coverage, the description must compensate, but it only says 'by id,' which loosely maps to categoryId. It does not explain workspaceId, the relationship between the two parameters, or any format/constraints. This adds minimal meaning beyond the schema field names.

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

Purpose5/5

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

The description states a specific verb ('Read'), a specific resource ('fixed-asset category'), and a scoping constraint ('by id, archived or not'). This clearly distinguishes it from sibling tools like asset_category_list (listing) and asset_category_archive (mutation), making 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.

Usage Guidelines3/5

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

The description implies the use case—fetching a single category when you have its ID—but does not explicitly mention alternatives or exclusions. An agent must infer that asset_category_list is for multiple categories and that create/update/archive are for mutations, as no routing is provided.

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

asset_category_listA
Read-only

List the workspace fixed-asset categories, ordered by code. Optional active filter (true = only live, false = only archived) and a case-insensitive search over code and name. Accepts a savedViewId (G00 saved-view seam).

NameRequiredDescriptionDefault
activeNo
searchNo
savedViewIdNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, covering the safety profile. The description adds behavioral details: ordering by code, case-insensitive search over code and name, and acceptance of savedViewId (G00 saved-view seam). However, it does not disclose default behavior (e.g., whether archived items are included by default) or any pagination/limits, which are typical for list operations. With readOnlyHint covering mutation concerns, a 3 is appropriate—adds some value but not comprehensive.

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

Conciseness5/5

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

Two sentences with no waste. The main action is front-loaded, and each clause adds a distinct piece of information (ordering, filters, search scope, savedViewId). The description is compact and well-structured.

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

Completeness4/5

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

For a read-only list tool with no output schema, the description covers the essential behavior: what is listed, ordering, filters, and the savedView seam. It lacks explicit mention of default filter behavior and pagination, but these are common patterns and the readOnlyHint already signals safety. Overall, the description is adequate for an agent to call this tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden. It explicitly explains all three optional parameters: 'active' (true = only live, false = only archived), 'search' (case-insensitive over code and name), and 'savedViewId' (G00 saved-view seam). The required workspaceId is self-evident from the context. This fully compensates for the missing schema descriptions.

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

Purpose5/5

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

The description clearly states the tool lists workspace fixed-asset categories, ordered by code. It distinguishes itself from sibling tools like asset_category_create, asset_category_get, and asset_category_archive by specifying a list operation with ordering. The verb 'List' and resource 'fixed-asset categories' are 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.

Usage Guidelines4/5

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

The description implies when to use this tool: whenever a list of fixed-asset categories is needed, optionally filtered by active status or search. It does not explicitly name alternatives or when-not conditions, but the optional filters and mention of the savedViewId seam suggest clear use cases. The absence of explicit exclusions is a minor gap, but the context is sufficient for an agent to decide.

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

asset_category_resolve_defaultsA
Read-only

Resolve the FULL default set for a category so an agent can create an asset (H01) with no further questions: the depreciation trio, the three GL accounts as id+number+name, and the optional cost centre. An archived category is refused with category_archived (choose another or un-archive first).

NameRequiredDescriptionDefault
categoryIdYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

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

With readOnlyHint=true, the bar is lower. The description discloses what data is returned (depreciation trio, GL accounts, cost centre) and the refusal behavior for archived categories (category_archived). This adds useful context beyond the annotation and is consistent with it.

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

Conciseness5/5

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

Two sentences with no wasted words. The primary purpose is front-loaded, and the error case is appended succinctly. Every sentence adds value.

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

Completeness5/5

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

Since there is no output schema, the description properly explains the return content (the specific data fields) and the error condition. It asserts completeness ('FULL default set') and the goal of enabling asset creation without further questions, so nothing critical is missing for an agent to use this tool correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It mentions 'for a category' which implies categoryId, but does not explicitly define workspaceId or provide parameter-level detail. The two parameters are obvious from the tool name and context, but the description does not add much beyond what the schema names convey.

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

Purpose5/5

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

The description states a specific action: 'Resolve the FULL default set for a category' and enumerates exactly what is resolved (depreciation trio, GL accounts, cost centre). It also clarifies the purpose ('so an agent can create an asset (H01) with no further questions'), which clearly distinguishes it from asset_category_create/update/archive siblings.

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

Usage Guidelines4/5

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

The description implies when to use: when creating an asset, call this to obtain defaults. It also provides guidance on the archived-category error ('choose another or un-archive first'), which is a useful fallback. However, it does not explicitly mention alternatives or exclusions, though the use case is clear from the context.

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

asset_category_updateA
DestructiveIdempotent

Edit a fixed-asset category through a patch object. The same validation as create applies (account types, useful life, residual bounds); code is immutable through this verb. Only the fields present in patch change.

NameRequiredDescriptionDefault
patchNo
categoryIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior4/5

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

With annotations already declaring idempotentHint and destructiveHint, the description adds real value beyond them: the same validation as create applies (account types, useful life, residual bounds), code is immutable here, and absent fields are left untouched. These are non-obvious constraints an agent could not read off the annotations. It stops short of disclosing what happens on validation failure or what the response contains.

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

Conciseness5/5

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

Three dense sentences, front-loaded with the operation and mechanism, then constraints. Nothing is repeated from the name or schema; every sentence carries information an agent needs.

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

Completeness4/5

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

For a nested-payload mutation with no output schema, the description covers the key risks: validation parity with create, immutability of the code field, and partial-update semantics. Missing only edge behavior — an empty patch, whether categoryId accepts code or id, and failure modes — which keeps it from a 5.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the semantic load. It does explain the most consequential part of the payload — patch semantics where only present fields change — and flags that code is not patchable, which is not visible in the schema. But the ten nested properties receive no field-level meaning, and workspaceId, categoryId and idempotencyKey are entirely unaddressed.

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

Purpose4/5

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

Names a specific verb and resource ('Edit a fixed-asset category') and immediately constrains the mechanism to a patch object. That distinguishes it from asset_category_create (which the description references) at a conceptual level, but siblings like asset_category_archive or asset_category_get are never named, so the differentiation is inferred rather than stated.

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

Usage Guidelines3/5

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

Usage is implied: partial edits go through this verb, and 'code is immutable through this verb' hints that a different route exists for changing a category's code. However, no alternative tool is named and there is no explicit when-not-to-use guidance (e.g. archiving vs editing vs creating a new category).

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

asset_createA
Idempotent

Create a capitalised fixed asset FROM a category (H00), inheriting its depreciation method, useful life, residual rule and three GL accounts; only name, acquisitionDate and acquisitionCostRappen (Rappen, >0) are required. Any of depreciationMethod/usefulLifeMonths/residualValuePct/residualValueRappen/the three GL account ids may OVERRIDE the inherited default at creation. number is optional (a unique FA-#### is generated if omitted; a manual one is unique per workspace case-insensitively, else duplicate_number). An archived category is refused with category_archived. The asset is created in status=draft; its financial baseline is immutable once a posted acquisition (H02) moves it out of draft.

NameRequiredDescriptionDefault
nameYes
modelNo
notesNo
numberNo
barcodeNo
categoryIdYes
locationIdNo
descriptionNo
workspaceIdYes
manufacturerNo
serialNumberNo
warrantyUntilNo
idempotencyKeyYes
acquisitionDateYes
decliningRateBpNo
glAssetAccountIdNo
residualValuePctNo
usefulLifeMonthsNo
responsibleUserIdNo
depreciationMethodNo
residualValueRappenNo
totalEstimatedUnitsNo
glAccumDeprAccountIdNo
acquisitionCostRappenYes
glDeprExpenseAccountIdNo

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations, it discloses inherited defaults, allowed overrides, unique number generation and duplicate_number failure, category_archived refusal, draft creation status, and immutability after a posted H02 acquisition. This is substantial behavioral context 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.

Conciseness4/5

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

The description is dense but front-loaded around the core create-from-category behavior, and most sentences carry useful business rules. It is somewhat packed into one paragraph with many semicolon-separated details, but not wasteful.

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

Completeness3/5

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

For a 25-parameter creation tool with no output schema and no schema descriptions, the description covers the core financial and inheritance behavior well. It is still incomplete around required workspace/category/idempotency parameters and retry semantics, and the claim that only three fields are required is misleading against the schema.

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

Parameters3/5

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

With 0% schema description coverage across 25 parameters, the description adds useful meaning for acquisitionCostRappen, acquisitionDate, name, number generation, and override fields. But it says only name, acquisitionDate, and acquisitionCostRappen are required while the schema also marks workspaceId, categoryId, and idempotencyKey as required, and it leaves idempotencyKey semantics and many optional fields unexplained.

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

Purpose5/5

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

The description states a specific verb and resource: create a capitalised fixed asset from a category. It also distinguishes the inheritance model from generic asset creation by naming depreciation method, useful life, residual rule, and GL accounts.

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

Usage Guidelines4/5

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

It clearly frames this as creation from a category with inherited defaults and notes the archived-category refusal condition. However, it does not explicitly route agents away from sibling tools such as asset_acquire, asset_opening_balance, or asset_add_capitalisation.

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

asset_depreciation_forecastA
Read-only

A multi-period depreciation forecast (H09, US-H09.2) re-using the SAME pure H03 calculators the preview/schedule verbs use, so a forecast line never disagrees with a live asset_depreciation_schedule. fromPeriod/toPeriod are YYYY-MM inclusive; the window is at most 60 months and a reversed or over-long window is invalid_period_range. groupBy is none (default) | category | location (cost_center is not an asset-master dimension in Phase 1: invalid_input). filter narrows by categoryIds/locationIds/assetIds (a foreign assetId is not_found before any projection). Returns an ordered periods list, each with totalAmountRappen and an optional byGroup breakdown, a totalProjectedRappen, assetsReachingResidual, and (with includeDetail:true) per-asset ScheduleLine detail. A units_of_production asset with no unitsForecast contributes zero and raises a production_data_required warning rather than inventing usage. Writes nothing; deterministic for a given snapshot.

NameRequiredDescriptionDefault
filterNo
groupByNo
toPeriodYes
fromPeriodYes
workspaceIdYes
includeDetailNo
unitsForecastNo

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint=true annotation, the description adds 'Writes nothing; deterministic for a given snapshot' and details error/warning behaviors (invalid_period_range, invalid_input, not_found, production_data_required). This goes well beyond the annotation's read-only hint and informs an agent of failure and warning conditions.

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

Conciseness5/5

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

The single dense paragraph carries no filler; every clause maps to a schema field, output field, or behavioral constraint. It front-loads the core purpose and consistency guarantee before diving into parameter semantics.

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

Completeness5/5

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

With no output schema, the description supplies a detailed return contract: ordered periods, totalAmountRappen, optional byGroup, totalProjectedRappen, assetsReachingResidual, and includeDetail per-asset detail. All 7 parameters and error modes are addressed, making the description sufficient for accurate invocation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate, and it does comprehensively: date format (YYYY-MM), month-window cap, reversed/over-long error code, allowed groupBy values, filter dimensions, includeDetail semantics, and unitsForecast relevance. This gives the agent far more than the schema names alone.

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

Purpose5/5

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

States a specific verb and resource: 'multi-period depreciation forecast' with identifiers H09, US-H09.2. It also differentiates itself from sibling asset_depreciation_preview and asset_depreciation_schedule by describing the multi-period window and the guarantee of consistency with the live schedule.

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

Usage Guidelines4/5

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

Provides clear context by explicitly referencing the 'preview/schedule verbs' and positioning this as the multi-period forecast that reuses the same pure calculators. It does not explicitly enumerate when-not-to-use or name the alternative to use instead, so it falls just short of full routing guidance.

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

asset_depreciation_methodsA
Read-only

List the registered depreciation methods (straight_line | declining_balance | units_of_production | none) with this workspace enablement flags. Each descriptor carries labelKey, descriptionKey, requiresUnits, requiresRate and enabled. A disabled method is hidden from the H00 category / H01 asset method pickers. Read-only.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses meaningful behavior: output descriptor fields (labelKey, descriptionKey, requiresUnits, requiresRate, enabled, labelKey) and the effect of disabled methods on H00/H01 pickers. This meaningfully exceeds what the annotation already provides.

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

Conciseness5/5

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

Four sentences, each contributing useful information: the resource, the method values, the descriptor fields, and the behavioral consequence of disabled flags. It is dense but not bloated, and the action is front-loaded.

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

Completeness5/5

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

With no output schema, the description compensates by naming all returned descriptor fields and the allowed method enum values. It also clarifies the read-only nature and the visibility behavior, which is enough for an agent to understand what it will receive and how to interpret it.

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

Parameters3/5

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

The single required parameter workspaceId is not explicitly documented; the description only indirectly refers to 'this workspace.' With 0% schema description coverage, some compensation is expected, but workspaceId is a simple required string and the schema property name is mostly self-explanatory. The description does not add much parameter-level detail, so 3 is appropriate.

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

Purpose5/5

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

The description states a specific action ('List') and a clear resource: registered depreciation methods, and even enumerates the possible values: straight_line, declining_balance, units_of_production, none. It also identifies the returned descriptor fields, making it easy to distinguish this read-only listing tool from the sibling asset_depreciation_method_set_enabled.

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

Usage Guidelines4/5

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

The description gives useful context: each descriptor carries enabled flags and disabled methods are hidden from pickers, so an agent can infer this is the appropriate tool for inspecting available depreciation methods. It does not explicitly name alternatives like asset_depreciation_method_set_enabled or list when not to use it, 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.

asset_depreciation_method_set_enabledA
DestructiveIdempotent

Enable or disable a depreciation method for this workspace (a setup action). Absence means enabled, so this only records a method switched off. The none method can never be disabled (a non-depreciating asset must always be expressible), refused with method_locked. An unknown methodKey is unknown_method. Idempotent on the (workspace, method) row.

NameRequiredDescriptionDefault
enabledYes
methodKeyYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior5/5

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

Goes well beyond the two annotations: it explains the default-state rule ('Absence means enabled, so this only records a method switched off'), an invariant that can never be violated (the none method), and the two named error outcomes (method_locked, unknown_method). The stated idempotency on the (workspace, method) row is consistent with idempotentHint=true, and the mutation framing is consistent with destructiveHint=true.

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

Conciseness4/5

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

Four dense sentences with the core action front-loaded and error semantics after it; almost nothing is padding. The 'Absence means enabled, so this only records a method switched off' line is compressed to the point of ambiguity given that enabled is itself a required boolean.

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

Completeness4/5

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

For a four-required-param mutation with no output schema, the description supplies default semantics, invariants, error codes and idempotency, which is most of what an agent needs. The notable omission is downstream impact: it never says what happens to existing assets if a method they use is switched off.

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

Parameters3/5

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

With 0% schema coverage the description must carry all four params, and it only partially does: methodKey is covered (unknown key → unknown_method), enabled is obliquely covered via the absence-means-enabled rule, workspaceId is implied by 'for this workspace'. The required idempotencyKey is never explained beyond the row-level idempotency claim, so a caller gains no format or reuse guidance for the param that most needs it.

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

Purpose4/5

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

States a specific verb pair plus resource (enable/disable a depreciation method) scoped to a workspace, and flags it as a setup action, which separates it from the reporting siblings like asset_depreciation_preview or asset_depreciation_schedule. It never names the closest sibling (asset_depreciation_methods) to say explicitly that this one toggles rather than lists.

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

Usage Guidelines3/5

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

'(a setup action)' signals the configuration context but there is no explicit when/when-not or routing to an alternative such as asset_depreciation_methods for reading current state. Usage is only implied by the workspace-scoped toggle framing.

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

asset_depreciation_previewA
Read-only

Preview the depreciation amount for period (YYYY-MM) for a list of assetIds, or for every active asset in the workspace when assetIds is omitted. Returns one DepreciationResult per asset: amountRappen (integer Rappen, half-away-from-zero), isFinal (this period lands NBV exactly on residual), projectedNbvAfterRappen (never below residual), and a reason when zero (already_at_residual | period_already_processed | non_depreciable | missing_production_data | unknown_method). Writes NOTHING and creates no journal (H04 posts). proRata is full_period (default) or actual_days; unitsByAsset maps assetId to the units produced this period (units_of_production); paramsByAsset carries per-asset decliningRateBp / totalEstimatedUnits overrides. A foreign or unknown assetId is rejected with not_found before any calculation (§H-TENANT).

NameRequiredDescriptionDefault
periodYes
proRataNo
assetIdsNo
daysByAssetNo
workspaceIdYes
unitsByAssetNo
paramsByAssetNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses significant behavioral details: it returns a reason when the amount is zero with enumerated possible reasons, states that projectedNbvAfterRappen never goes below residual, describes the rejection of foreign/unknown assetIds with not_found, and explains the effect of proRata and override parameters. This adds rich context beyond the annotation.

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

Conciseness4/5

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

The description is dense but well-organized: it starts with the core purpose, then return structure, side-effect guarantee, parameter details, and error handling. Every sentence adds value, and there is no fluff. It is a single paragraph but logically segmented, making it effective despite its length.

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

Completeness5/5

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

Given the complexity of 7 parameters, nested objects, and no output schema, the description covers return types, parameter semantics, error cases, and side-effect behavior. It provides enough detail for an agent to call the tool correctly without additional documentation, including the reason enums and the guarantee about NBV never going below residual.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by explaining most parameters: period format (YYYY-MM), assetIds (omission means all active), proRata (full_period or actual_days), unitsByAsset (mapping to units produced), and paramsByAsset (overrides for decliningRateBp and totalEstimatedUnits). However, daysByAsset is not explicitly described, and the exact structure of nested objects could be clearer, so it is not fully complete.

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

Purpose5/5

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

The description clearly states the tool's function: preview depreciation amount for a period, either for specific assetIds or all active assets. It specifies the verb 'preview' and the resource (depreciation amount), and distinguishes itself from posting tools by explicitly noting it writes nothing and creates no journal, which separates it from siblings like asset_depreciation_run_create.

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

Usage Guidelines4/5

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

The description implicitly guides usage by stating it is a read-only preview that creates no journal, implying it should be used when the agent wants to estimate depreciation without committing. It also explains the behavior when assetIds is omitted (covers all active assets). However, it does not explicitly name alternative tools for posting or other scenarios, so guidance is not fully explicit.

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

asset_depreciation_run_createA
Idempotent

Create a DRAFT depreciation run for a period (H04): calculate the depreciation for every eligible asset via the H03 engine and persist a run header (status=draft) plus one line per asset that returned amount > 0, so a bookkeeper can review the proposed expense before anything hits the books. Eligible = status active/fully_depreciated, method != none, accumulated depreciation below cost minus residual, last_depreciation_period null or before the target period, not disposed. Optional filters narrow the set: assetIds (an explicit subset), categoryId, costCenterId. unitsByAsset maps assetId to the WHOLE units produced this period and is what makes a units_of_production asset depreciable at all (TILL captures no production data of its own, so the run carries it; same shape as asset_depreciation_preview, and values must be non-negative safe integers up to 1e12 or the create is invalid_input). skipped[] reports assets that produced NO line, as {assetId, assetNumber, reason}: on an EXPLICIT assetIds list every named asset that produced no line is reported (non_depreciable | asset_terminal | already_at_residual | period_already_processed | filtered_out | missing_production_data | missing_units_estimate | zero_amount), because naming an asset is an instruction about that asset; on a SWEEP the eligible register IS the selection, so only assets that reached the calculation are reported (missing_production_data | missing_units_estimate | zero_amount). A units_of_production asset named EXPLICITLY in assetIds is refused, not merely reported, when the input can be corrected: missing_production_data (no figure supplied) or missing_units_estimate (the asset carries no totalEstimatedUnits, so there is no denominator to allocate over). Nothing is written in either case. postingGranularity is detailed (one expense + one accum line per asset, the default) or summarised (grouped by account + cost centre); the per-asset lines exist either way for the sub-ledger audit. period is YYYY-MM. Refused with invalid_period, period_locked (the period is hard-locked in A03) or run_already_exists (a draft for the same period and selection already exists, and the response names it). Writes NO journal (the post verb does). Idempotent on idempotencyKey and on the (period, selection) signature, where the signature is built from the LINES the run would write (asset, amount and production figure), so two creates over the same eligible set yield ONE draft however the filters or the units map were spelled. When there is nothing to charge, NO run is persisted at all: the answer is {ok:true, run:null, lines:[], empty:true, skipped:[...]}, computed fresh, so it is identical on every call however many times it is repeated and whatever key each call carries. A run header exists only where at least one asset is charged, which is why a finished period never leaves an outstanding draft in run_list for a period-close checklist to trip over. Once a period is POSTED its assets carry it as their last depreciation period, so nothing is eligible and a later create for that period returns exactly that empty answer, carrying alreadyPostedRunId: the id of the most recently posted run for the period (two disjoint selections can both post for one period). A foreign assetId is not_found (§H-TENANT).

NameRequiredDescriptionDefault
periodYes
assetIdsNo
categoryIdNo
workspaceIdYes
costCenterIdNo
unitsByAssetNo
idempotencyKeyYes
postingGranularityNo

TDQS

A4.7/5.0
Behavior5/5

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

Far beyond the annotations: it discloses exactly what is persisted (run header + one line per positive-amount asset), that nothing is written on refusal or on an empty set, the full skipped[] reason taxonomy and its different semantics for explicit assetIds vs sweeps, and the idempotency signature built from the would-be lines. This is consistent with idempotentHint=true and destructiveHint=false rather than 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.

Conciseness3/5

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

Front-loaded correctly — the create/calculate/persist core is in the first sentence — but the rest is a single ~450-word paragraph dense with parenthetical codes and nested conditionals that is hard to scan. Nearly all content is substantive, yet some asides (the period-close checklist rationale for no empty draft) could be trimmed or split into structure.

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

Completeness5/5

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

No output schema exists, and the description compensates by specifying the response shape ({ok, run, lines, empty, skipped, alreadyPostedRunId}) and every refusal code (invalid_period, period_locked, run_already_exists, not_found, invalid_input). For an 8-parameter mutation with a nested unitsByAsset object, nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 0%, so the description carries the load and mostly does: period format (YYYY-MM), assetIds as an explicit subset, categoryId/costCenterId as narrowing filters, unitsByAsset as assetId→whole units with a 1e12 non-negative safe-integer bound, postingGranularity's two modes, and idempotencyKey's role. Only workspaceId goes unexplained apart from the tenant hint on foreign assetId.

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

Purpose5/5

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

Opens with a specific verb+resource+outcome: 'Create a DRAFT depreciation run for a period (H04): calculate the depreciation for every eligible asset via the H03 engine and persist a run header (status=draft) plus one line per asset'. It also separates itself from siblings by naming the post verb ('Writes NO journal (the post verb does)') and by referencing the preview's shared shape.

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

Usage Guidelines5/5

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

Gives an explicit eligibility predicate (active/fully_depreciated, method != none, NBV above residual, last_depreciation_period null or earlier, not disposed), names the alternative verb for posting, and states when NOT to expect a result (already-posted period returns the empty answer with alreadyPostedRunId). An agent can decide create-vs-post-vs-preview without opening another schema.

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

asset_depreciation_run_getA
Read-only

Read one depreciation run by id (H04): the run header (period, status, granularity, total, asset count, the journal_entry_id it posted and the reversing link if reversed) plus every line, in register order (asset id, assetNumber, amount, accumulated-before/after, nbv-after, is_final, costCenterId, the two GL account ids the line posts against, and unitsProduced: the production figure a units_of_production amount was computed from, null for every other method). §H-TENANT: a foreign runId is not_found.

NameRequiredDescriptionDefault
runIdYes
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

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

The annotation readOnlyHint=true already marks this as read-only, and the description reinforces this with 'Read'. More importantly, it goes beyond the annotation by detailing the exact data payload (header fields, line fields, ordering) and disclosing a specific error condition (foreign runId returns not_found). This is valuable behavioral transparency that helps the agent set expectations.

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

Conciseness4/5

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

The description is long but well-structured: it leads with the primary purpose, then itemizes header fields, then line fields, and ends with a tenant-specific note. Every sentence adds information, and the format is easy to scan. It is not overly verbose given the amount of detail needed to enumerate the response.

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

Completeness5/5

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

Without an output schema, the description must stand alone in explaining what the tool returns. It does so exhaustively, listing all header and line attributes including nested items like GL account ids and unitsProduced. It also covers edge cases (reversing link, foreign runId). Given the tool's complexity, the description is remarkably complete.

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

Parameters4/5

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

With 0% schema description coverage, the description carries the burden. It implicitly links runId to the id being read and mentions 'foreign runId' which clarifies scope. The workspaceId is not elaborated, but the tenant note implies it's the tenant context. It does not explicitly map each parameter, but it provides enough to understand their roles in this context.

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

Purpose5/5

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

The description opens with a specific verb ('Read'), a clear resource ('one depreciation run by id'), and an explicit objective. It enumerates exactly what will be returned (header fields plus every line with all fields), leaving no ambiguity about the tool's function. It is distinct from sibling tools like asset_depreciation_run_list or create because 'Read' implies a singular fetch by id.

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

Usage Guidelines4/5

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

The description clearly implies usage when the agent has a specific runId and needs the full detail of a single run. It does not explicitly name alternatives or state when not to use it, but the verb and resource make the intent unambiguous. Given the large sibling set, an explicit cross-reference to list or create would elevate it, but the current text suffices.

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

asset_depreciation_run_listA
Read-only

List the workspace depreciation runs (H04), newest period first. Optional filters: period (exact YYYY-MM), status (draft | posted | reversed, one or an array), and a from/to period window. Read-only.

NameRequiredDescriptionDefault
toNo
fromNo
periodNo
statusNo
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

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

The readOnlyHint annotation already marks the tool safe, and the description reinforces it with 'Read-only.' Beyond the annotation, it adds behavioral specifics: ordering newest first, exact period format, and allowed status values. It does not mention pagination or response shape, but the added context meaningfully exceeds annotation coverage.

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

Conciseness5/5

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

Two compact sentences with no filler. The primary purpose is front-loaded, followed by the optional filters and a closing read-only note. Every sentence contributes information.

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

Completeness3/5

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

The description covers the essential selection context: what is listed, ordering, filters, and status vocabulary. Since there is no output schema, the agent still lacks guidance on returned fields, pagination, or response structure, which is a meaningful gap for a list endpoint.

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

Parameters3/5

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

With 0% schema description coverage, the description must carry parameter meaning. It does explain period format, status values, and the from/to window. However, it leaves workspaceId implicit and does not define the exact format or inclusivity of the from/to endpoints, so coverage is useful but incomplete.

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

Purpose5/5

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

The description states a specific verb ('List'), a precise resource ('workspace depreciation runs (H04)'), and an ordering guarantee ('newest period first'). This clearly distinguishes it from sibling tools like asset_depreciation_run_get or asset_depreciation_run_create by establishing that this is the read-only list operation.

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

Usage Guidelines3/5

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

The description communicates clear context: list runs for a workspace, optionally filtered by period, status, and date window. However, it does not explicitly say when to prefer this over closely related siblings such as asset_depreciation_run_get (single run retrieval) or asset_depreciation_preview/schedule (projections), leaving the selection partly implicit.

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

asset_depreciation_run_postA
Idempotent

Post a reviewed DRAFT depreciation run (H04): in ONE atomic transaction it re-validates eligibility and the period-open state, posts one balanced GL journal via A02 (Dr the depreciation-expense account / Cr the accumulated-depreciation account for each line, source=asset_depreciation), writes one append-only asset_transaction (type=depreciation) per asset, advances every asset accumulated_depr_rappen / net_book_value_rappen / last_depreciation_period, sets a final asset to status=fully_depreciated, and marks the run posted with its journal_entry_id. postingDate defaults to the last day of the period; it may land later than the period (a late close) but never earlier than the first day of the run period, and an explicitly supplied date may not predate the acquisition date of any asset in the run (invalid_input names the field and a reason of before_period or before_acquisition). Refused with period_locked (the RUN period or the posting date is hard-locked: a posting date in an open year can never slip a charge past a sealed one), stale_draft with the reason that applies (accumulated_moved: its accumulated depreciation moved since the draft was calculated; valuation_moved: its net book value moved, for instance an asset_add_capitalisation landed while the draft was under review; asset_terminal: it was disposed or archived; asset_missing), run_reversed. A stale draft is never recomputed, because that would silently change a figure the reviewer already approved: recreate the run. Idempotent on idempotencyKey AND on run status: a re-post of an already-posted run posts NO second journal and writes NO second asset_transaction, returning the original result (a double-post never double-counts). §H-TENANT: a foreign runId is not_found. CONSEQUENCE: Books the depreciation for every asset in the run; posting it twice never counts twice. If it is wrong, you reverse the run with a correcting entry; both stay visible.

NameRequiredDescriptionDefault
runIdYes
postingDateNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare idempotentHint=true and destructiveHint=false; the description goes far beyond by disclosing the atomic transaction scope, the exact writes performed (GL journal, append-only asset_transactions, asset field updates, status transitions), and the full refusal taxonomy with reason codes. It also clarifies that a stale draft is never silently recomputed — a non-obvious, high-consequence behavioral guarantee.

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

Conciseness4/5

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

Dense but front-loaded: the primary action and its effects come first, then date rules, then refusals, then idempotency. Minor waste from restating idempotency twice ('NO second journal' and then 'posting it twice never counts twice'), but nearly every sentence carries operational meaning.

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

Completeness5/5

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

For a high-stakes posting operation with no output schema, the description covers side effects, error conditions, idempotency, tenant scoping, and the consequence of an incorrect post. An agent has everything needed to decide whether to call it and what to expect.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate, and it does heavily for postingDate (default of last day of period, may be late but never before period start, must not predate acquisition, with before_period/before_acquisition reasons) and idempotencyKey (re-post returns original result). runId and workspaceId are only implicitly covered (tenant isolation via §H-TENANT), leaving a small gap.

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

Purpose5/5

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

States a specific verb and resource ('Post a reviewed DRAFT depreciation run') plus the exact accounting effect (Dr expense / Cr accumulated depreciation via A02). It is unmistakably distinct from sibling read tools like asset_depreciation_run_get or asset_depreciation_preview.

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

Usage Guidelines5/5

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

Explicitly targets a reviewed DRAFT run, and names the alternatives for the edge cases: recreate the run rather than re-post a stale draft, and 'reverse the run with a correcting entry' if wrong. It also states when the tool refuses (period_locked, stale_draft, run_reversed), which is usable routing information.

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

asset_depreciation_run_reverseA
Idempotent

Reverse a POSTED depreciation run (H04) when a material error is found, without rewriting history: it calls A02 reverseEntry on the original journal (producing a new reversing entry), writes a compensating asset_transaction (type=depreciation_reversal) per line, restores every asset accumulated_depr_rappen / net_book_value_rappen / status / last_depreciation_period to its pre-run value (by delta), and marks the original run reversed with the reversing journal link. The original journal and the original run amounts are never mutated (§H-AUDIT). reverseDate defaults to the last day of the period and may not predate the first day of the run period (a reversal is booked forward, never before the charge it reverses: invalid_input names the field). The optional reason is recorded on the reversing entry description and on the compensating asset_transaction. Refused with run_not_posted (a draft), already_reversed, period_locked, and later_run_exists when a LATER run has already posted for one of the assets (the response names the blocking period): runs are reversed newest first, because the asset last_depreciation_period stays on the later run and the earlier period would otherwise be silently unrecoverable. A reversed run cannot be re-posted; a new run for the same period may be created afterwards. Idempotent on idempotencyKey. §H-TENANT: a foreign runId is not_found. CONSEQUENCE: Reverses a posted depreciation run with a correcting entry and restores each asset's book value. The run stays visible as reversed; if that was wrong, you create and post the run again.

NameRequiredDescriptionDefault
runIdYes
reasonNo
reverseDateNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare idempotentHint=true and destructiveHint=false; the description goes far beyond, detailing the A02 reverseEntry call, compensating asset_transaction creation, per-field restoration of accumulated_depr_rappen/net_book_value_rappen/status/last_depreciation_period, and that originals are never mutated per §H-AUDIT. It also surfaces idempotency behavior, tenant scoping (§H-TENANT), and the full refusal vocabulary.

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

Conciseness4/5

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

The consequence and core operation are front-loaded, and every sentence carries operational content (error codes, ordering rule, nullability of history). It is dense and long-winded in places, but the density is justified for a high-risk reversal tool rather than padded.

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

Completeness5/5

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

For a mutation tool with no output schema and an undocumented input schema, the description supplies everything an agent needs: side effects, refusal modes, ordering constraints, idempotency, tenant scoping, and the recovery path after an incorrect reversal. Nothing material is missing.

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

Parameters4/5

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

With 0% schema description coverage, the description carries the burden well: reverseDate defaults to period end and may not predate the run period's first day (invalid_input names the field), reason is recorded on the reversing entry and compensating transaction, and idempotencyKey drives idempotency. Only workspaceId is left unexplained, keeping this just short of a 5.

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

Purpose5/5

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

States a specific verb (reverse), the exact resource (a POSTED depreciation run, H04) and the triggering condition (material error found), plus the key differentiator that history is not rewritten. An agent can distinguish this from asset_transaction_reverse, reverse_entry, or asset_depreciation_run_post without opening any schema.

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

Usage Guidelines5/5

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

Explicitly names when to use it (material error in a posted run) and enumerates the conditions that select against it: run_not_posted for drafts, already_reversed, period_locked, and later_run_exists with the newest-first ordering rule spelled out. It also states the correct follow-up path (create and post a new run).

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

asset_depreciation_scheduleA
Read-only

Project the full remaining depreciation schedule for ONE asset from fromPeriod (YYYY-MM, inclusive) to an optional toPeriod, using the same pure engine as the preview so a line never disagrees with a live preview. Returns ordered ScheduleLine rows (period, amountRappen, projectedAccumRappen, projectedNbvRappen, isFinal); the final line residual-adjusts so the lines sum to exactly cost minus residual. A units_of_production asset needs a unitsForecast map (period to units) or the projection returns incomplete with a units_forecast_required warning rather than inventing usage. Writes nothing; a foreign assetId is not_found (§H-TENANT).

NameRequiredDescriptionDefault
paramsNo
assetIdYes
proRataNo
toPeriodNo
fromPeriodYes
workspaceIdYes
unitsForecastNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description explicitly says 'Writes nothing' and details edge-case behavior: the final line residual-adjusts to match cost minus residual, units_of_production assets require a unitsForecast or return an incomplete projection with a warning, and a foreign assetId yields a not_found error. This is rich behavioral disclosure that far exceeds the annotation's minimal signal.

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

Conciseness5/5

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

The description is dense yet efficient, with every sentence contributing distinct value: purpose, output shape, residual behavior, units_of_production caveat, and safety/error semantics. It is front-loaded with the core action and remains readable without unnecessary jargon.

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

Completeness5/5

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

Given the absence of an output schema and 0% param coverage, the description provides a complete-enough contract: return row fields, residual adjustment guarantee, unitsForecast requirement, and error code reference. It leaves little ambiguous for an agent deciding whether and how to call this tool.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well by explaining fromPeriod's format and inclusivity, toPeriod as optional, and unitsForecast's required shape for units_of_production assets. It does not explain proRata or params, but the most critical parameters are semantically defined in plain language, which is a strong addition given the schema is silent.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Project the full remaining depreciation schedule for ONE asset', and immediately distinguishes itself from the sibling preview tool by noting it uses 'the same pure engine as the preview so a line never disagrees with a live preview'. This makes the tool's purpose unmistakable and separates it from asset_depreciation_forecast or asset_depreciation_preview.

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

Usage Guidelines4/5

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

The description gives clear context: it projects the full remaining schedule for one asset over a date range, and explicitly ties its behavior to the preview engine for consistency. It does not name alternatives or state when not to use it, but the scoping to 'ONE asset' and the optional toPeriod strongly imply when this tool is appropriate vs. other asset tools.

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

asset_disposal_getA
Read-only

Read one fixed-asset DISPOSAL sub-ledger transaction by id (H06), with the balanced GL journal entry it posted. transactionId must name a disposal-type asset_transaction in this workspace: a foreign id, or an id naming an acquisition / depreciation event, is not_found rather than a leak of the wrong event through the disposal verb (§H-TENANT).

NameRequiredDescriptionDefault
workspaceIdYes
transactionIdYes

TDQS

A4.4/5.0
Behavior4/5

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

The readOnlyHint annotation already covers non-mutation. The description adds meaningful behavior beyond that: not_found on invalid ids, cross-tenant concern (§H-TENANT), and the fact that the returned data includes the posted GL journal entry.

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

Conciseness5/5

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

Two dense sentences with no filler. The purpose is front-loaded, then the error/scope constraint is added precisely. Every clause earns its place.

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

Completeness4/5

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

For a simple get-by-id with no output schema, the description states the return contains the posted GL journal entry and explains invalid-id behavior. It does not explicitly walk through workspaceId, but the tool is simple enough that the description is nearly complete.

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

Parameters4/5

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

With 0% schema description coverage, the description carries the burden and mostly succeeds: it explains transactionId must name a disposal-type asset_transaction and what happens with foreign or wrong-typed ids. workspaceId is only implied as the workspace scope via 'in this workspace', which is useful but less explicit.

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

Purpose5/5

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

The description names a specific verb ('Read'), a specific resource ('fixed-asset DISPOSAL sub-ledger transaction by id (H06)'), and the key return content ('balanced GL journal entry'). The 'DISPOSAL' qualifier clearly differentiates it from generic asset_transaction_get and from disposal preview/dispose verbs.

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

Usage Guidelines4/5

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

It gives explicit exclusion semantics: transactionId must be a disposal-type asset_transaction, and foreign or acquisition/depreciation ids return not_found rather than leaking the wrong event. This tells an agent when not to use the tool, though it does not name a specific alternative sibling.

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

asset_disposal_previewA
Read-only

Preview the exact disposal journal for an active or fully_depreciated fixed asset (H06) WITHOUT posting anything. Given the asset, a disposalDate, proceedsRappen (>= 0), a gainLossAccountId (an income or expense account) and, when proceeds > 0, a proceedsAccountId (a bank/receivable asset or a liability account), it returns the current cost / accumulated depreciation / net book value, the signed gainLossRappen (proceeds minus NBV: positive is a gain, negative a loss), and the full balanced journal_lines it WOULD post: Dr accumulated depreciation, Dr proceeds account, the book loss (Dr) or gain (Cr) on the gainLossAccountId, and Cr the asset cost account. The lines are the SAME lines asset_dispose posts, so the preview never disagrees with the posting. Pure read: it writes nothing, creates no journal and does NOT check the period lock, so it is exactly the tool for seeing what a disposal would book before finding out the period is sealed. Refused before any calculation with not_found (foreign asset, §H-TENANT), asset_already_disposed / asset_archived / asset_not_acquired (a draft has no cost basis), invalid_proceeds (negative or non-integer), invalid_gain_loss_account or invalid_proceeds_account (missing, foreign, or wrong type).

NameRequiredDescriptionDefault
notesNo
reasonNo
assetIdYes
workspaceIdYes
disposalDateYes
proceedsRappenYes
counterpartyNameNo
gainLossAccountIdYes
proceedsAccountIdNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, so the description's emphasis on 'WITHOUT posting anything' and 'Pure read' aligns with that. It goes beyond annotations by detailing what the tool does NOT do (does not check period lock) and what it returns (detailed journal lines). This adds context about execution behavior and side-effect absence, which is valuable. However, it could have also disclosed potential performance or rate-limit traits, but that's not critical.

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

Conciseness5/5

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

The description is dense but well-structured, front-loading the core purpose and key constraints, then detailing the return value and refusal reasons. Each sentence adds critical information with no fluff. It's longer than average, but every clause earns its place given the complexity of the disposal logic.

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

Completeness4/5

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

Given the complexity of asset disposal (multiple accounts, conditional parameters, validation rules), the description is comprehensive. It explains what the tool returns, how the journal lines are constructed, and all refusal scenarios. The only minor gap is that it doesn't explicitly describe the output schema for the journal_lines structure (e.g., exact field names), but since there is no output schema defined and the description already provides a textual breakdown, it is sufficiently complete for an agent to understand the result.

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

Parameters4/5

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

Schema description coverage is 0% in structured form, so the description compensates by explaining each key parameter's role, especially the nuanced validation (proceedsRappen >= 0, gainLossAccountId type, proceedsAccountId conditional). It clarifies the purpose of optional fields like notes/reason/counterpartyName implicitly by listing them in the schema, but the description adds meaningful context for the core parameters. It does not detail every parameter but covers the ones essential for correct invocation.

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

Purpose5/5

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

The description explicitly states the tool's purpose: to preview the disposal journal for an asset without posting. It specifies the exact resource (fixed asset H06), the action (preview), and distinguishes it from the posting tool. It names the key output elements (lines, gain/loss calculation) and explains the 'same lines' guarantee, which is clear and non-ambiguous.

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

Usage Guidelines5/5

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

The description clearly states when to use this tool (to see what a disposal would book before posting, especially if period lock is unknown) and contrasts it with asset_dispose. It also provides explicit conditions for required parameters (e.g., proceedsAccountId needed when proceeds > 0) and lists all refusal reasons, giving agents complete routing information.

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

asset_disposal_summaryA
Read-only

The disposal gain/loss pack for a date range (H09, US-H09.4): every H06 disposal posted between fromDate and toDate (ISO YYYY-MM-DD, inclusive) with its asset number/name, disposalDate, originalCostRappen, accumDeprAtDisposalRappen, nbvAtDisposalRappen, proceedsRappen, gainLossRappen (signed: proceeds minus book value, so positive is a gain), journalEntryId and reason (the disposal description). Footer totals: count, sum proceeds, sum gain, sum loss, net gain/loss. Optional filter by categoryIds, locationIds and a case-insensitive reason substring. No disposals in range is an empty success, not an error. Pure read over the append-only sub-ledger, §H-TENANT.

NameRequiredDescriptionDefault
filterNo
toDateYes
fromDateYes
workspaceIdYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description adds valuable behavioral context: it is a 'pure read over the append-only sub-ledger', and it explicitly states that 'no disposals in range is an empty success, not an error'. It also explains the sign convention of gainLossRappen. This fully discloses behavior beyond the annotation.

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

Conciseness5/5

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

The description is dense but efficient. It front-loads the purpose, then lists output fields, footer totals, and filters in a logical flow. Every sentence adds necessary information without fluff. It is appropriately sized for the complexity of the tool.

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

Completeness5/5

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

Given the tool's complexity, zero schema description coverage, no output schema, and a large sibling list, the description covers all essential aspects: input parameters, output fields, footer totals, filtering options, empty result behavior, and read-only nature. An agent can call it correctly and interpret results without additional context.

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

Parameters5/5

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

With 0% schema coverage, the description fully compensates. It specifies date format (ISO YYYY-MM-DD) and inclusivity, explains the filter semantics (categoryIds, locationIds, case-insensitive reason substring), and clarifies the output fields. WorkspaceId is not described but is a common contextual parameter, likely understood from the environment.

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

Purpose5/5

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

The description states a specific verb (implied get), resource (disposal gain/loss pack), and scope (date range). It names the exact record set (H06 disposals) and lists output fields. This clearly distinguishes it from related tools like asset_disposal_get or asset_disposal_preview.

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

Usage Guidelines4/5

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

The description specifies the date range and optional filters, making the tool's use case clear. It does not explicitly name alternative tools or say when not to use it, but the context of a summary report over a range is evident from the wording. It lacks explicit exclusions but provides enough guidance.

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

asset_disposeA
Idempotent

Dispose an active or fully_depreciated fixed asset (H06): the TERMINAL financial event (sale, scrap, donation, write-off, retirement). In ONE atomic transaction it (a) posts ONE balanced GL journal via A02 (source=asset_disposal) clearing the asset cost (Cr) and its accumulated depreciation (Dr), recognising the proceeds (Dr the proceedsAccountId) and the resulting book gain (Cr) or loss (Dr) on the gainLossAccountId; (b) writes ONE append-only asset_transaction (type=disposal, deltaCostRappen = -cost, deltaAccumDeprRappen = -accumulated, proceedsRappen, gainLossRappen) naming that journal; and (c) moves the asset to status=disposed, forces net_book_value_rappen to 0 and stamps disposed_at / disposal_proceeds_rappen (cost and accumulated stay for historical reporting). The gain/loss SIGN is proceedsRappen minus net book value: proceeds above NBV credit the gain account, below NBV debit the loss account, exactly equal writes no gain/loss line. A scrap (proceedsRappen = 0) writes no proceeds line and needs no proceedsAccountId. After success the asset is permanently excluded from every future depreciation run (H03/H04 status filter) and asset_update refuses it with asset_terminal. Refused with not_found (foreign asset, §H-TENANT), asset_already_disposed (a second dispose: first wins, second is refused), asset_archived, asset_not_acquired (a draft has no cost basis), invalid_proceeds, invalid_gain_loss_account, invalid_proceeds_account, or period_locked (disposalDate in a hard-locked A03 period). A wrong disposal is corrected by reversing the journal (A02) plus a compensating asset_transaction, never an un-dispose. Idempotent on idempotencyKey: a replay returns the original {asset, transaction, journalEntry, gainLossRappen} and posts no second journal, appends no second transaction and re-flips no status. CONSEQUENCE: Books the asset's sale or write-off with its gain or loss and takes it out of the register. If it is wrong, you reverse the disposal and the asset is back in the register.

NameRequiredDescriptionDefault
notesNo
reasonNo
assetIdYes
workspaceIdYes
disposalDateYes
idempotencyKeyYes
proceedsRappenYes
counterpartyNameNo
gainLossAccountIdYes
proceedsAccountIdNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare idempotentHint and destructiveHint=false; the description goes far beyond, disclosing atomicity, the exact append-only records written, which fields are zeroed versus preserved for historical reporting, the gain/loss sign rule, the scrap special case, tenant isolation (§H-TENANT), period locks, and a full enumerated refusal set. Idempotency semantics on idempotencyKey are spelled out concretely (replay returns the original payload, posts no second journal).

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

Conciseness3/5

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

The single dense paragraph is front-loaded with the action and structured with (a)/(b)/(c), which helps, but it also embeds GL debit/credit mechanics that are implementation detail rather than agent-actionable, and the closing CONSEQUENCE paragraph restates the opening ('takes it out of the register' / 'reverse the disposal'). Length is partly justified by 0% schema coverage, but trimming the accounting internals and the duplicate summary would lose nothing.

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

Completeness5/5

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

With no output schema, the description supplies the return shape ({asset, transaction, journalEntry, gainLossRappen}), the full error taxonomy, the post-condition state of the asset, and the reversal-based correction model. An agent has everything needed to call it correctly and to interpret a refusal.

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

Parameters4/5

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

Schema description coverage is 0% with 10 parameters, so the description must carry the load — and it does for the consequential ones: proceedsRappen (0 means scrap, no proceeds line), proceedsAccountId (not required for scrap), gainLossAccountId (sign driven by proceeds minus NBV), disposalDate (period-lock interaction), idempotencyKey (replay behavior), and assetId (foreign asset yields not_found). The peripheral fields notes, reason, counterpartyName, and workspaceId are never explained, keeping it below a 5.

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

Purpose5/5

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

Opens with a specific verb+resource ('Dispose an active or fully_depreciated fixed asset (H06)') and immediately qualifies it as the terminal financial event, enumerating the covered transaction types (sale, scrap, donation, write-off, retirement). This is unmistakably distinct from siblings such as asset_transfer, asset_archive, or asset_update, which the description explicitly says will refuse the asset afterwards.

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

Usage Guidelines4/5

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

States the preconditions and exclusions clearly: only active/fully_depreciated assets, drafts rejected with asset_not_acquired, archived assets rejected, second dispose refused with asset_already_disposed, and hard-locked periods refused. It also prescribes the correction path (reverse the journal plus compensating transaction, never un-dispose). It stops short of routing the agent to asset_disposal_preview for a dry run, which would have made it a 5.

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

asset_end_of_life_listA
Read-only

Assets at or approaching end of life (H09, US-H09.8): with status="approaching" (default) it projects each active, depreciable asset forward from the current period and returns those whose remaining life falls inside withinMonths (default 12, capped 60), each with current NBV, residual, remainingMonths and the next forecasted depreciation amount, ordered soonest first. With status="fully_depreciated" it lists the already-fully-depreciated assets. Re-uses the pure H03 projector; writes nothing. §H-TENANT.

NameRequiredDescriptionDefault
statusNo
workspaceIdYes
withinMonthsNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, it explains that the tool projects active depreciable assets forward from the current period, filters by remaining life within a capped window, orders results soonest first, and writes nothing. This gives the agent a clear safety and behavior profile.

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

Conciseness4/5

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

The description is front-loaded and dense with useful facts, with no filler. It is a long single sentence with some domain shorthand (H09, §H-TENANT) that adds context but could be slightly tightened for readability.

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

Completeness5/5

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

For a list/report tool with no output schema, it tells the caller exactly what comes back: current NBV, residual, remainingMonths, and next forecasted depreciation, plus ordering. The required parameter, status modes, and withinMonths cap are all covered, so no critical usage information is missing.

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

Parameters4/5

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

With 0% schema description coverage, the description carries the parameter explanation: it defines status values and withinMonths default/cap. It does not explicitly describe workspaceId semantics, but that parameter is self-evident and named as required in the schema.

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

Purpose5/5

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

The description names a specific resource (assets at or approaching end of life), states the supporting report codes H09/US-H09.8, and contrasts the approaching vs fully-depreciated views. This is enough to set it apart from generic asset listing tools such as asset_list or asset_depreciation_schedule.

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

Usage Guidelines4/5

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

It clearly explains the default mode, when to use status='fully_depreciated', and how withinMonths affects results. It gives clear context for using this tool, though it does not explicitly name sibling alternatives or exclusions, which keeps it from a 5.

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

asset_getA
Read-only

Read one fixed asset by id, including its resolved financial baseline, the three GL accounts it will post against, status and the convenience columns (accumulated depreciation, net book value) later specs maintain.

NameRequiredDescriptionDefault
assetIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description's 'Read' matches. It adds value by disclosing the specific return contents (resolved financial baseline, GL accounts, convenience columns), which is more than a generic read. It does not mention auth or rate limits, but for a read-only tool with the annotation, the bar is met.

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

Conciseness5/5

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

One efficient sentence that front-loads the purpose and then enumerates the return fields. No filler or redundancy. The trailing 'later specs maintain' is a minor artifact but does not detract.

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

Completeness4/5

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

For a simple read tool with two parameters, no output schema, and a readOnlyHint annotation, the description adequately covers what the agent needs: it states the resource, the identifier, and the contents of the response. It is missing nothing critical for correct invocation.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It clarifies that the tool fetches 'by id', implicitly mapping to assetId, but does not explain workspaceId at all. The parameter names are self-explanatory, but the description adds minimal semantic value beyond the schema for these two parameters.

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

Purpose5/5

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

States a specific verb ('Read') and resource ('one fixed asset by id'), and lists the exact contents returned (financial baseline, three GL accounts, status, convenience columns). This clearly distinguishes it from siblings like asset_list (list all) and asset_search (filtered search) without needing to open their schemas.

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

Usage Guidelines4/5

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

Provides clear context: it is the tool for fetching a single fixed asset by its id. It does not explicitly mention alternatives or when not to use it, but the singular-by-id scope is unambiguous against the many asset-related siblings (asset_create, asset_update, asset_transaction_get, etc.).

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

asset_ledger_getA
Read-only

The complete chronological ledger for ONE fixed asset (H07, US-H07.1): every asset_transaction event (acquisition, additional_capitalisation, opening, depreciation, disposal) in effective-date order, each with its type, delta cost, delta accumulated depreciation, proceeds/gain-loss (disposal), the GL journal_entry_id it posted, and the RUNNING cost / accumulated depreciation / net book value AFTER that event. A disposed asset keeps its full history (its disposal row returns the running totals to zero; nothing is purged). Read-only. §H-TENANT: a foreign assetId is not_found.

NameRequiredDescriptionDefault
assetIdYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses meaningful behavior: disposed assets retain full history and are not purged, disposal rows reset running totals to zero, entries include the posted GL journal_entry_id, and a foreign assetId returns not_found. This is rich behavioral context not available anywhere else.

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

Conciseness5/5

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

The description is information-dense and front-loaded with the core purpose, then lists event types, output fields, running-total semantics, disposal behavior, read-only status, and tenant behavior. Each sentence adds substantive value; there is no filler or redundancy.

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

Completeness5/5

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

For a read-only single-asset ledger tool with only two simple parameters and no output schema, the description provides enough detail to invoke it correctly: what events are included, ordering, exact fields, running totals, post-disposal behavior, and not_found semantics. Nothing essential is missing.

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

Parameters3/5

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

The schema provides no parameter descriptions, so the description carries the burden. It clarifies that assetId identifies one fixed asset and adds tenant/error semantics ('foreign assetId is not_found'), but workspaceId remains unexplained beyond its self-evident name. Partial compensation for the 0% schema coverage.

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

Purpose5/5

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

The description specifies a precise verb and resource: retrieving the complete chronological ledger for a single fixed asset. It enumerates the event types and fields returned, and the 'ONE fixed asset' scope clearly differentiates it from list-style siblings like asset_ledger_list or asset_transaction_list.

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

Usage Guidelines3/5

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

The description implies usage context through the output spec—use this when you need the full event ledger with running totals for one asset—but it does not explicitly state when to prefer it over alternatives such as asset_transaction_get or asset_get. No when-not-to-use guidance or alternative routing is provided.

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

asset_ledger_listA
Read-only

List fixed-asset sub-ledger events ACROSS assets (H07, US-H07.4), newest first, with journal links. Optional filters: assetId, type (one or an array of acquisition | additional_capitalisation | opening | depreciation | disposal | revaluation | adjustment), a fromDate/toDate window (YYYY-MM-DD, inclusive), and journalEntryId. Simple limit (default 100, max 500) / offset pagination; returns { items, total }. This is a flat list, so no running balance is attached (the running NBV is only meaningful within one asset: use asset_ledger_get for that). Read-only, §H-TENANT.

NameRequiredDescriptionDefault
typeNo
limitNo
offsetNo
toDateNo
assetIdNo
fromDateNo
workspaceIdYes
journalEntryIdNo

TDQS

A4.7/5.0
Behavior4/5

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

The annotation readOnlyHint=true already signals safety, and the description adds valuable behavioral context: it returns a flat list with no running balance, describes the response shape {items, total}, and mentions pagination defaults. 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.

Conciseness4/5

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

The description is dense but every sentence contributes: scope, filters, pagination, return shape, a caution about running balance, and read-only flag. It could be trimmed slightly but remains 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.

Completeness5/5

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

With no output schema, the description defines the return format. It covers all parameters, pagination behavior, and the key limitation (no running balance), pointing to the alternative. For an 8-parameter tool, nothing critical is missing.

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

Parameters5/5

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

Schema coverage is 0%, so the description compensates by enumerating all optional filters (assetId, type with enum values, date window with format, journalEntryId) and pagination (limit default 100 max 500, offset). It even clarifies that type accepts a single value or an array. This fully bridges the gap.

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

Purpose5/5

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

The description clearly states the verb (list), resource (fixed-asset sub-ledger events), scope (across assets), ordering (newest first), and inclusion of journal links. It explicitly distinguishes from asset_ledger_get by noting this is a flat list across assets, so an agent can tell them apart without inspecting schemas.

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

Usage Guidelines5/5

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

It provides explicit guidance on when to use this tool vs. the alternative: 'use asset_ledger_get for that' for running balance. It also states the scope (ACROSS assets) and the read-only nature, giving clear context for selection.

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

asset_listA
Read-only

List the workspace fixed-asset register, ordered by number. Structured filters: categoryId, status, locationId, responsibleUserId, acquisitionYear (YYYY). Archived assets are hidden unless includeArchived=true or status is given explicitly. Accepts a savedViewId (G00 saved-view seam).

NameRequiredDescriptionDefault
statusNo
categoryIdNo
locationIdNo
savedViewIdNo
workspaceIdYes
acquisitionYearNo
includeArchivedNo
responsibleUserIdNo

TDQS

A4/5.0
Behavior4/5

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

With readOnlyHint=true, the safety profile is already known from annotations. The description adds meaningful behavioral rules: ordering by number, archived-hidden-by-default, and a savedViewId seam. It goes beyond what annotations convey, though it omits pagination and field-level output details. No contradiction with annotations.

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

Conciseness5/5

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

Four short sentences: purpose, filters, archived behavior, saved view. Each sentence adds distinct information with no filler, and the most important information is front-loaded. This is a well-structured, appropriately sized description.

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

Completeness3/5

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

The tool has 8 parameters and no output schema, so the description carries extra responsibility for explaining behavior and return context. It covers filters and archived defaults but does not mention pagination, page size, or response shape. The cryptic 'G00 saved-view seam' leaves an integration requirement unresolved. Adequate overall, but with clear gaps.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it explicitly enumerates the main filter parameters and gives a format for acquisitionYear ('YYYY'). workspaceId is only implied by 'workspace' context, and savedViewId's 'G00 saved-view seam' explanation is cryptic, leaving some parameter semantics under-specified. The description does meaningful work but not complete work.

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

Purpose4/5

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

The description states a specific operation ('List the workspace fixed-asset register') and adds ordering context ('ordered by number'), which clearly identifies the tool's primary purpose. It is distinguishable from asset_get or asset_search by the resource term 'register', though it does not explicitly name sibling alternatives. This is unambiguous but lacks explicit sibling differentiation.

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

Usage Guidelines4/5

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

The description provides clear context on which filters to use and how archived assets behave by default ('Archived assets are hidden unless includeArchived=true or status is given explicitly'), plus the accepted savedViewId. It does not state when to prefer asset_search or asset_get, so exclusions are absent. The guidance is actionable but not comparative.

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

asset_location_archiveA
Idempotent

Soft-archive a location (active=false): it leaves the transfer/asset pickers but stays resolvable for historical assets. Refused with location_in_use while any non-disposed asset still references it (move those assets away first). Deletion is never offered (a location must stay resolvable for the transfer history that names it). Idempotent: archiving an already-archived location succeeds and writes nothing.

NameRequiredDescriptionDefault
locationIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only supply idempotentHint and destructiveHint, but the description adds real behavioral depth: what archiving semantically means, the exact failure code (location_in_use) and precondition, why deletion is unavailable, and that re-archiving "succeeds and writes nothing." This is exactly the kind of context annotations cannot convey.

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

Conciseness5/5

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

Four front-loaded sentences with no filler: definition, side effect, failure precondition, and idempotency each get exactly one sentence. Nothing repeats and nothing is wasted.

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

Completeness4/5

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

For a mutation with no output schema, the description covers effects, failure mode, and idempotency well. The remaining gap is parameter-level guidance (workspace scoping, how to reuse idempotencyKey), which matters given zero schema coverage but is a minor omission for an otherwise well-documented operation.

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

Parameters3/5

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

Schema description coverage is 0% across 3 required params, so the description must compensate. It indirectly explains the idempotency concept that backs idempotencyKey and the target location behind locationId, but never clarifies what workspaceId scopes or how the key is used on retry. Partial compensation only.

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

Purpose4/5

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

States a specific verb and resource ("Soft-archive a location") and immediately defines the effect (active=false) and consequences (leaves pickers, stays resolvable). An agent knows exactly what the tool does. What is missing is differentiation from near-name siblings such as location_archive and asset_location_update, which the description never mentions.

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

Usage Guidelines4/5

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

Gives clear conditions: it is refused with location_in_use while non-disposed assets reference the location, and the remedy is spelled out ("move those assets away first"). It also forecloses the delete alternative ("Deletion is never offered"). It does not, however, say when to pick this over location_archive or asset_location_update.

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

asset_location_createA
Idempotent

Create a workspace fixed-asset location (a physical place assets live: a hall, a floor, a branch). code is 1-30 chars, unique per workspace case-insensitively (duplicate_code); an optional parentId nests it under another location for a light hierarchy (a foreign or missing parent is not_found). Locations are the primary filter dimension of the register and the target of asset_transfer.

NameRequiredDescriptionDefault
codeYes
nameYes
parentIdNo
descriptionNo
workspaceIdYes
idempotencyKeyYes

TDQS

A3.7/5.0
Behavior4/5

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

Beyond the idempotentHint/destructiveHint annotations, the description discloses concrete failure behaviors: duplicate_code for case-insensitive duplicate codes, and not_found for a foreign or missing parent. That is real behavioral context an agent needs before calling. It stops short of stating what a successful call returns or how idempotencyKey is honored.

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

Conciseness5/5

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

Two sentences, no filler, with the resource definition and the two constraint-bearing parameters (code, parentId) front-loaded. Every clause carries information.

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

Completeness3/5

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

For a create mutation with no output schema, the description covers creation constraints and error cases but leaves the agent guessing about the response payload and about half the input parameters. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for all 6 parameters. It documents code (1-30 chars, unique case-insensitively) and parentId (optional, nesting, error on invalid parent) well, but name, description, workspaceId and idempotencyKey get no explanation at all.

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

Purpose4/5

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

The description gives a specific verb+resource ('Create a workspace fixed-asset location') and defines the resource concretely ('a physical place assets live: a hall, a floor, a branch'). The 'fixed-asset' qualifier implicitly separates it from the inventory-side location_create/stock_location_upsert siblings, though it never names them directly.

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

Usage Guidelines3/5

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

It adds useful context that 'Locations are the primary filter dimension of the register and the target of asset_transfer', implying why and when locations matter. However, there is no explicit when-to-use versus asset_location_update or the inventory location_create, and no stated prerequisites beyond the workspace scoping.

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

asset_location_getA
Read-only

Read one fixed-asset location by id, archived or not.

NameRequiredDescriptionDefault
locationIdYes
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes safety. The description adds value by noting 'archived or not', which is a behavioral trait not captured in the annotation—it tells the agent this read will return archived locations as well. This is useful and goes beyond the structured data.

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

Conciseness5/5

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

A single, front-loaded sentence that conveys the action, resource, and key nuance (archived or not). Every word earns its place with no waste.

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

Completeness3/5

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

For a simple get with two parameters, the description is adequate but incomplete. It does not describe the return structure or any error behavior (e.g., what happens if not found). Given no output schema exists, the agent lacks information about the response format. Still, the core purpose and read-only behavior are covered.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. It does not: it makes no mention of workspaceId or locationId, their formats, or their roles. The parameter names are self-explanatory, but the description adds zero semantic value, and the coverage gap remains entirely unaddressed.

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

Purpose5/5

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

The description clearly states the verb 'read' and the resource 'fixed-asset location', and specifies it fetches one record by id, including archived ones. This distinguishes it from asset_location_list (multiple) and asset_location_create/update/archive (mutations). The scope is unambiguous.

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

Usage Guidelines4/5

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

The description implies usage when you have a specific location id and need the full record, including archived. It doesn't explicitly name alternatives like asset_location_list, but the 'by id' phrasing strongly signals the intended use case. No exclusions are given, but the context is clear enough for a simple get operation.

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

asset_location_listA
Read-only

List the workspace fixed-asset locations, ordered by code. Optional filters: active (true = only live, false = only archived), parentId (a location id, or null for the roots), and a case-insensitive search over code and name. Accepts a savedViewId (G00 saved-view seam).

NameRequiredDescriptionDefault
activeNo
searchNo
parentIdNo
savedViewIdNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

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

With readOnlyHint=true already provided, the description adds meaningful behavioral detail beyond the annotation: it specifies ordering by code, the exact semantics of the active filter (true = live, false = archived), parentId behavior including null for roots, and case-insensitive search over code and name. This helps the agent anticipate tool behavior without overstepping.

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

Conciseness5/5

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

Two sentences with zero filler. The verb-resource pair is front-loaded, and each clause adds essential information: ordering, filters, and savedViewId. No redundant phrases or needless elaboration.

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

Completeness4/5

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

For a list tool with no output schema and only a readOnly annotation, the description covers the key input semantics and ordering. It could further mention pagination or result structure, but the absence of an output schema and the straightforward nature of a list operation make this adequate. The savedViewId note is slightly cryptic but acceptable.

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

Parameters5/5

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

The input schema has 0% description coverage, so the description carries the full burden of explaining parameters. It does so effectively for all five parameters: workspaceId inferred from 'workspace', active (true/false), parentId (with null semantics), search (case-insensitive over code and name), and savedViewId (G00 saved-view seam). This fully compensates for the schema gap.

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

Purpose5/5

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

Description states a specific action ('List'), the resource ('workspace fixed-asset locations'), and a distinguishing detail ('ordered by code'). It clearly differentiates from sibling tools like asset_location_get, asset_location_create, and even location_list by specifying 'fixed-asset locations'.

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

Usage Guidelines3/5

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

The description explains the optional filters and the savedViewId seam, giving clear context for when filters might be applied. However, it does not explicitly name alternative tools such as asset_location_get or asset_list, nor does it state when not to use this tool. Usage is implied rather than explicitly guided.

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

asset_location_updateA
DestructiveIdempotent

Edit a fixed-asset location through a patch object (name, description, parentId). code is immutable through this verb. Setting a parentId that would close a hierarchy loop is refused with location_cycle; parentId null or "" clears it back to a root location. Only the fields present in patch change.

NameRequiredDescriptionDefault
patchNo
locationIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior4/5

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

Goes well beyond the annotations (idempotentHint, destructiveHint) by disclosing immutability of code, the exact error code location_cycle for hierarchy loops, and the null/empty-string convention that reparents to root. What it does not say is what happens to child locations when a parent is cleared, which is the main destructive consequence flagged by destructiveHint.

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

Conciseness5/5

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

Four dense sentences, front-loaded with the operation, then constraints and edge cases. No filler and every clause carries operational information (immutability, error code, root-clearing).

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

Completeness4/5

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

No output schema exists, and the description sensibly focuses on mutation semantics rather than return values. Given destructiveHint=true, it should have mentioned the effect on child locations or that the change is not undoable; otherwise an agent has what it needs to construct a call.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the load. It does define the patch subfields and the special parentId null/"" semantics, but the three required top-level parameters (workspaceId, locationId, idempotencyKey) are never mentioned or explained, leaving a real gap for a 4-parameter nested tool.

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

Purpose4/5

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

Specific verb plus resource ("Edit a fixed-asset location") with the editable surface spelled out (name, description, parentId). It does not, however, distinguish itself from the similarly named sibling location_update (inventory locations) or asset_location_create, so an agent could still hesitate between them.

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

Usage Guidelines3/5

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

Usage is implied through the patch semantics ("Only the fields present in patch change") and the cycle rule, which implicitly says when the call will fail. There is no explicit statement of when to prefer this over asset_location_create, asset_location_archive, or location_update.

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

asset_maintenance_log_cancelA
Idempotent

Soft-cancel a maintenance log entry entered in error (H08): it sets status=cancelled and stores a required non-empty reason. The row is NEVER hard-deleted (append-oriented, OR 957/958): a cancelled entry stays visible under the list "any" status filter for audit, and is excluded from the default completed-only list and the cost roll-up. Idempotent: cancelling an already-cancelled entry is a no-op that keeps the first reason and writes nothing. Refused with invalid_input for an empty reason and not_found for a foreign id (§H-TENANT). Posts nothing.

NameRequiredDescriptionDefault
idYes
reasonYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: the row is never hard-deleted, stays visible under the 'any' list filter for audit, drops out of the completed-only list and cost roll-up, and 'Posts nothing' (no accounting impact). It also details idempotency semantics precisely — a repeat cancel is a no-op keeping the first reason — plus the exact refusal codes invalid_input and not_found with tenant scoping.

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

Conciseness4/5

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

Front-loaded with the action and its effect, then layered with audit, list-visibility, idempotency and error behaviour — every clause carries information. It is dense and slightly cluttered by internal references (H08, OR 957/958, §H-TENANT), but nothing is filler.

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

Completeness5/5

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

No output schema exists, yet the description already states the side effects and that nothing is posted, so an agent knows what the call returns conceptually. Combined with the error cases and idempotency contract, an agent can invoke this correctly without further information.

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

Parameters4/5

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

With 0% schema description coverage, the description carries the load well: it specifies that reason is required and non-empty (enforced via invalid_input), that id is tenant-scoped (not_found for foreign ids), and that idempotencyKey yields no-op behaviour. workspaceId is only indirectly covered by the §H-TENANT reference, leaving one parameter under-explained.

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

Purpose5/5

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

States a specific verb+resource: 'Soft-cancel a maintenance log entry entered in error', and immediately defines the resulting state (status=cancelled plus stored reason). This is clearly distinguishable from sibling asset_maintenance_log_update and the many other *_cancel tools because it names the exact effect rather than just 'cancel'.

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

Usage Guidelines4/5

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

'Entered in error' gives a clear condition for when this tool is the right choice rather than an update, and 'soft-cancel' clarifies the intent vs. a hard delete. It does not explicitly name a sibling alternative (e.g. asset_maintenance_log_update for corrections) or state when not to cancel, so it stops short of full routing guidance.

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

asset_maintenance_log_createA
Idempotent

Record a completed maintenance event against a fixed asset (H08): what was done, when, by whom and at what cost. NON-POSTING: it writes ONE asset_maintenance_log row (status=completed) and posts NO GL journal, so the captured cost is descriptive TCO metadata (feeding H09), never an expense or capitalisation booking (use the J expense or OP16 capitalisation flow for that). assetId must name an asset in this workspace that is NOT archived (asset_archived; history stays readable but new entries are blocked). maintenanceType is one of corrective | preventive | inspection | calibration | upgrade | other (invalid_maintenance_type). logDate is a required ISO date no more than 30 days in the future (missing_log_date / log_date_too_far). title is 1-200 chars. Every cost field is optional, integer Rappen, >= 0 (invalid_cost, never a float); when partsCostRappen and labourCostRappen are both given, a supplied costRappen total must equal their sum, otherwise the total is derived from them. Refused with not_found for a foreign asset (§H-TENANT). Idempotent on idempotencyKey: a replay returns the original log and writes no second row.

NameRequiredDescriptionDefault
notesNo
titleYes
assetIdYes
logDateYes
costRappenNo
descriptionNo
workspaceIdYes
externalPartyNo
idempotencyKeyYes
maintenanceTypeYes
partsCostRappenNo
labourCostRappenNo
linkedDocumentIdNo
externalReferenceNo
performedByUserIdNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare idempotency and non-destructiveness; the description goes further: exactly one row with status=completed, no GL journal, cost is descriptive TCO metadata, archived assets rejected, foreign assets refused, and idempotency replays return the original without a second write. This is the key behavioral burden for a write tool and it is covered.

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

Conciseness4/5

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

Front-loaded with the core purpose and the non-posting distinction, then rules. It is dense and long, but nearly every clause adds validation or behavioral information; some parenthetical error codes could be trimmed without loss.

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

Completeness4/5

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

Given a 15-parameter write tool with no output schema, the description covers creation semantics, GL non-impact, preconditions, enums, validation and idempotency. A few optional parameters are undocumented, but the agent has enough to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 0%, so the description carries the full parameter burden, and it does so for the critical fields: assetId archive/tenant constraints, maintenanceType enum, logDate ISO + 30-day bound, title length, integer Rappen costs with sum consistency. It does not mention notes, description, externalParty, linkedDocumentId, externalReference, performedByUserId or workspaceId, so a small gap remains.

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

Purpose5/5

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

States a specific verb and resource ('Record a completed maintenance event against a fixed asset') and explicitly distinguishes itself from the GL-posting alternatives (J expense, OP16 capitalisation flow). An agent can identify scope without opening the schema.

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

Usage Guidelines5/5

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

Explicitly says when to use this tool (completed maintenance, non-posting) and names the alternatives to use for actual expense/capitalisation booking. Also states the archive precondition and tenant boundary that gate successful use.

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

asset_maintenance_log_getA
Read-only

Read one maintenance log entry by id (H08), completed or cancelled. A foreign id is not_found (§H-TENANT), never a leak of another workspace row.

NameRequiredDescriptionDefault
idYes
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description doesn't need to repeat that. It adds the error behavior: 'A foreign id is not_found (§H-TENANT), never a leak of another workspace row.' This is valuable context about error handling and tenant isolation, beyond annotations.

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

Conciseness5/5

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

Two sentences, no redundancy. The main action is first, and the error note is brief. Highly efficient.

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

Completeness3/5

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

The description covers the core purpose and error behavior. However, it doesn't clarify the meaning of workspaceId or the exact statuses that can be read (is it restricted to completed/cancelled or can it read all?). There is no output schema, so the return format is not described. For a simple get, it's mostly complete but has minor gaps.

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

Parameters2/5

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

Schema has 0% description coverage, so the description must explain the parameters. It mentions 'by id' which refers to the id parameter, but does not explain workspaceId at all. The description fails to compensate for the lack of schema descriptions, leaving workspaceId ambiguous.

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

Purpose5/5

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

Clear verb 'Read' and resource 'maintenance log entry' with scope 'by id'. Distinguishes from sibling tools like asset_maintenance_log_list (which lists multiple) and asset_maintenance_log_create (which creates). Also specifies statuses 'completed or cancelled'.

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

Usage Guidelines4/5

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

The description states the operation (read by id) and the required parameters (workspaceId and id) are evident from the schema, but it doesn't explicitly mention when to use this vs list or other alternatives. However, the name and description make it obvious that this is for fetching a single entry, so the context is clear.

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

asset_maintenance_log_listA
Read-only

List maintenance log entries (H08), newest first (by logDate then created_at). Optional filters: assetId (scope to one asset, the usual timeline read), maintenanceType, status (completed [default] | cancelled | any), fromDate / toDate (an ISO log-date window), hasCost (true = only entries with a captured cost, false = only those without), performedByUserId, and a case-insensitive search over title, description, externalParty and externalReference. Returns items, total, and totalCostRappen: the SUM of cost_rappen over the COMPLETED entries in the result (a cancelled or costless entry contributes 0), which is the asset TCO roll-up. Accepts a savedViewId (G00 saved-view seam). Read-only.

NameRequiredDescriptionDefault
searchNo
statusNo
toDateNo
assetIdNo
hasCostNo
fromDateNo
savedViewIdNo
workspaceIdYes
maintenanceTypeNo
performedByUserIdNo

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses sort order, default status behavior, the exact semantics of totalCostRappen (sum over completed entries only), and the saved-view seam. This significantly enriches the agent's understanding of the tool's behavior.

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

Conciseness5/5

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

The description is long but densely informative and well-structured: purpose and ordering first, then filters, then return semantics. Every sentence adds operational value, and the length is justified by the large parameter surface.

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

Completeness5/5

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

There is no output schema, so the description correctly explains the return shape (items, total, totalCostRappen) and the special aggregation rule. Combined with parameter semantics and behavioral transparency, the agent has enough context to invoke the tool correctly.

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

Parameters5/5

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

With schema description coverage at 0%, the description carries the full burden and does so thoroughly: each major filter is explained, including status values, date-window semantics, hasCost behavior, and the fields covered by the case-insensitive search. Only workspaceId is left implicit, which is reasonable for a required workspace-scoped parameter.

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

Purpose5/5

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

The description states a precise verb and resource ('List maintenance log entries (H08)') with explicit ordering and scope. It is clearly distinguished from related sibling tools like asset_maintenance_log_get or asset_maintenance_log_create by focusing on listing with filters.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool, including the intended asset timeline read and a default status of 'completed'. It does not explicitly name alternatives or state when not to use it, but the filter semantics and 'usual timeline read' hint provide strong practical guidance.

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

asset_maintenance_log_updateA
DestructiveIdempotent

Correct a recent maintenance log entry (H08) through a patch object: title, description, costRappen, partsCostRappen, labourCostRappen, externalReference, notes. Identity fields (assetId, logDate, maintenanceType, the performer) are immutable after create; only the descriptive/cost fields present in patch change. Refused with log_locked once the entry is older than the workspace soft-edit window (default 90 days from creation: after it only cancel is allowed, protecting the historical record), log_cancelled if the entry is already cancelled (correct it with a fresh entry, not an edit), invalid_cost for a negative or non-integer cost, and not_found for a foreign id (§H-TENANT). Posts nothing. Idempotent on idempotencyKey.

NameRequiredDescriptionDefault
idYes
patchNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the idempotentHint/destructiveHint annotations: declares which fields are immutable, the 90-day default soft-edit window, that nothing is posted to the ledger, and the exact refusal codes (log_locked, log_cancelled, invalid_cost, not_found). The overwrite semantics of 'only fields present in patch change' are consistent with destructiveHint=true.

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

Conciseness4/5

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

Front-loads the action and patch fields, then the invariants and error codes. Dense but every clause carries information; the parenthetical asides make it a single long block that could be split for scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no output schema and no annotation detail, the description covers immutability, windowing, error taxonomy, and idempotency. The only gap is what the call returns on success, which the agent must infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description carries the load and does so for the hard part: it enumerates all seven patch keys exactly matching the nested schema and explains partial-patch semantics plus the tenant scoping of `id`. It does not explain workspaceId or the expected idempotencyKey format, and the 'Rappen' cost unit is left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Correct a recent maintenance log entry (H08)') and immediately scopes it to a patch of descriptive/cost fields. It is clearly distinguishable from asset_maintenance_log_create and asset_maintenance_log_cancel, both named in the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-not conditions with alternatives: after the soft-edit window 'only cancel is allowed', and for an already cancelled entry 'correct it with a fresh entry, not an edit'. The agent has a routing rule for every blocked case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_nbv_summaryA
Read-only

A dimensional NBV / cost roll-up (H09, US-H09.7): grouped rows (key, count, sumCostRappen, sumAccumRappen, sumNbvRappen) plus a grandTotal. groupBy is category | location | status | method (cost_center is not an asset-master dimension in Phase 1: invalid_input). Non-disposed assets only by default; includeDisposed:true folds disposed assets in. Optional register filter (the asset_register_report filter shape) narrows the base set. Pure read over the asset master, §H-TENANT.

NameRequiredDescriptionDefault
filterNo
groupByYes
workspaceIdYes
includeDisposedNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, and the description reinforces this with 'Pure read over the asset master'. Beyond that, it discloses meaningful behavioral details: the default non-disposed filter, the effect of includeDisposed, and the rejection of cost_center as an invalid groupBy value. This enriches the agent's understanding of the tool's behavior beyond what annotations state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is five dense sentences with zero fluff. It front-loads the purpose ('dimensional NBV / cost roll-up'), then packs the output row fields, grouping constraints, default filtering, filter reference, and read-only nature into a compact structure. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description lists all row fields and the grandTotal, giving the agent a clear expectation of the response shape. It covers the default behavior, valid/invalid groupBy values, and the filter shape reference. It does omit detailed filter property semantics必胜, but defers to a sibling tool's filter shape, which is acceptable. The §H-TENANT and report code references may assume system familiarity but are not required for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates significantly. It defines the allowed groupBy values and marks cost_center as invalid, explains includeDisposed's default behavior, and references the asset_register_report filter shape to describe the filter parameter. WorkspaceId is left generic, which is acceptable since it is a standard parameter. While the filter properties are not individually described, the reference to a sibling's filter shape is a useful shortcut.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies this as a dimensional NBV/cost roll-up, lists the exact output row fields and grandTotal, and specifies the supported groupBy dimensions (category, location, status, method). It also explicitly calls out that cost_center is not a valid dimension, distinguishing this summary tool from other asset tools like asset_list or asset_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when a grouped NBV/cost roll-up is needed, with specific grouping options and a default excluding disposed assets. It also explains how to include disposed assets and that an optional filter can narrow the base set. However, it does not explicitly name alternative tools or state when not to use them, relying on the summary nature to imply selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_opening_balanceA
Idempotent

Seed the opening cost and accumulated depreciation of a fixed asset (H07, US-H07.5): for an asset that already exists in the real world at migration, it records the historical figures so the identity invariants and the recon report hold from the opening period. In ONE atomic transaction it posts ONE balanced GL journal via A02 (Dr the asset cost account for costRappen, Cr the accumulated-depreciation account for accumulatedDeprRappen when > 0, and Cr the offsetAccountId equity/opening account for the net book value cost minus accumulated) and writes ONE append-only asset_transaction of type=opening naming that journal, then moves the asset from draft to active with that baseline (which trips the H01 financial-field lock). offsetAccountId is required only when costRappen > accumulatedDeprRappen. Refused with not_found (foreign asset, §H-TENANT), already_acquired / already_opened (the asset already carries a financial event), invalid_input (bad date, non-positive cost, accumulated outside 0..cost), invalid_offset_account, and period_locked. Idempotent on idempotencyKey: a replay returns the original objects (asset, transaction, journalEntry) and posts no second journal and appends no second row. CONSEQUENCE: Books the asset's carried-over cost and depreciation into the opening position and locks its cost figures. If it is wrong, you reverse it; the asset is closed and you record it anew.

NameRequiredDescriptionDefault
dateYes
assetIdYes
costRappenYes
descriptionNo
workspaceIdYes
idempotencyKeyYes
offsetAccountIdNo
accumulatedDeprRappenNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the idempotent and non-destructive annotations by disclosing the atomic transaction, exact GL postings, append-only asset_transaction creation, draft-to-active state transition, H01 financial-field lock, refusal conditions, idempotent replay behavior, and reversal consequence. This is unusually rich behavioral context for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and the critical atomic-posting behavior, and most sentences add substantive information. It is dense and could be easier to scan with structured clauses, but the length is justified by the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation tool with no output schema, the description covers the key side effects, GL journal construction, asset state change, refusal modes, idempotent replay, and reversal consequence. It also implies the success return objects through the replay description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by explaining costRappen, accumulatedDeprRappen, the conditional requirement for offsetAccountId, and idempotencyKey replay semantics. It still leaves workspaceId, assetId, date, and description largely implicit, so it does not fully document all eight parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: seeding opening cost and accumulated depreciation for a fixed asset that already exists at migration. It explicitly distinguishes this from ordinary asset acquisition by describing the historical opening scenario and naming the accounting invariants it preserves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening-migration context is clear, and refusal cases (not_found, already_acquired, already_opened, invalid_input, period_locked) tell the agent when the tool cannot be used. However, it does not explicitly name sibling alternatives such as asset_acquire or set_opening_balances, so the routing guidance is implied rather than fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_reconciliation_checkA
Read-only

The HARD fixed-asset reconciliation check for a period (H07, US-H07.3), the one period-close and agents invoke. It reconciles the whole workspace at the period end (YYYY-MM) and returns { status: "balanced", accounts } when every control account nets to 0 difference, or the structured reconciliation_drift error naming the offending accounts and their sub-ledger / GL / delta amounts when any does not. Period close may hard-lock only on the balanced answer; a drift blocks it until the difference is explained or corrected through the ordinary reversing + correcting flow (the reconciliation itself posts nothing). Read-only, §H-TENANT.

NameRequiredDescriptionDefault
periodYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description reinforces this by stating it posts nothing. It adds extra behavioral context: it can hard-lock period close on balance, returns a structured error on drift, and the drift must be resolved before close. This goes beyond the annotation by explaining the operational consequence and the correction path.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but informative, front-loading the critical 'HARD fixed-asset reconciliation check' and the fact it's the one invoked. It is a bit long but each clause adds necessary detail about behavior and consequences. It could be slightly trimmed but is well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only check with no output schema, the description covers the success and error return shapes, the period format, and the impact on period close. It lacks explicit mention of required parameters but the context makes them inferable. Given the complexity of the tool and minimal schema, it is quite complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explicitly explain the parameters. However, it mentions 'period (YYYY-MM)' and 'whole workspace', implying workspaceId and period. The period format is given, which adds value, but workspaceId semantics are left vague. With 0% coverage, a 3 is appropriate as the description partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is the hard fixed-asset reconciliation check for a period, identifies the specific codes (H07, US-H07.3), and explains it reconciles the whole workspace at period end. It distinguishes itself from other asset tools by being 'the one period-close and agents invoke' and by describing the exact output on success and failure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use (period close) and what happens on a balanced vs. drift result, and mentions that a drift blocks period close until corrected through the ordinary reversing + correcting flow. It also notes the reconciliation itself posts nothing, which is a clear indication of when not to use it for posting actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_reconciliation_reportA
Read-only

The OP11 reconciliation report for fixed assets (H07, US-H07.2): one row per control account (cost and accumulated depreciation), each with the sub-ledger total (summed from asset_transaction), the posted GL balance of the same account, the delta (0 when balanced), a balanced | drift status, and the contributing-asset drill-down. Cut-off: as_of (an ISO date) takes precedence over period (YYYY-MM, whose month-end is the cut-off); with neither it is as-of today. Optional accountIds filter. A disposed asset drops out of the open totals because its disposal cleared both sides; a journal posted directly against a control account with no asset_transaction shows as drift (the detection mechanism, never auto-corrected). Read-only, §H-TENANT.

NameRequiredDescriptionDefault
asOfNo
periodNo
accountIdsNo
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses material behaviors: disposed assets drop out, direct journal postings appear as drift, and the tool never auto-corrects. It also adds the tenant scope (§H-TENANT) and the precedence logic, giving the agent a robust behavioral model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense yet efficiently structured: report definition first, then parameters, then edge casesholistically. Every sentence adds value, and the read-only note is front-loaded in the final sentence but already implied by the annotation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a report tool with no output schema, the description covers enough to call it correctly: required workspaceId (via schema), optional filters, cut-off semantics, row structure, and detection behavior. The edge cases around disposal and direct journal postings prevent false expectations, making it complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does so for asOf (ISO date), period (YYYY-MM, month-end), and accountIds (optional filter), but it omits workspaceId, which is required yet not explained beyond the schema. Still, the most ambiguous parameters are well documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific report (OP11 reconciliation report for fixed assets) and clearly states its output: one row per control account with sub-ledger total, GL balance, delta, status, and drill-down. It is immediately distinguishable from sibling tools like asset_reconciliation_check or asset_ledger_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when this read-only report is useful (drift detection) and how its cut-off is determined, with clear precedence rules for as_of vs period. It does not explicitly name alternatives or say when not to use it, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_register_reportA
Read-only

The complete, filterable fixed-asset register (H09, US-H09.1): one row per asset (number, name, category code/name, status, acquisitionDate, acquisitionCostRappen, accumulatedDeprRappen, netBookValueRappen, residualValueRappen, method, usefulLifeMonths, location, responsible, serial/barcode, lastDepreciationPeriod, disposedAt) with a totals footer (count, sum cost, sum accum, sum NBV) computed over the WHOLE filtered set, not just the returned page. filter carries status[] (default hides archived), categoryIds[], locationIds[], acquisitionYearFrom/To (YYYY), costMinRappen/costMaxRappen, responsibleUserId and a case-insensitive q over number/name/serial/barcode/notes. Optional columns subset (id/number always kept), sort ({ field, dir }) over a whitelisted column, and cursor/limit pagination (default 500, max 5000; follow nextCursor until absent). An empty match is a success ({ rows: [], zero totals, message: "no_assets_matching" }), never an error. Pure read, §H-TENANT.

NameRequiredDescriptionDefault
sortNo
limitNo
cursorNo
filterNo
columnsNo
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses many non-obvious behaviors: totals computed over the whole filtered set, not just the returned page; empty matches return success with a message; default status hides archived; pagination via cursor until absent; default 500/max 5000 limit; case-insensitive q; and pure read with §H-TENANT. This is rich behavioral context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place, moving from purpose, to output fields, to totals behavior, filters, pagination, edge case, and read-only guarantee. It is front-loaded with the report identity and scope before diving into details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers output fields, filter semantics, pagination, empty-match behavior, and the read-only nature, which is sufficient for a complex report with no output schema. It does not enumerate status values or list whitelisted sort fields, which are minor gaps given the schema has no enums, but the overall context is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description fully compensates: it explains filter semantics (status defaults, categoryIds, locationIds, acquisition year range, cost range, responsibleUserId, case-insensitive q over specific fields), columns subset behavior (id/number always kept), sort over a whitelist, and cursor/limit pagination. The only minor gap is the exact sort field whitelist values, but the field list is already enumerated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'complete, filterable fixed-asset register (H09, US-H09.1)', identifying the exact report code and stating 'one row per asset' with a full enumerated field list. It is easily distinguishable from sibling asset tools like asset_list or asset_search by its report scope and totals footer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes when this tool is appropriate: when a filterable register with totals over the whole filtered set is needed. It does not explicitly name sibling alternatives or state when not to use it, but the context is unambiguous enough for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_transaction_getC
Read-only

Read one fixed-asset sub-ledger transaction by id (H02), including the GL journal entry it posted and its source-document link.

NameRequiredDescriptionDefault
idYes
workspaceIdYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the safety profile, so the description does not need to restate that. It adds value by disclosing that the response includes the GL journal entry and source-document link, which is useful behavioral context about return content. However, it does not describe any other behavior (e.g., what happens if the ID is invalid, pagination, or rate limits), and the annotation is not contradicted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly worded sentence that front-loads the action and resource, then lists the included return data. It contains no filler or redundancy, making it highly efficient and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter with two parameters and no output schema, the description conveys the core purpose and return contents. However, it omits any explanation of the parameters and the H02 reference is left unexplained, which could confuse an agent unfamiliar with the domain. 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.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage, and the tool description does not explain what 'id' or 'workspaceId' mean or how they should be formatted. There is no guidance on the ID's structure (e.g., H02 identifier) or the workspace scope. The description fails to compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (Read), the resource (fixed-asset sub-ledger transaction), and the scope (by id). It also mentions what is included in the result (GL journal entry, source-document link), which gives a precise picture. However, it does not explicitly differentiate from sibling tools like asset_transaction_list, though the 'by id' phrasing implies a single record lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. It does not mention that this is for retrieving a single transaction when you have its ID, nor does it contrast with list or search tools. An agent would have to infer usage from the 'by id' wording, which is not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_transaction_listA
Read-only

List the financial-event history of one asset (H02), ordered oldest first: every asset_transaction row with its type, date, capitalised amount (deltaCostRappen), the GL journal entry it posted (journalEntryId) and any source-document link. Optional type filter (acquisition | additional_capitalisation).

NameRequiredDescriptionDefault
typeNo
assetIdYes
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true; the description adds valuable behavioral context: result ordering, asset scoping, the optional type filter values, and the exact fields returned. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence that front-loads purpose and scope, then packs the return fields and filter option efficiently. There is no redundant or filler wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no output schema, the description provides enough context: what is listed, for which entity, in what order, and what optional filtering exists. The absence of pagination or limit details is a minor gap but not enough to lower the score further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description partially compensates by clarifying assetId as the target asset and type as an optional filter with allowed values. However, workspaceId is not mentioned and there are no parameter-level explanations, leaving some burden unmet.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('List'), a clear resource ('financial-event history of one asset'), and details exactly what is returned (type, date, capitalised amount, journal entry ID, source-document link) and the ordering (oldest first). It is clearly distinguishable from siblings like asset_transaction_get or asset_ledger_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear that this tool is for listing financial-event history for one asset, and the optional type filter gives a selection criterion. However, it does not explicitly mention alternatives or state when not to use this tool versus sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_transaction_reverseA
Idempotent

Storniere one financial event on a fixed asset (D170): an acquisition, an additional capitalisation, an opening balance or a disposal, named by assetId and transactionId (from asset_ledger_get). In ONE transaction it posts the faithful A02 reversing entry of the event (OR 957a, dated today) and appends a compensating asset_transaction (type _reversal, the negated deltas) naming that mirror, so the register and the GL stay reconciled; nothing is edited or deleted. A reversed acquisition or opening closes the asset (archived, book value 0): the corrected purchase is a fresh asset. A reversed capitalisation lowers cost and book value. A reversed disposal returns the asset to active (or fully_depreciated at its residual) and clears the disposal date and proceeds. Refused, writing nothing: asset_disposed (reverse the disposal first), capitalisation_stands (reverse the capitalisations before the baseline), depreciation_posted naming the runs (asset_depreciation_run_reverse first, newest first; for a capitalisation only runs of its period or later count), not_reversible (a depreciation row goes with its run; a correcting row is not reversed), already_reversed naming the compensating row, invalid_transition, reason_required, period_locked when today is sealed, not_found (foreign or mismatched ids, §H-TENANT). An event whose entry a raw reverse_entry already took out (a book from before this verb) adopts that reversal and posts nothing (adopted:true). The raw reverse_entry refuses these entries (owned_by asset_transaction_reverse). Idempotent on idempotencyKey; one mirror per event whatever the key. CONSEQUENCE: Reverses a purchase, added cost, opening or disposal of the asset with a correcting entry and updates the register; the original stays. A reversed purchase closes the asset; you record it anew.

NameRequiredDescriptionDefault
reasonYes
assetIdYes
workspaceIdYes
transactionIdYes
idempotencyKeyYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (idempotentHint=true, destructiveHint=false) are consistent with the description and the description goes far beyond them: it discloses that the original is never edited or deleted, that a mirror A02 entry plus a compensating register row are posted in one transaction, the full post-state of each reversal type (asset archived, book value 0, disposal date cleared), and every refusal code (asset_disposed, capitalisation_stands, depreciation_posted, already_reversed, period_locked, not_found §H-TENANT).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the density is high-value, but it is a single sprawling sentence with deeply nested parentheticals, mixed-language jargon (Storniere, D170, OR 957a, A02, §H-TENANT), and a closing CONSEQUENCE paragraph that largely restates the opening. Information earns its place, but the packaging makes it hard to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and no annotation coverage of semantics, the description covers preconditions, per-event effects, refusal taxonomy with remediation order, idempotency, and even the adopted:true return field. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% with five bare string parameters, so the description carries the burden and largely does: transactionId is sourced from asset_ledger_get, reason is tied to the reason_required refusal, idempotencyKey is tied to the idempotency contract, and assetId is explained in the naming sentence. workspaceId is only obliquely covered through the §H-TENANT reference, so the mapping is good but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (reverses) and resource (one financial event on a fixed asset) and enumerates the exact event types covered: acquisition, additional capitalisation, opening balance, disposal. It also explicitly separates itself from the sibling reverse_entry ('The raw reverse_entry refuses these entries (owned_by asset_transaction_reverse)') and points at asset_ledger_get for obtaining transactionId.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit ordered routing rule set: reverse the disposal first, reverse capitalisations before the baseline, run asset_depreciation_run_reverse first (newest first), and use reverse_entry for everything this verb does not own. It also states the idempotency contract and the pre-existing-reversal adoption case, so an agent knows both when to call it and when to call something else.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_transferA
Idempotent

Transfer one or many active fixed assets to a new location and/or a new responsible person (custodian). NON-POSTING by design: it writes one immutable asset_transfer history row per asset (capturing the old and new location/responsible, the effective date and an optional reason) and updates each asset location_id / responsible_user_id, but changes NO financial field and creates NO journal entry. assetIds is 1..N (bulk supported, all-or-nothing); at least one of toLocationId / toResponsibleUserId must be supplied (nothing_to_transfer otherwise). Refused with location_inactive (target location archived), asset_not_transferable (any selected asset is disposed or archived, listing the offenders), or not_found (a foreign asset or location, §H-TENANT). Idempotent on idempotencyKey: a replay returns the original {transactions, assets, summary} and writes no second history row.

NameRequiredDescriptionDefault
reasonNo
assetIdsYes
workspaceIdYes
toLocationIdNo
effectiveDateYes
idempotencyKeyYes
toResponsibleUserIdNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the annotations: it explains the non-posting design, immutable history-row creation, field updates, all-or-nothing bulk behavior, error outcomes, tenant isolation, and idempotency replay semantics. These details give the agent a strong operational model for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: it states the core operation, then the non-posting behavior, then constraints and error cases. Every sentence carries useful information for correct invocation, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex bulk mutation with no output schema, the description is complete enough: it explains what changes, what does not change, the returned object shape, error cases, tenant isolation, and idempotent replay behavior. An agent has enough information to decide whether and how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by explaining assetIds as 1..N with bulk all-or-nothing behavior, the requirement that at least one target field be provided, the role of effectiveDate and reason in history capture, and the idempotencyKey replay behavior. Only workspaceId is left largely implicit, which is reasonable for a tenant-scoped tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: transfer active fixed assets to a new location and/or custodian. It also sharply defines the operation as NON-POSTING and explains that it writes asset_transfer history rows while changing no financial fields or journal entries, which distinguishes it from posting, disposal, and archive operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly specifies usage conditions: assetIds supports 1..N bulk transfers, the operation is all-or-nothing, and at least one of toLocationId or toResponsibleUserId must be supplied. It also lists refusal conditions such as inactive target locations, disposed/archived assets, and cross-tenant references. It does not explicitly name sibling alternatives, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_transfer_historyA
Read-only

List the complete transfer history of one asset (H05), ordered oldest first: every asset_transfer row with its effective date, from/to location, from/to responsible person and reason. Read-only; no financial figure is ever part of a transfer.

NameRequiredDescriptionDefault
assetIdYes
workspaceIdYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces it while adding 'no financial figure is ever part of a transfer' – an extra behavioral guarantee beyond the annotation. It also discloses ordering and included fields. No contradiction exists; the description enriches the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with the primary action front-loaded. Every phrase adds value: the scope, ordering, field list, and read-only note. No wasted words, and it is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with two parameters and no output schema, the description covers the returned fields and read-only nature. However, it omits any parameter semantics, potential pagination, or response size considerations. It is functional but leaves gaps that could matter for large histories.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the description does not explain either workspaceId or assetId. While it mentions 'one asset', it does not map that to the assetId parameter or clarify the role of workspaceId. The description fails to compensate for the lack of schema documentation, leaving parameter semantics completely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists the complete transfer history of one asset, specifies the ordering (oldest first), and enumerates the fields returned (effective date, from/to location, from/to responsible person, reason). It differentiates from related tools like asset_transfer (which likely performs transfers) and asset_transaction_list by focusing specifically on transfer history. The read-only note and exclusion of financial figures further sharpen the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving transfer history but does not explicitly contrast with alternative tools or state when to choose this over others. There are no exclusions or named siblings, though the read-only and non-financial clarifications hint at scenarios where financial tools would be inappropriate. This is adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_updateA
DestructiveIdempotent

Edit an asset through a patch object. Descriptive fields (name, description, location, responsible, serial, barcode, manufacturer, model, warranty, notes) change freely while the asset is non-terminal. The financial baseline (acquisitionDate, acquisitionCostRappen, the depreciation trio, the three GL accounts) may change ONLY while the asset is still draft: once a posted acquisition or depreciation exists, any such field in the patch is refused with financial_fields_locked and nothing is written (use a correction flow instead). A disposed or archived asset is refused with asset_terminal.

NameRequiredDescriptionDefault
patchNo
assetIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations by disclosing the lock rule, the atomicity guarantee ("nothing is written"), the exact error codes returned for each refusal class, and the terminal-state behavior. The mutation claimed is consistent with destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The governing rule (descriptive freely, financial only in draft) is front-loaded in the first sentence, and the second sentence covers refusal behavior. The long parenthetical field enumerations are dense but each item earns its place by mapping to an otherwise undocumented schema property.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, nested-patch mutation tool with no output schema and no schema descriptions, the description covers the highest-risk behavior (when writes are refused and that nothing partial is persisted). The remaining gap is return-value shape and idempotencyKey semantics, which an agent may need to interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 21 nested patch properties, so the description carries the burden; it partially compensates by grouping fields into freely-editable descriptive fields and draft-only financial fields (acquisitionDate, acquisitionCostRappen, the depreciation trio, three GL accounts). It leaves the three required top-level parameters (workspaceId, assetId, idempotencyKey) unexplained and does not resolve name mismatches such as location vs locationId or responsible vs responsibleUserId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Edit an asset through a patch object") and immediately scopes it to two named field classes, which separates it in spirit from asset_create, asset_acquire, asset_dispose and asset_transfer. It never names those siblings explicitly, so the differentiation is inferred from the field lists rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-conditions (descriptive fields while non-terminal, financial fields only in draft) and when-not conditions with the exact refusal codes financial_fields_locked and asset_terminal. It also points to an alternative ("use a correction flow instead") but does not name the specific correction tool, so the agent must still search for it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

attach_receiptA
Idempotent

Record which Beleg belongs to a bill (OR 958f: the receipt is kept for ten years, and this is what says WHICH one). A reference, not a file: file storage is E00 and A17 stores the pointer. Permitted on a posted bill, because a Buchungsbeleg is filed after the booking at least as often as before it; it is the only column a posted bill will let you change. CONSEQUENCE: Records which receipt belongs to this bill, as the voucher kept for ten years; the bill's booking does not change. If it is the wrong receipt, you attach the right one.

NameRequiredDescriptionDefault
receiptRefYes
workspaceIdYes
vendorBillIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that the bill's booking does not change, that this is the only field editable on a posted bill, and that on a wrong attach you simply attach the right one (reinforcing idempotent behavior). This is rich consequence-level disclosure an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded, but the 'CONSEQUENCE:' sentence largely restates the opening, and legal/ledger codes (OR 958f, E00, A17) add noise. Some economy is lost to redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behaviorally complete for a non-destructive pointer-set, but with four undocumented required parameters and no parameter-level guidance, an agent lacks information on what receiptRef/idempotencyKey must contain. The behavioral story is complete; the input story is not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters are required with 0% schema description coverage, yet the description never explains receiptRef, workspaceId, vendorBillId, or idempotencyKey. It only implies receipt/bill concepts through prose, leaving idempotency and workspace scoping entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Record which Beleg belongs to a bill') and immediately distinguishes itself from file storage ('A reference, not a file: file storage is E00 and A17 stores the pointer'). An agent can tell this is a pointer/link operation, not a file upload, without opening siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Permitted on a posted bill ... it is the only column a posted bill will let you change' gives a clear usage context and constraint, and the 'reference, not a file' framing steers toward file tools for actual storage. It stops short of naming the exact sibling to use for file operations, so not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

attention_listA
Read-only

Page one queue or one area of Pendenzen: the same providers, the same capability filter and the same collapse and ranking as attention_summary, so the two faces never describe a queue differently. Returns { computedAt, items:[AttentionItem], nextCursor?, failed:[queueId] }. Filter by queueId (a single queue), area ('bank' | 'sales' | ...), or urgency ('overdue' | 'due' | 'open'); page with limit (default 20) and the opaque cursor from a prior nextCursor. A denied queue is absent, a thrown provider is named in failed[], and nothing here clears, dismisses or approves anything: every AttentionItem carries its decisionOptions[] (the owning surface's exits as existing write verbs with their fixed input and per-item idempotencyKey, see attention_summary), its suggestedInvoiceId, reasonCode/reasonKey and consequenceKey/consequence, and a deepLink descriptor into its owning surface for the hard case. Reads only. THE WHOLE LIST IN SECTIONS (D178): pass grouping ('by_area' | 'by_kind') and the answer is instead { computedAt, grouping, visibleQueues, total, incomplete, failed, approvalBatchMode, sections:[{ key, count, queues, items, nextCursor? }] } over EVERY item (never a top-n): by_area sections bank, accounting, sales, system (bank first; inside bank the Vorschläge, then the waiting bank lines, then the rest by urgency); by_kind sections approve (Vorschläge), do (work a person carries out), note (to look at). Every item carries count (the units it stands for: 1, or N for an aggregate row such as one bank account's waiting lines), area and kind; a section's count is the units of all its rows; total is the sum of the sections and equals attention_summary.total for the same caller. limit is the page size per section (default 25); a section with more rows carries nextCursor, and { grouping, section, cursor } answers that one section from there. approvalBatchMode is the workspace setting attention.approval_batch_mode (tick | single | all_with_confirm), how the Studio approves several bank Vorschläge: each approval is still one approve_drafted_action call, and only a row with batchable: true (a decision on a bank line: book_bank_line, ignore_bank_line, confirm_match; never a changed one) is ever batched. A Vorschlag that names a bank line carries that line's signed amountMinor (credit positive, debit negative), its currency and subtitleParams.date/counterparty/target/targetKind, but only for a caller who may read the bank (read_sales); a batchable one carries posts: true when approving it mints a journal entry (a booking to accounts or by a Buchungsregel, a settlement, an unpaid payment run) and posts: false when it books nothing (a line set aside, a match to an existing entry). A Vorschlag whose records changed since the proposal cannot be approved: it carries changedSinceProposal and kind do, and a stale one (voided by an approval attempt) stays listed with stale: true while its bank line is still open, its one exit the link to that line.

NameRequiredDescriptionDefault
areaNo
limitNo
cursorNo
queueIdNo
sectionNo
urgencyNo
groupingNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, and the description adds substantial behavioral context beyond that: denied queues are absent, thrown providers appear in failed[], nothing is mutated, every item carries decisionOptions and a deepLink, grouping returns complete sections rather than a top-n, limit is per-section, stale items remain listed, and approvalBatchMode/batchable/posts rules are defined. This is far richer than the annotation alone and is consistent with 'Reads only.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is information-dense but delivered as a single sprawling block with nested parentheticals, German terms and unbroken sentences, making it hard to scan. It front-loads the purpose, but the sheer length and lack of structure mean much of the value is obscured rather than concisely presented.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a complex tool with no output schema, minimal annotations and 8 undocumented parameters, the description supplies return shapes for both flat and grouped modes, failure semantics, pagination behavior, edge cases such as changedSinceProposal and stale items, and approval batching rules. An agent has everything needed to call it correctly, even if the presentation is dense.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 8 parameters, so the description carries the full burden and largely meets it. It gives semantics and example values for queueId, area, urgency, cursor, limit (defaults 20 and 25 per section), grouping (by_area/by_kind), and section with cursor pairing; only workspaceId is not described, which is a minor omission relative to the overall coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb ('Page') and resource ('one queue or one area of Pendenzen') and explicitly ties itself to attention_summary so an agent can distinguish the two. The only friction is that 'Pendenzen' is domain jargon left undefined, and the rest of the description is so dense that the core purpose takes effort to extract.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the paging, filtering and grouping instructions, and it says the two faces (attention_list and attention_summary) never describe a queue differently. However, it never explicitly says when to use this tool versus attention_summary, nor does it state exclusions or prerequisites; the routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

attention_summaryA
Read-only

Pendenzen (the attention hub): everything waiting for a decision from the caller, in ONE call, composed live from the module queues the product already owns and never cached (pure read, G15 posts nothing and owns no tables). Returns { computedAt, visibleQueues, total, incomplete, queues:[{queueId, area, count, topUrgency}], top:[AttentionItem], failed:[queueId] }. 'top' is the ranked, same-entity-collapsed leading rows the human screen shows (urgency overdue>due>open, then a fixed queue rank, then since), so an agent and the screen read one payload. Each queue's 'count' is a true COUNT, never a truncated list length. HONESTY CONTRACT an agent may quote: a queue whose read capability the caller lacks is ABSENT from queues[] and top[] entirely (not a zero); a provider that throws is NAMED in failed[] with incomplete:true and contributes no count and no row; and 'total' is null (never 0) when visibleQueues is 0, because an actor told nothing was not told a total. topLimit defaults to 5. Each queues[] row also names its kind ('approve' | 'do' | 'note', D178). Registered queues: agent_action_bank (D178: pending Vorschläge whose drafted verb belongs to the bank, e.g. book_bank_line, ignore_bank_line, the payment and statement verbs -> /agent, area bank), agent_action (every other pending Vorschlag -> /agent, area system), qr_match (A21 unmatched incoming credits -> /reconciliation), review_flag (A25 flagged postings -> /journal), dunning_run (A15 proposed Mahnläufe -> /dunning), checklist_items_due (G22 checklist items due -> /checklisten), bank_activation (EBICS steps before the bank is ready: send INI/HIA, sign the INI letter -> /bank-accounts) bank_keys_review (D143, the bank answered HPB: compare and confirm the bank keys -> /bank-accounts), bank_fetch_failed (D150, the latest automatic statement fetch failed and will not be retried that day, with the bank's code -> /bank-accounts), bank_statement_gap (D150, day-end statements are missing between two in the books, or a downloaded one waits behind a gap; the item names the numbers, the days and whether money is missing -> /bank-accounts) and bank_lines_waiting (D150, bank lines that need a person, per Bankkonto, without those a pending Vorschlag already names -> /bank). THE ROW CARRIES ITS DECISION (F-01): each AttentionItem names the exits its owning surface offers as decisionOptions[] ({id, verb, labelKey, role, input, humanConfirm?, reasonField?, capability?, deepLink?}), where verb is an EXISTING write (apply_qr_match, override_qr_match, approve_drafted_action, reject_drafted_action, issue_dunning_run, approve_entry, confirm_statement_gap) and input is the whole fixed input beyond workspaceId incl. a deterministic per-item idempotencyKey (replay-safe: call it twice, it writes once); plus suggestedInvoiceId (A21's live-scored invoice, null when none), reasonCode/reasonKey (why it is pending), consequenceKey/consequence (the D118 C4 sentence of the write from the dial map; null when the verb is not dial-governed) and proposedBy (the raw actor id of the proposer or reviewer, for the self-approve check) with proposedByKind ('agent' | 'studio' | 'member' | 'unknown') and proposedByName (a member's display name, else null), so a surface names the actor in words and never prints an id. The hub mints no verb and clears nothing itself: an agent acts by calling the option's verb with its input, under that verb's own gate and dial.

NameRequiredDescriptionDefault
topLimitNo
workspaceIdYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond readOnlyHint=true: it states the tool is never cached, posts nothing, owns no tables, and defines an 'honesty contract' for absent queues, failed providers, and null totals. It also discloses that topLimit defaults to 5 and that the hub mints no verbs, giving an agent unusually rich operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening is front-loaded and purposeful, but the description is massively overlong, with an exhaustive queue registry and dense internal references (G15, D178, A21, D150, F-01). Much of that detail is valuable behavioral context, but it is not appropriately sized for a tool definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description compensates thoroughly by specifying the return shape ({ computedAt, visibleQueues, total, incomplete, queues, top, failed }), queue semantics, decisionOptions contents, and honest edge cases. An agent has enough information to call it and interpret the response correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain that topLimit defaults to 5 and implies workspaceId is the scoping input, but it never describes workspaceId explicitly or clarifies any other input semantics for the tool itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific resource and scope: 'Pendenzen (the attention hub): everything waiting for a decision from the caller, in ONE call.' It is easy to tell this is a live-composed attention summary, but it never names or distinguishes the sibling attention_list, so an agent cannot compare the two from this text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is strongly implied by 'everything waiting for a decision from the caller' and the explanation that an agent acts by calling the option's verb, but there is no explicit when-to-use, when-not-to-use, or alternative routing. The nearby attention_list sibling is not addressed, leaving the agent to infer which tool to call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

balance_sheetA
Read-only

Bilanz (balance sheet) as of a date, grouped into the FIRST LEVEL of OR Art. 959a: Umlaufvermögen and Anlagevermögen on the Aktiven, kurzfristiges Fremdkapital, langfristiges Fremdkapital and Eigenkapital on the Passiven, each section carrying its statutory heading in de/fr/it/en, plus one residual section per side (the "weitere Positionen" of OR Art. 959a Abs. 3) so no account can be dropped. Under each section the accounts are listed individually, ordered by account number. Every line is positive on its own side. The running result IS carried as an Eigenkapital position (OR Art. 959a Abs. 2 Ziff. 3 lit. f and lit. g), which is what makes the statement foot before a year-end close has run. WHAT IT IS NOT: the statutory minimum structure. Twenty-four individual sub-positions are prescribed "einzeln und in der vorgegebenen Reihenfolge" (flüssige Mittel, Forderungen aus Lieferungen und Leistungen, aktive Rechnungsabgrenzungen, and so on) and are not modelled: only the seven groupings above are, with raw account lines under them. The two Absätze that prescribe those 24 are OR Art. 959a Abs. 1 and OR Art. 959a Abs. 2, and A08 reaches the grouping level of each and stops there. On the shipped Kontenrahmen KMU the account numbers happen to ascend in the statutory order, so the output looks right by coincidence; on a renamed or renumbered chart it names none of the required positions and may order them arbitrarily, and no reconciliation flag can see the difference because the statement still foots either way. So do not report this output as OR-conformant, as the minimum structure, or as ready to file. Pass compareTo={asOf:'YYYY-MM-DD'} for the prior-date column. This is the filed statement, so it accepts no alternate grouping.

NameRequiredDescriptionDefault
asOfYes
compareToNo
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description richly discloses behavior: grouping level, positive lines, running result as Eigenkapital, foots before year-end close, and the limitation that on renamed charts the ordering may be arbitrary with no reconciliation flag to detect it. This goes far beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense, with each sentence carrying substantive detail. It is front-loaded with the purpose and structured with 'WHAT IT IS NOT' and a clear instruction for compareTo. While verbose, it avoids fluff and all content is relevant to correct usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and lack of output schema, the description fully describes the output structure (sections, headings, account lines), the running result behavior, and the compareTo feature. It also covers limitations that could affect interpretation. 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It explains the compareTo parameter's purpose (prior-date column) and implicitly clarifies asOf as the report date. WorkspaceId is self-evident. It adds meaning for compareTo, which is the least obvious parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool produces a balance sheet as of a date, grouped into specific OR Art. 959a categories with statutory headings and residual sections. It clearly distinguishes the output from the statutory minimum structure, making its purpose unambiguous and differentiating it from a generic report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides context for when to use the tool: 'This is the filed statement' and instructs to pass compareTo for a prior-date column. It also explicitly cautions against reporting the output as OR-conformant, which is a clear when-not-to-use. However, it does not explicitly compare to sibling tools like trial_balance or income_statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bank_channel_connectA
DestructiveIdempotent

Open or advance a bank channel, EBICS 3.0 (H005) by default or the managed bLink rail with channelKind='managed_blink' (A37). Human only: pass confirm=true (P8); never fired by an automation rule. EBICS, keyed to the bank contract (host, partnerId, userId), never an account: the routed accounts are checked first (camt054_lines_refused; a sandbox or demo workspace is trial_workspace_refused; one live connection per subscriber in the database, live_connection_exists), then HEV (a host without H005 is unsupported_ebics_version), then three RSA 2048 key pairs with self-signed X.509 certificates are generated locally, the electronic-signature private key is dropped at once, the connection and the INI letter (the certificate hashes to sign and post) are filed, and INI and HIA are sent as two legs. The answer is pending_bank_activation, ini_sent (a lost answer: call again with connectionId to resend only the unconfirmed leg), or a refusal in words: init_refused (wrong partner or user ID, H005 not enabled, or already initialised), certificate_refused, key_exchange_refused. With connectionId: resends unconfirmed legs, runs HPB, and without confirmBankKeys returns the bank's key and certificate hashes for the owner to compare with ZKB's published sheet; with confirmBankKeys=true and expectedBankKeyHashes set to exactly that reviewed set it pins them and activates, only if a fresh HPB equals them (else bank_keys_mismatch, nothing pinned). The same reviewed confirm resumes a bank_keys_changed or locally blocked channel. Under till up TILL checks once a day by itself whether the bank has activated the access (bank_channel_status activation.bankReady, D143); the comparison and the confirm stay the human's. Never returns key material; posts nothing. CONSEQUENCE: Opens a channel to your bank: TILL makes the keys and sends the bank its setup, then statements (on the managed rail also payments) flow over it. What the bank got can't be recalled; you can retire or block the channel.

NameRequiredDescriptionDefault
hostNo
scopesNo
bankRefNo
confirmNo
keyLengthNo
channelKindNo
workspaceIdYes
connectionIdNo
idempotencyKeyYes
confirmBankKeysNo
routeBankAccountIdsNo
expectedBankKeyHashesNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond idempotentHint/destructiveHint: discloses the pre-flight checks (camt054_lines_refused, trial_workspace_refused, live_connection_exists), key generation (three RSA 2048 pairs, ES key dropped at once, INI letter), the two-leg INI/HIA send, and each refusal code in words. The irreversibility warning ('what the bank got can't be recalled') aligns with destructiveHint=true rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the human-only rule are correctly front-loaded, but the body is a single dense run-on paragraph with error codes and tool references packed into parentheses, which makes it hard to scan. Most content earns its place for a tool this complex, yet the lack of structure costs it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description supplies the return vocabulary itself (pending_bank_activation, ini_sent, init_refused, certificate_refused, key_exchange_refused, bank_keys_mismatch) and the resume semantics. Combined with the confirmation workflow and the HPB/ZKB comparison rule, an agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage across 12 parameters, the description carries real weight: it defines confirm, channelKind, connectionId, confirmBankKeys, expectedBankKeyHashes (and the exact-match pinning rule), and implicitly the host/partnerId/userId triple and routeBankAccountIds. keyLength, scopes, bankRef, and idempotencyKey remain unexplained, so it falls short of full compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Open or advance a bank channel') and enumerates the two rails (EBICS 3.0 H005 by default, managed bLink via channelKind='managed_blink'). This clearly separates it from bank_channel_status and bank_channel_disconnect, which read rather than open/advance the channel.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the human-only precondition (confirm=true, never fired by an automation rule) and distinguishes two invocation modes: initial open vs. resume/resend with connectionId. It also points to bank_channel_status activation.bankReady for the daily check, but never names bank_channel_disconnect as the retire/block alternative, leaving one routing decision implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bank_channel_directoryA
Read-only

Look up a Swiss bank in TILL's static, in-package EBICS directory for the connect wizard (A36): substring or BIC match over the curated set, returning each bank's names, BIC, the marketing name of its EBICS channel, the segments it offers EBICS to, where to post the signed INI letter, known protocol quirks, and an EXPLICITLY UNVERIFIED fee note (verified:false always). The per-contract host URL and Host ID are null in v1 (the bank issues them on your signed EBICS contract; enter them in the manual fields). Reads static data only: opens NO socket, needs no idempotency key, is never a gate on the ceremony. An empty query returns the whole set; no match returns an empty array, not an error.

NameRequiredDescriptionDefault
queryNo
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses extensive behavioral traits: it 'opens NO socket,' 'needs no idempotency key,' is never a ceremony gate, always returns verified:false on fee notes, returns null host URL/Host ID in v1, and defines edge-case behavior (empty query returns whole set; no match returns empty array, not an error). This far exceeds what the annotation provides and contains 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause carries distinct, decision-relevant information—no filler. The core lookup purpose is front-loaded, followed by return-content details, data caveats, behavioral guarantees, and edge cases in logical order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and 0% parameter coverage, the description fully covers return content (names, BIC, channel name, segments, INI letter posting, quirks, fee note), edge-case behavior, network behavior, and where this fits in the EBICS ceremony. An agent has everything needed to invoke it correctly; only workspaceId semantics are left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates substantially for the query parameter by defining its matching semantics ('substring or BIC match') and empty-query behavior. The required workspaceId parameter is not explained at all, which is a minor gap given it is the one required field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Look up a Swiss bank in TILL's static, in-package EBICS directory' with a defined matching mode ('substring or BIC match'). It also distinguishes itself from sibling connection tools by framing this as a pre-ceremony lookup for the connect wizard (A36) and explicitly noting it 'is never a gate on the ceremony,' separating it from bank_channel_connect, bank_channel_status, and bank_sync.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is for the connect wizard (A36), reads static in-package data, and informs manual entry of host URL and Host ID once a signed contract exists. However, it stops short of explicitly naming alternatives or stating when-not-to-use this tool versus sibling tools like bank_channel_connect or bank_channel_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bank_channel_disconnectA
DestructiveIdempotent

Retire or block an EBICS bank channel (P8-gated: pass confirm=true or enable the approval dial). retire is the local, terminal close: the channel flips to retired, its order history stays readable, and its keys are destroyed. block is local only: TILL stops using the channel at once and sends nothing to the bank (a block at ZKB is the owner's phone call); the reviewed bank-key confirm through bank_channel_connect is the way back. Both idempotent. Posts nothing. CONSEQUENCE: Retiring ends this bank channel and destroys its keys for good; blocking only stops TILL using it. Its order history stays readable, and a retired channel cannot reopen: connecting again makes new keys.

NameRequiredDescriptionDefault
modeYes
confirmNo
workspaceIdYes
connectionIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare idempotency and destructiveness, but the description adds substantial operational detail beyond them: retiring flips the channel to retired, destroys its keys permanently, and leaves order history readable; blocking only stops TILL from using the channel and sends nothing to the bank. It also discloses that a retired channel cannot reopen and that reconnecting creates new keys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and dense with useful information, but the final CONSEQUENCE sentence repeats points already made earlier: key destruction, order-history readability, and the distinction between retiring and blocking. The repetition reinforces the risk but costs space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, approval-gated bank-channel operation with no output schema, the description covers the essential context: both modes, irreversibility of retire, local-only scope of block, idempotency, approval gating, and the reconnect path. An agent has enough to choose the correct mode and understand the consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description has to carry the full burden. It explains `confirm` and the two meaningful values of `mode` well, but it leaves `workspaceId`, `connectionId`, and `idempotencyKey` undocumented beyond their obvious names, so it only partially compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb-resource pair ('Retire or block an EBICS bank channel') and immediately splits the two modes into distinct behaviors. It also names the sibling tool `bank_channel_connect` as the recovery path, so the agent can distinguish this tool from related bank-channel operations without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit preconditions ('P8-gated: pass confirm=true or enable the approval dial') and clear when-to-use guidance for each mode: retire is the terminal local close, block is an immediate local stop with no bank communication. It also directs the agent to `bank_channel_connect` for reconnecting and clarifies that a ZKB-side block is handled outside TILL.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bank_channel_statusA
Read-only

Read EBICS channel health: per channel the connection state, the INI and HIA legs, the keystore state, the pending INI letter, per routed account the newest statement in the books (number, year, date, closing balance) and lastNumberJump (the numbers skipped right before the newest statement the channel imported, null once they are in the books or the next statement followed normally), every downloaded statement still waiting with the reason it waits (a gap, before the feed start, an unrouted IBAN, a split statement) and the facts it names, the last sync, whether a fetch is running right now (syncInProgress, syncStartedAt: one fetch per connection at a time, D142), the daily automatic fetch (autoSync: mode, atTime, nextAt, the last automatic attempt, attemptsToday), the short name of the bank (bankName), the daily activation check while ZKB has not activated the access yet (activation: checking, lastCheckAt (the last HPB the bank answered), lastAttemptAt, nextCheckAt, lastOutcome, bankReady; D143), and the recent order log. When activation.bankReady is true the bank has answered and the keys must be compared: tell the human to open the bank accounts screen (/bank-accounts) and compare the bank key hashes with the sheet the bank published, then confirm (bank_channel_connect with confirmBankKeys). That comparison is an act of the human; never confirm the keys yourself. Optionally scoped to one bank account, or the order log filtered by status (a saved view applies its stored status filter; an explicit status wins). Read-only.

NameRequiredDescriptionDefault
statusNo
savedViewIdNo
workspaceIdYes
bankAccountIdNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already covers the safety profile, and the description still adds substantial behavior: one fetch per connection at a time (D142), the daily activation check cadence (D143), what lastNumberJump null means, and the hard rule that key confirmation is a human act. The valuable content is there, but it is buried in an undifferentiated run-on enumeration.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Nearly the entire description is one enormous comma-chained sentence listing return fields, with no paragraph breaks or front-loaded summary beyond the first clause. Much of it is justified by the absence of an output schema, but the packing is so dense that key operational rules (D142, never self-confirm keys) are visually indistinguishable from field enumerations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, explaining the return surface is required and it does so exhaustively, plus it covers the fetch-concurrency rule, activation polling, and the human-in-the-loop confirmation step. The remaining gap is the undocumented required workspaceId; the D-number references also assume context the agent may not have.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load — and it largely does: bankAccountId scoping, status for the order log, and the precedence rule that an explicit status beats a saved view's stored filter (a genuinely useful semantic not expressible in the schema). workspaceId, the one required parameter, is never mentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: 'Read EBICS channel health', then enumerates the facets returned (connection state, INI/HIA legs, keystore, pending statements, autoSync, activation, order log). The purpose is unmistakable, but the enumeration swamps the signal and never explicitly contrasts with nearby siblings such as bank_channel_directory, get_bank_account or list_bank_statements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete conditional guidance for the activation.bankReady branch: tell the human to open /bank-accounts, compare key hashes against the bank's published sheet, then confirm via bank_channel_connect with confirmBankKeys — and explicitly forbids the agent from confirming itself. Scoping rules (one bank account, order log filtered by status) are also stated. Missing is any general 'prefer this over X when…' routing versus the other bank tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bank_csv_previewA
Read-only

Read a bank CSV the way import_bank_statement would, writing nothing: the detected encoding, separator and header row (a preamble above the header is skipped), the headers, the first 20 rows, and the column mapping it would use (the one you pass, else the Bankkonto's saved one, else a guess from the header words, with mappingSource given | saved | guessed, and guessedMapping always). missing names the required targets the mapping leaves unmapped (bookingDate; amount meaning a signed amount column or debit/credit columns), unknownColumns the mapped headers the file lacks, and blocking says it in one sentence; when the mapping reads the file, sample gives the first rows as they would import (date, value date, signed amount in Rappen, currency, text, counterparty) or the reason a row would be skipped. A mapping is { columns: { bookingDate, valueDate, amount | debit/credit, currency, text, counterparty, counterpartyIban, reference, instructedAmount, instructedCurrency, rate, fee: }, dateFormat: dd.mm.yyyy | dd.mm.yy | yyyy-mm-dd | dd/mm/yyyy, decimalSeparator?: . | ,, headerRow?, delimiter?: semicolon | comma | tab, encoding?: utf-8 | windows-1252 }. Send the file as content or contentBase64.

NameRequiredDescriptionDefault
contentNo
mappingNo
workspaceIdYes
bankAccountIdYes
contentBase64No

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=true; the description goes much further by enumerating exactly what is returned (encoding, separator, skipped preamble header, headers, first 20 rows, mapping plus mappingSource and guessedMapping), the deterministic fallback order for the mapping (passed > saved Bankkonto mapping > header guess), what missing/unknownColumns/blocking mean, and 'guessedMapping always'. That is substantial behavioral disclosure beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause and virtually every clause carries needed information (output fields, mapping fallbacks, mapping spec). However, the mapping grammar is packed into a long comma-chained run-on that is hard to scan; bullets or shorter sentences would tighten it without losing content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must explain returns and it does so exhaustively, including the resolved sample rows, mapping provenance fields, and the blocking summary. Combined with readOnlyHint, an agent has enough to call this correctly and interpret the result; only the workspace/bank-account identifiers remain undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden, and it fully specifies the hard parameter: the mapping object's columns, dateFormat, decimalSeparator, headerRow, delimiter, encoding, and the amount vs debit/credit alternative, plus the content/contentBase64 choice. The two required parameters, workspaceId and bankAccountId, get no explanation in either the schema or the description, which keeps it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus a precise scope: 'Read a bank CSV the way import_bank_statement would, writing nothing.' It explicitly positions itself against import_bank_statement (same parsing, no write), so an agent can tell it apart from the actual import and from get/set_bank_csv_mapping without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The framing ('the way import_bank_statement would, writing nothing', plus the missing/blocking/unknownColumns outputs) makes the pre-import validation use case clear without naming the alternative tool's name outright. It does not state explicit exclusions (e.g. don't use for already-stored statements, use list_bank_statements instead), so it falls short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bank_syncA
DestructiveIdempotent

Fetch the new day-end camt.053 statements (version 08) over an active EBICS channel, on demand (the Studio's Kontoauszüge abrufen, or when the owner asks) and, under till up, once a day by the scheduler (D142, set_bank_sync_schedule); never by an automation rule. Persists the bank's container and every new statement as documents first, then imports each one through import_camt by its account IBAN, then sends the bank's receipt, so nothing fetched is lost and nothing counts twice. On an EBICS-fed account a statement is imported only as the successor of the newest statement in the books or as the filler of a hole, by number and balances; a copy of one already there is already_imported; others wait (gap_refused, before_feed_start, not_day_end_statement, unsupported_multipage_statement, unmatched_account) and are retried from the stored bytes at every sync, or are refused for good (overlap_refused). A statement whose number skips some but whose balances chain imports with notice statement_number_jump and jump {after, statement, skipped} naming the missing numbers, which the owner imports by hand if they exist. Each call needs a fresh idempotencyKey; dateRange is refused (unsupported_date_range). Answers download_refused (not_granted, busy, too_large, other, with the bank's raw code), untrusted_response, bank_keys_changed or channel_unreachable in words. One fetch per connection at a time: a second call while one runs answers sync_in_progress. With no transport wired it reports needs_bank_transport. Posts nothing. CONSEQUENCE: Fetches new day-end statements from your bank and imports them; each new bank line waits in the bank inbox and nothing is booked. The bank gets its receipt, and an import cannot be taken back.

NameRequiredDescriptionDefault
dateRangeNo
workspaceIdYes
connectionIdNo
bankAccountIdNo
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: persistence order (documents first, then import, then receipt), dedup rules (already_imported, gap_refused, before_feed_start, overlap_refused), concurrency (sync_in_progress), transport preconditions (needs_bank_transport), and the fact that the bank receives a receipt and the import cannot be taken back. That consequence clause is exactly the context destructiveHint=true alone does 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its triggers, and nearly every clause carries operational weight (status codes, dedup outcomes, retry behavior). It is a single dense paragraph with heavy parenthetical enumeration, which hurts scanability, but there is little filler to cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and a nested dateRange object, the description enumerates the possible outcomes (download_refused variants, untrusted_response, bank_keys_changed, channel_unreachable, sync_in_progress, the statement-level statuses) and states that nothing is booked. An agent has enough to call it and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage across 5 parameters, the description compensates for only some of them: idempotencyKey ('each call needs a fresh idempotencyKey') and dateRange ('dateRange is refused (unsupported_date_range)') are well explained, and account IBAN semantics surface via unmatched_account. workspaceId, connectionId, and bankAccountId are never described, leaving three required/optional identifiers to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource — fetching new day-end camt.053 (version 08) statements over an active EBICS channel — and immediately distinguishes itself from siblings: import_camt is the downstream importer, set_bank_sync_schedule is the scheduler, and automation rules are explicitly excluded.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggers (Studio's Kontoauszüge abrufen, owner request, or the till-up daily scheduler D142) and an explicit exclusion (never by an automation rule). It also states the relationship to import_camt, which the agent would otherwise have to guess between.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billing_generate_invoiceA
Idempotent

Rechnungsentwurf aus Zeit erstellen (B02): turns the selected approved+billable+unbilled entries (one contact, one currency) into an A11 invoice DRAFT and flips them approved to billed with invoice_line_id set, in one transaction. Delegates to A10 createDocument (P3: no journal entry, no VAT amount, no total minted here; A11 to A02 post at issue). groupBy (entry|phase|project|day) shapes the lines; each line is qty 1 with the group value as its price, so preview equals line equals WIP to the Rappen. Refuses empty_selection, mixed_contacts, currency_mismatch, already_billed (strict, no partial invoice); idempotent on idempotencyKey. Always stops at a draft (P8); gated on A24 billing.generate.

NameRequiredDescriptionDefault
actorNo
groupByNo
contactIdYes
throughDateNo
workspaceIdYes
timeEntryIdsYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses the key side effect: entries are flipped from approved to billed with invoice_line_id set in one transaction. It also explains delegation to createDocument, absence of journal/VAT/total creation, strict no-partial behavior, idempotency on idempotencyKey, draft-only stopping point, and the billing.generate gate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and information-dense with little wasted text. Some internal codes and the mixed German/English opening add avoidable friction, but the content is appropriately sized for a complex financial mutation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema and no schema parameter descriptions, it covers purpose, side effects, transactionality, error behavior, grouping, idempotency, and gating well. It still omits return-value details and a few parameter semantics, so it is strong but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It explains groupBy values, idempotencyKey behavior, and the one-contact/one-currency constraint on the selected time entries, but it does not explain actor, workspaceId, or throughDate, leaving several parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it turns selected approved+billable+unbilled time entries into an invoice DRAFT. It also distinguishes the outcome from later issue/posting behavior by saying it always stops at a draft and that A11 to A02 post at issue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear preconditions: approved, billable, unbilled entries from one contact in one currency, and it lists refusal cases such as empty_selection, mixed_contacts, currency_mismatch, and already_billed. However, it does not explicitly name sibling alternatives such as billing_unbilled_preview, billing_wip_report, or issue_invoice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billing_release_timeA
Idempotent

Zeit aus einem Entwurf freigeben (B02): reverts the entries backing a DRAFT invoice (by invoiceId or lineIds) from billed to approved and clears invoice_line_id, returning them to the unbilled pile and WIP. Called by A11 cancel and directly. Refuses a finalised invoice with invoice_not_draft (corrections there are A11 credit notes); releasing already-released lines is a no-op (idempotent). Gated on A24 billing.generate.

NameRequiredDescriptionDefault
actorNo
lineIdsNo
invoiceIdNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the annotations: exact state transition, clearing of invoice_line_id, refusal of finalised invoices, no-op behavior for already-released lines, and gating on A24 billing.generate. This is consistent with idempotentHint=true and destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with the state change, error condition, and idempotency behavior. The German label and internal codes like B02, A11, and A24 add some clutter but do not obscure the main operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, it covers the core behavior, refusal case, idempotency, and permission gating well. Its main gap is that it does not explain the required idempotencyKey, workspaceId, or actor parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains invoiceId and lineIds as alternative targeting inputs, but says nothing about workspaceId, idempotencyKey, or actor, including the required idempotencyKey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: it reverts entries backing a DRAFT invoice from billed to approved, clears invoice_line_id, and returns them to the unbilled pile/WIP. It also distinguishes the operation from finalised-invoice corrections, which belong to A11 credit notes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear invocation context ('Called by A11 cancel and directly') and an explicit when-not case: finalised invoices are refused with invoice_not_draft, and corrections are handled by A11 credit notes. It does not name a concrete sibling tool as the alternative, and the A11/A24 references are internal codes rather than tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billing_unbilled_previewA
Read-only

Unverrechnete freigegebene Zeit anzeigen (B02): the approved, billable, not-yet-billed time_entry pile (B01), grouped contact then project then phase, each entry valued round-once (P2) from its snapshotted rate and every subtotal an integer sum. Filter by contactId, projectId, a throughDate cut on started_at, or a groupBy hint. An empty pile is { groups: [], totalRappen: 0 }, a healthy state. B02 invoicing input; gated on the A24 billing.read capability.

NameRequiredDescriptionDefault
groupByNo
contactIdNo
projectIdNo
throughDateNo
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes non-mutation, and the description adds meaningful behavior beyond that: empty-result shape, grouping order, snapshot-rate valuation, integer subtotals, and an authentication gate. It does not disclose pagination or non-empty entry fields in detail, but the added context is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with the core purpose, but it is a long run-on mixing German and English and relies on opaque internal codes (B01, B02, P2, A24). Every clause adds information, yet the structure hurts readability and could be clearer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description covers purpose, grouping, valuation, filtering, empty response, and permission gate, which is a strong amount of context. Missing concrete groupBy values, date format, and non-empty response details mean an agent still has to infer part of the contract.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and no enums, the description does add semantics for contactId, projectId, throughDate, and groupBy, including that throughDate cuts on started_at. However, workspaceId is undocumented, groupBy allowed values are left as a vague 'hint', and date format / filter combination behavior is not specified, so it only partially compensates for the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete operation ('anzeigen' / preview), identifies the resource ('approved, billable, not-yet-billed time_entry pile'), and specifies the grouping order. The phrase 'B02 invoicing input' plus the 'not-yet-billed' qualifier clearly separates it from related billing actions like billing_release_time or billing_generate_invoice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it is the read-only preview feeding B02 invoicing, gated on the A24 billing.read capability, and is intended for approved, billable, unbilled time. It does not explicitly name alternatives or exclusion conditions such as 'use billing_wip_report for WIP', so it stops short of full when/not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billing_wip_reportB
Read-only

WIP-Bericht der angefangenen Arbeiten (B02): approved-but-unbilled value as of a date, per project and its client, purely (P5). wipRappen is the integer sum of round-once entry values, plus minutes and the oldest entry age. Informational only: B02 never posts the OR 960c entry, a Treuhänder posts it manually from these numbers. Gated on A24 billing.read.

NameRequiredDescriptionDefault
asOfNo
contactIdNo
projectIdNo
workspaceIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds that it never posts entries and that a Treuhänder posts manually, reinforcing the read-only nature. It also explains the wipRappen calculation (integer sum of round-once entry values, plus minutes and oldest entry age). 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at two sentences and front-loads the primary purpose. However, it is dense with domain jargon (B02, P5, OR 960c, wipRappen) that may obscure clarity for an agent unfamiliar with Swiss accounting terminology.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It covers the report's purpose, informational nature, gating, and calculation. However, it omits parameter semantics and the output format. Since there is no output schema, the description should provide more detail on the response structure, but it does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain parameters like asOf, contactId, projectId, or workspaceId. It hints at 'as of a date' and 'per project and client', but does not map these to the schema fields. Given the lack of schema descriptions, the description should compensate but does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reports approved-but-unbilled WIP value as of a date, per project and client. It names a specific resource (WIP) and verb (report). However, it does not explicitly differentiate from the sibling billing_unbilled_preview, which likely serves a similar purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides useful context: 'Informational only: B02 never posts the OR 960c entry' and mentions gating on A24 billing.read. However, it does not explicitly state when to use this tool versus alternatives like billing_unbilled_preview or when not to use it. The guidance is implied but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

book_bank_lineA
Idempotent

Book ONE open bank line, credit or debit alike, on its own booking date. target.kind: open_item (documentId = an issued invoice for money in, a posted vendor bill for money out; A14 books the payment; remainder leave_open (default) | write_off (a receivable shortfall to 3805, up to A14's one-click threshold, else write_off_above_threshold) | on_account (a surplus as Guthaben); a bill in a live payment run refuses already_batched naming the run), payment_batch (batchId: a debit of the run's own Bankkonto in the run's currency, equal to the run total or, by its EndToEndId, to one payment of the run; a generated A18 run is marked paid on the line's date, a run already paid is MATCHED and posts nothing), existing_entry (entryId: link an entry already on the books, e.g. a migrated one; its leg on this line's bank account must carry the same signed amount, else amount_mismatch names both amounts unless acceptDifference: true with a differenceReason, recorded and shown as a difference in the balance; a leg moving the account the other way refuses direction_mismatch; a leg backing another line refuses entry_already_linked), accounts (legs[]: accountId, amountMinor in the line's direction summing to the line amount, taxCode per leg computed exactly as a manual journal line: Vorsteuer, Umsatzsteuer, Bezugsteuer; a leg on the 1100/2000 control account books with the warning control_account_leg; a transfer the other own account already booked refuses transfer_already_booked naming the entry to match; matching side two of an own-account transfer to side one's entry booked in ANOTHER month refuses transfer_crosses_period with both dates; viaAccountId routes the whole booking through a Durchlaufkonto in ONE entry: bank against it for the line amount, it against each leg with the leg's VAT, so it nets to zero; it must be a balance account that is no leg, no Bankkonto, no control and no VAT account, else invalid_account), rule (standardId of a Buchungsregel from list_bank_standards, asks { legIndex: amountMinor } for every asked leg, positive, in the line's direction unless the leg runs against it; a computed leg (amount factor) takes round-half-up(line amount x num / den) in Rappen, or asks[legIndex] when given (an override); the rest leg takes the line amount minus the others, either sign; a leg whose amount is same takes the asked leg it names; expanded and booked as accounts, the rule kept on the decision (book a standard proposal as { kind: rule, standardId } to keep its next step); refuses rule_not_found (another workspace or a superseded rule), rule_not_applicable (another counterparty or direction), ask_missing (an asked leg without a positive amount, or a computed leg that comes to 0, computed: true), rest_is_zero, wrong_scope (a Vorlage, scope manual, never books a bank line), wrong_outcome (a "Nicht buchen" rule: use ignore_bank_line)). D178 (A39 §17): open_item also takes allocations [{ documentId, amountMinor }] instead of documentId: several issued invoices (money in) or posted vendor bills (money out) of ONE contact in ONE A14 payment, each amount at most what the document still asks (allocation_exceeds_open); the deviation is line minus allocations: cash left over books only with remainder on_account (the contact's Guthaben, else deviation_needs_remainder), over-allocation never books (allocations_exceed_line), at 0 remainder leave_open (default) or write_off (invoices, within A14's threshold); refuses allocation_contact_mismatch, wrong_direction (the sides never mix), currency_mismatch, already_paid, not_settleable, already_batched. contact (contactId, counterpartyKind? customer | supplier, mode? guthaben | anzahlung, overrideReason?): a line booked to a contact with no document, money in or out, customers and suppliers; mode guthaben (the workspace setting bank.contact_booking_mode, default) makes the amount the contact's Guthaben through an A14 payment without allocation (apply it later with allocate_payment), mode anzahlung books it to the Anzahlungen account of the settings bank.anzahlung_customer_account (2030) or bank.anzahlung_supplier_account (1190) instead; a mode other than the setting needs overrideReason (reason_required), recorded on the decision; refuses not_found, counterparty_merged (naming survivorId), contact_archived, needs_anzahlung_account, invalid_anzahlung_account, and unsupported (reason foreign_currency_settlement) for a Guthaben or several documents on a Bankkonto not in the base currency (A14 books payments in the base currency; book an Anzahlung or to accounts). With bank.anzahlung_vat on, money in from a customer books the Umsatzsteuer on receipt (cleared when allocate_payment applies the Guthaben), and a refund to that customer corrects the matching share (Entgeltsminderung) by the setting bank.anzahlung_vat_refund: reverse (default), refuse (refundVat reverse | keep must be stated, else anzahlung_vat_refund_needs_decision) or warn; a stated refundVat other than the setting's needs overrideReason. A refund (money out to a customer, money in from a supplier) nets against that contact's open Guthaben oldest first, so allocate_payment can no longer apply the refunded cash; a refund larger than the open Guthaben refuses refund_exceeds_guthaben unless beyondGuthaben: true books the rest on account. expense_claims (claimIds): approved Spesen paid from a DEBIT line in the base currency through E02's own reimbursement (one payment per claim clearing 2260, dated the line's date); the claims must total the line (amount_mismatch); refuses claim_not_approved, claim_posting_reversed, wrong_direction; needs spesen.approve. An accounts leg may carry fx { currency, amountMinor } (its amount in the card transaction's currency; amountMinor stays the CHF the bank booked): booked at the effective rate (CHF over foreign) through a conversion entry against 3806/4906 beside the CHF bank entry, so the ledger matches the bank and nothing is revalued; it needs acknowledgeFx: true (fx_ack_required carries the consequence) and refuses fx_leg_vat_refused, invalid_fx_leg_account (only income or expense accounts), fx_currency_mismatch, fx_leg_needs_base_line, fx_leg_amounts_inconsistent. Every new refusal carries sentence { en, de-CH }. Preview any target first with compose_entry { mode: expand, bankTxnId, target } (booking: bookable, blockedBy, deviationMinor, remainderOptions, documents, contact, claims, fx, consequences). A line that is not open refuses line_not_open (reopen_bank_line first); a locked period refuses period_locked unchanged. An agent seat whose booking is drafted is refused at draft time with exactly these refusals, and its newer Vorschlag for a line replaces the older (rejected, reason ersetzt). Idempotent on idempotencyKey. CONSEQUENCE: Books the bank line: posts its entry, or settles the invoice, bill or payment run it paid. If it is wrong, you reopen the line and reverse what it booked; the first booking stays visible.

NameRequiredDescriptionDefault
textNo
targetYes
bankTxnIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses consequential behavior beyond annotations: it posts entries or settles invoices/payment runs, wrong bookings require reopening and reversal while the first booking stays visible, and it is idempotent on idempotencyKey. It also enumerates numerous refusal codes and preconditions such as period_locked and line_not_open.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is front-loaded and the final CONSEQUENCE paragraph is well placed, but the body is an enormous semicolon-chained wall of text that is difficult to scan. The content largely earns its place for such a complex tool, but the structure could be substantially improved with headings or bullets.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a mutation tool with no output schema and only idempotent/destructive annotations, the description fully covers consequences, reversal expectations, refusals, idempotency, preview workflow, and all target variants. An agent has enough information to call it correctly and understand the outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the full parameter burden and does so extensively: every target kind, documentId, allocations, remainder, batchId, entryId, accounts legs, rule standardId/asks, contact fields, claimIds, fx, acknowledgeFx, and override fields are explained with semantics and error conditions. Only the obvious workspaceId and bankTxnId are left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource ('Book ONE open bank line, credit or debit alike, on its own booking date') and immediately establishes scope and constraints. It clearly distinguishes booking from previewing (compose_entry), reopening (reopen_bank_line), and ignoring (ignore_bank_line).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly directs the agent to preview with compose_entry { mode: expand, bankTxnId, target } before booking, names reopen_bank_line for closed lines, ignore_bank_line for 'Nicht buchen' rules, and allocate_payment for later Guthaben application. These are concrete when-to-use and alternative-tool instructions rather than generic context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bootstrap_workspaceB
Idempotent

One-call agent setup: parse a short description into a workspace and VAT config.

NameRequiredDescriptionDefault
nameNo
descriptionYes
idempotencyKeyYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare idempotency and non-destructiveness, and the description adds that this is a one-call composite setup that creates/derives a workspace and VAT config. It does not explain what happens if the workspace already exists, what VAT configuration includes, or what side effects occur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler or repetition. It is concise and easy to scan, even if it leaves important details to other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex setup operation with three undocumented parameters and no output schema, one sentence is insufficient. The description omits prerequisites, side effects, parameter semantics, and what the resulting workspace/VAT config contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema provides no parameter meaning. The description only implies that the required "description" parameter is parsed; it says nothing about the required idempotencyKey or the optional name parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific composite action: parse a description into a workspace and VAT config. It distinguishes itself somewhat via "one-call agent setup," though it does not explicitly contrast with create_workspace or vat_configure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "one-call agent setup" implies the tool is for initial agent bootstrapping, but there is no explicit when-to-use guidance, prerequisites, or comparison to the separate create_workspace and VAT configuration siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

capture_commitA
Idempotent

Commit a reviewed capture into a DRAFT: target.kind='vendor_bill' delegates to A17 create_vendor_bill (+ attach_receipt + the E00 entity link that derives OR 958f retention), and target.kind='expense_line' delegates to E02 (onto target.claimId, or a fresh draft claim for target.employeeId). Requires the delegated verb's own capability (post for a bill, spesen.submit for an expense), re-checked inside the delegation. Posts NOTHING: the target lands as a draft and posting it is A17's separately-dialled step (P8). corrections (each {key,value}) land as operator fields before delegation. Idempotent: a double-commit returns the original target_id and never creates a second draft.

NameRequiredDescriptionDefault
targetYes
captureIdYes
correctionsNo
workspaceIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint=false, and the description adds real substance on top: it re-checks the delegated capability inside the delegation, never posts, and specifies that a double-commit returns the original target_id rather than creating a second draft. That return-value detail is exactly the kind of behavior the agent needs. It stops short of describing failure modes when the capability check fails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The commit-and-what-it-delegates-to statement is front-loaded, and the constraints (posts nothing, idempotent, corrections) follow in a compact block with no filler sentences. It is a single dense paragraph whose only waste is internal reference codes that mean nothing to the calling agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description does cover the important return behavior (original target_id on repeat commits). However, with a nested, entirely undocumented target object, the agent is still missing what a 'vendor_bill' or 'expense_line' target must actually contain beyond kind, which is the main risk for a write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does for the hardest parts: it defines the discriminator values for target.kind, the target.claimId and target.employeeId routing, and the corrections shape ({key,value} applied as operator fields before delegation). workspaceId, captureId, and idempotencyKey are left to obvious inference, and the remaining fields of the nested target object are not enumerated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Commit a reviewed capture into a DRAFT") and then enumerates the two target kinds with exactly which sibling each delegates to (create_vendor_bill, expense_line/E02). An agent can distinguish it from capture_extract, capture_discard, and post_vendor_bill without opening any schema. The internal codenames (A17, E00, OR 958f, P8) are opaque but don't obscure the core operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames the tool as the post-review commit step and explicitly separates it from posting: "Posts NOTHING: the target lands as a draft and posting it is A17's separately-dialled step." It also names the capability prerequisite per target kind (post for a bill, spesen.submit for an expense). It does not name the alternative verb to call for the posting step, so routing is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

capture_discardA
Idempotent

Discard a capture that is not a bookable document: flips a needs_review capture to discarded (terminal). The E00 document survives untouched (its retention is E00 law). Discarding a committed capture is refused with invalid_state (correct it on the A17/E02 side). A discarded capture is recoverable by re-uploading the same bytes (the dedupe key is scoped to non-discarded captures).

NameRequiredDescriptionDefault
reasonNo
captureIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it discloses that the transition is terminal, that the underlying E00 document is untouched by design, that the failure mode is invalid_state for committed captures, and that the action is reversible via re-upload because the dedupe key ignores discarded captures. That is the exact behavioral envelope an agent needs before mutating state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the state transition, each adding a distinct fact (terminality, document survival, error case, recoverability). Domain shorthands like E00/A17/E02 are dense but load-bearing rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behaviorally it is nearly complete for a mutation tool with no output schema, covering outcome, error, and reversibility. The gap is the parameter contract: with 0% schema coverage the agent still cannot tell what to pass for captureId scoping or how the idempotencyKey interacts with the stated dedupe behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions any of the four parameters by role — not workspaceId/captureId scoping, not the optional reason, and only obliquely the idempotencyKey via the dedupe-key remark. With zero schema coverage the description has to carry this burden and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (discard) and resource (capture) plus the state transition it performs: needs_review -> discarded (terminal). The phrase 'that is not a bookable document' implicitly separates it from capture_commit/capture_extract, so an agent can place it in the capture lifecycle without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-to-use condition ('not a bookable document') and an explicit when-not ('discarding a committed capture is refused with invalid_state'), plus a redirect to the A17/E02 side for that case. It stops short of naming a sibling tool as the alternative for the committed path, so it is not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

capture_documentA
Idempotent

Ingest a supplier document into the Belegeingang queue (Belegerfassung). contentBase64 is the raw bytes; mime must be one of application/pdf, image/jpeg, image/png, image/heic, image/tiff (the queue refuses anything else, unlike E00). The file is stored via E00 and the deterministic pass decodes any Swiss QR Code payload present as text (creditor, IBAN, amount, currency, QRR/SCOR reference revalidated by check digit, and the Swico S1 billing information), landing each value as a provenance-stamped field. A byte-identical re-drop returns the existing capture ({duplicate:true}) and writes nothing; a hash matching only a discarded capture creates a fresh one cross-linking it (recovery). Posts nothing.

NameRequiredDescriptionDefault
mimeYes
filenameNo
workspaceIdYes
contentBase64Yes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by explaining that the file is stored via E00, that QR payload data is decoded and provenance-stamped, that byte-identical re-drops return the existing capture, and that a hash matching a discarded capture creates a fresh recovery capture. It also clearly states that the tool posts nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and most of the paragraph is substantive behavioral detail. It is dense with domain terms such as Belegeingang, E00, QRR/SCOR, and Swico S1, but those details are relevant rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The behavioral description is rich for a complex capture tool, and it partially explains the duplicate return shape. However, with no output schema and zero schema parameter descriptions, the missing explanations for workspaceId, idempotencyKey, and filename leave real gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only explains contentBase64 and the allowed mime values. It leaves workspaceId, idempotencyKey, and filename unexplained, including the required idempotencyKey parameter that drives the described duplicate behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: ingest a supplier document into the Belegeingang queue. It is clear what the tool does and its non-posting scope, but it does not explicitly distinguish itself from nearby capture workflow siblings such as capture_extract, capture_commit, or capture_discard.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'supplier document' and 'Belegeingang queue', and the mime restriction gives practical context. However, there is no explicit guidance on when to use this versus capture_extract, capture_commit, or using create_document instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

capture_extractA
Idempotent

Re-run or augment a capture's extraction. source='qr' re-runs the deterministic pass; source='agent' takes caller-supplied fields (each {key,value,confidence}, validated against the CAPTURE_FIELD_KEY registry); source='operator' takes review-pane corrections (each {key,value}, landing as operator/high); source='local_model' degrades honestly to needs_local_runtime (no on-device model is wired in the core). Instead of fields, source='operator' or 'agent' may pass qrPayload: the text of the bill's Swiss QR Code as a phone scanner or decoder read it (optional decoder label, e.g. 'phone-scanner' or 'plugin:'). It is checked strictly against the SIX QR-bill guideline v2.3; any violation refuses the whole payload with qr_payload_invalid and lists every issue (code, element, line, message), writing nothing. A clean payload lands creditor name and address, IBAN, amount, currency, reference and message plus the Swico S1 billing information as fields with the caller's provenance at high confidence, and records the raw payload as evidence (get_capture qrPayloads). Merge rules are fixed: an operator value is never overwritten by a machine source, higher confidence wins, and a deterministic source outranks a probabilistic one at equal confidence; the loser is kept as a superseded row (auditable disagreement, never a silent drop). Re-running on unchanged input is a no-op.

NameRequiredDescriptionDefault
fieldsNo
sourceYes
decoderNo
captureIdYes
qrPayloadNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint/destructiveHint annotations, the description discloses the failure contract (qr_payload_invalid refuses the whole payload, lists every issue, 'writing nothing'), the merge precedence rules, that losers are retained as superseded rows rather than silently dropped, and that unchanged re-runs are no-ops. These are exactly the mutation semantics an agent cannot infer from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with purpose and source semantics, and nearly every sentence adds non-redundant information (validation depth, merge rules, no-op behavior). However it is delivered as one dense block with no breaks or list structure, and the provenance/merge-rule detail arrives before the reader has finished the source taxonomy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no output schema and no schema descriptions, the definition covers input modes, validation strictness, error codes, merge behavior, and evidence recording (get_capture qrPayloads). What is missing is the shape of a successful response and any statement about the capture's required state, so it stops short of fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description must carry the parameter burden and largely does: it defines the four `source` values, the element shape of `fields` per source ({key,value,confidence} vs {key,value}), what `qrPayload` contains, and that `decoder` is an optional label with examples. workspaceId, captureId, and idempotencyKey are left unexplained, which keeps it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening clause 'Re-run or augment a capture's extraction' names a specific verb pair and resource, immediately distinguishing it from capture_document/capture_commit (which create or finalize a capture). It then enumerates the exact modes of operation, so an agent knows this is the re-extraction/repair path rather than a capture-creation path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each source value is given an explicit scenario: 'qr' for the deterministic pass, 'agent' for caller-supplied fields, 'operator' for review-pane corrections, and 'local_model' which 'degrades honestly to needs_local_runtime' since nothing is wired in. That is strong when-to-use guidance at the mode level, but the description never states when to call this tool at all versus siblings such as capture_commit or get_capture, nor any precondition on capture state.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

checklist_abandonA
DestructiveIdempotent

Abandon a checklist run with a reason (a wrong period was started). The run stays listed under the abandoned filter and contributes nothing to the attention hub; it is never deleted, and every write on it afterwards refuses run_abandoned. The abandoned period gets no new run of this checklist (checklist_start returns the abandoned run, a run being unique per template and period); start the right period with checklist_start. Gates on manage_checklists. CONSEQUENCE: Abandons the run with your reason; it stays listed and stops asking for anything. It can't be resumed, and this checklist gets no new run for that period.

NameRequiredDescriptionDefault
runIdYes
reasonYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the destructiveHint and idempotentHint annotations: the run is never deleted, remains listed under the abandoned filter, contributes nothing to the attention hub, cannot be resumed, later writes fail with run_abandoned, and gates on manage_checklists. This is exactly the behavioral detail an agent needs before performing a destructive, irreversible action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and routing information are front-loaded, but the 'CONSEQUENCE:' sentence largely restates earlier statements about the run staying listed, not being resumable, and blocking new runs for the period. Useful content, but redundant framing costs it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, irreversible action with no output schema, the description covers permanence, downstream effects, permissions, and recovery routing well. It falls short only on idempotencyKey semantics and workspaceId scope, which an agent would otherwise guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% with four required parameters, so the description must compensate. It gives an example of the reason ('a wrong period was started') but does not explain workspaceId, idempotencyKey, or confirm that runId identifies the abandoned run. Partial compensation, not full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Abandon a checklist run') and immediately names the sibling it is not ('checklist_start') for starting the correct period. An agent can route between checklist_abandon and checklist_start without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the scenario ('a wrong period was started'), states the alternative ('start the right period with checklist_start'), and explains the exclusion (the abandoned period gets no new run, checklist_start returns the abandoned run). Clear when-to-use and when-to-use-something-else guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

checklist_getA
Read-only

Read one checklist run with every item derived LIVE: a system check item is done while its check passes (drafts, bank reconciliation, tax codes, the vat_filed lock, the month or year lock), a verb or preview item is done while the hash the engine bound still equals the live read (stale otherwise), a posting item is done while its probe finds a live, unreversed artefact in the ledger, a validation item is done on pass (a warn needs a live acknowledgement), a choice item is done while a human answered or the books derive the answer, a sign-off item is done while a live sign-off stands, and an item whose governing choice carries another answer reads excluded. Returns the items in journey order, the next actionable item (nextItemId), the counts, the anchor hash and the derived run status (open | done | abandoned). Gates on read_books.

NameRequiredDescriptionDefault
runIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds extensive behavioral detail: how each item type is derived (system checks, verb/preview, posting, validation, choice, sign-off), the order of returned items, and the gate on read_books permission. This reveals side-effect-free behavior and computational logic that annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense paragraph but not overly long given the complexity. It front-loads the main purpose ('Read one checklist run with every item derived LIVE') and then details item derivation and outputs. It is concise enough but could benefit from bullet points for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description is thorough: it explains all item types, return fields, and the permission gate. It lacks parameter semantics (covered separately) but otherwise covers what an agent needs to understand behavior and outputs. Very complete for a read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, and the description never explains the two parameters (workspaceId, runId). It does not clarify that workspaceId identifies the workspace and runId identifies the checklist run. Since schema coverage is low and the description must compensate, this is a notable gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it reads one checklist run and derives every item live, then lists the output fields (items, nextItemId, counts, anchor hash, derived status). This is a specific verb+resource that clearly distinguishes it from sibling tools like checklist_list (list runs) and checklist_start (start runs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys what the tool does, so an agent can infer when to use it (to fetch the current derived state of a single run). However, it does not explicitly state when not to use it or mention 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.

checklist_item_completeA
Idempotent

Complete one checklist item. A verb or preview item is completed by the ENGINE re-running the read and binding its hash as evidence; a caller-supplied evidence.ref must agree (evidence_mismatch otherwise); a preview whose read refuses answers read_refused. A choice item stores the answer given as evidence {kind: choice, ref: } (invalid_choice names the options; choice_locked when a governed posting or sign-off is already done). A warn validation records the acknowledgement as evidence {kind: signoff, ref: } bound to the figures (acknowledge_needs_reason without one); a block validation refuses check_not_passed. A sign-off item records an append-only sign-off: abstimmung_reviewed needs the live bridge check to pass (check_not_passed) and binds the return hash, statements_signoff binds the statements hash, settlement_booked needs evidence.ref naming the bank transaction or entry (evidence_required), eportal_filed needs evidence {kind: filed_attestation, ref: YYYY-MM-DD} not before the export (attestation_before_export) and a gv_attestation needs evidence {kind: gv_attestation, ref: YYYY-MM-DD} (a date before the statements sign-off needs evidence.reason); both refuse a second live attestation (already_attested). A system check or a posting item cannot be completed by hand (check_item_live: the domain verb is the act); an excluded item refuses item_excluded. Refuses prerequisite_open naming the blocking item and run_abandoned on an abandoned run. Gates on manage_checklists. CONSEQUENCE: Records the item as done under your name, with the evidence TILL computed or the sign-off you give. Most items can be reopened; a voided sign-off stays on record.

NameRequiredDescriptionDefault
runIdYes
itemIdYes
evidenceNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the minimal idempotentHint and destructiveHint annotations. It discloses evidence binding by hash, error codes (evidence_mismatch, read_refused, invalid_choice, check_not_passed, etc.), permission gating (manage_checklists), and the consequence that the item is recorded under your name with append-only sign-offs that stay on record even if voided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence is clear and front-loaded, but the rest is a dense single paragraph packed with semicolons, error codes, and per-item rules. It is thorough but hard to scan; structured bullets per item type would improve usability. Every clause is relevant, but the wall-of-text format undermines conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a complex mutation tool with no output schema and minimal annotations. It covers evidence requirements, refusal conditions, permission gating, prerequisite handling, and the final consequence (recorded under your name, mostly reopenable, voided sign-off persists). Nothing essential to correct invocation appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the full burden and does so for the complex nested evidence parameter. It explains the expected evidence shapes per item type: {kind: choice, ref: <optionId>}, {kind: signoff, ref: <reason>}, {kind: filed_attestation, ref: YYYY-MM-DD}, {kind: gv_attestation, ref: YYYY-MM-DD}, and when evidence.ref is required (settlement_booked, attestation_before_export).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Complete one checklist item.' It is immediately distinguishable from siblings like checklist_item_skip and checklist_item_reopen by the completion semantics and item-type rules. The opening sentence front-loads the core purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides strong when-to-use context through exclusions: system checks and posting items cannot be completed by hand (check_item_live), excluded items refuse item_excluded, and prerequisite_open names blocking items. It doesn't explicitly name sibling alternatives like checklist_item_skip or checklist_item_reopen, but the item-type rules make applicability clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

checklist_item_reopenA
Idempotent

Return a done or skipped checklist item to open. A live sign-off on it (the bridge review, the ePortal attestation, the payment, an acknowledgement) is voided with reason reopened and kept as history; a bound verb or preview evidence is cleared; a human choice answer is cleared back to the derived one (choice_locked while a governed posting or sign-off is done). A system check or posting item cannot be reopened by hand (check_item_live): it flips with its check or probe. Gates on manage_checklists. CONSEQUENCE: Reopens the item and voids its sign-off, which stays on record as voided. You can complete the item again.

NameRequiredDescriptionDefault
runIdYes
itemIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it discloses exactly what is voided (bridge review, ePortal attestation, payment, acknowledgement), that the voided sign-off is kept as history with reason 'reopened', what evidence is cleared, the choice_locked state, and the ability to complete the item again. This matches destructiveHint=false (history retained) rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action, then the cascade effects, then an explicit CONSEQUENCE block. Dense domain jargon (bound verb, choice_locked, check_item_live) adds length, and the closing consequence restates the opening, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behaviorally rich for a mutation tool and honest about side effects, but with no output schema and zero parameter documentation the description leaves the agent unequipped to supply idempotencyKey or distinguish runId from itemId. Return shape is also unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all four required parameters. The description alludes to the item being reopened but never explains workspaceId, runId, itemId, or the idempotencyKey, leaving the agent to infer formats and semantics entirely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource: 'Return a done or skipped checklist item to open.' Siblings checklist_item_complete and checklist_item_skip make the direction of the transition important, and the description makes it unmistakable. The scope limits (which item types can be reopened) further sharpen the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear exclusion rule — system check or posting items cannot be reopened by hand and flip with their check or probe (check_item_live) — plus the permission gate manage_checklists. It does not name the sibling actions to use instead when reopening is wrong, but the when/when-not context is otherwise explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

checklist_item_skipA
Idempotent

Mark one checklist item as not applicable, with a recorded reason (skip_needs_reason without one). The undeletable items (the computed return, the period lock, the payment, the statements sign-off, the seal) refuse (undeletable): the canon is waived consciously, never dropped. An excluded item refuses item_excluded. A live sign-off on the item is voided, never deleted. Gates on manage_checklists. CONSEQUENCE: Marks the item as not applicable with your reason and voids any sign-off on it; both stay visible in the run and the audit log. You can reopen the item later.

NameRequiredDescriptionDefault
runIdYes
itemIdYes
reasonYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations by naming specific error codes (skip_needs_reason, undeletable, item_excluded), the permission required (manage_checklists), and the precise effect: a live sign-off is voided rather than deleted, and both the item and void remain visible in the run and audit log. That is exactly the consequential detail an agent must know before invoking a mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly with the action first, then refusals, then consequences. However, the middle is cryptic ('the canon is waived consciously, never dropped') and the opening sentence substantially restates the CONSEQUENCE sentence, costing value per line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotation coverage for permissions or failure modes, the description does the heavy lifting on behavior, error codes, and reversibility. It falls short only on what the five inputs mean and on return shape, which for a mutation like this would be useful but is not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across five required parameters, and the description only clarifies one of them: that reason is mandatory and that omission yields skip_needs_reason. runId, itemId, workspaceId, and idempotencyKey scoping/semantics are left entirely unexplained, so the description does not compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Mark one checklist item as not applicable, with a recorded reason.' This clearly separates the skip action from complete/reopen/abandon in the checklist_* sibling family, though it never names those siblings as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real when-not conditions: undeletable items refuse with (undeletable), excluded items refuse with item_excluded, and it gates on manage_checklists. It also states the action is reversible ('You can reopen the item later'), implying checklist_item_reopen, but never explicitly routes to a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

checklist_listA
Read-only

List this workspace's checklist runs as metadata rows (template, period, derived status, next item, counts), open first, then done, then abandoned, newest period first. Optional templateId and status (open | done | abandoned) filters. Abandoned runs are listed, never deleted. Gates on read_books.

NameRequiredDescriptionDefault
statusNo
templateIdNo
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds several behavioral traits beyond the readOnlyHint annotation: abandoned runs are listed but never deleted, ordering is specified (open, done, abandoned, newest period first), and access gates on read_books. These details are non-obvious and provide valuable operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each adding meaningful information: the listing purpose and output fields, the ordering, and the filters/behavior/permissions. No fluff or redundancy; it is efficiently front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the listing purpose, output fields, ordering, filters, retention behavior, and permission gate. It does not mention pagination or response limits, but for a list tool without an output schema, it provides a solid understanding of what is returned and how it behaves.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining the templateId and status filters, including the allowed status values (open | done | abandoned) that are not present in the schema. WorkspaceId is implicitly covered by 'this workspace's', and while not every parameter is detailed, the key filters are well explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists checklist runs with specific output fields (template, period, derived status, next item, counts) and ordering rules. It distinguishes this from sibling tools like checklist_templates, checklist_get, and checklist_start by focusing on the list operation for runs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through its definition: listing runs with optional templateId and status filters. It provides clear context on filtering and ordering, though it does not explicitly name alternative tools or exclusions. The scope is clear enough for an agent to choose this over related checklist tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

checklist_startA
Idempotent

Start a checklist run for a template and a period. period is OPTIONAL: omitted, the engine picks the last ENDED period of the template's kind (an A07 label such as 2026-Q2 for vat_period, YYYY-MM for month, the fiscal year YYYY for year), which is what the seeded daily auto-start rule relies on. Creates every item with its owner, prerequisites and due date (the ESTV filing and payment items at period end + 60 days, Art. 71 Abs. 1 and Art. 86 Abs. 1 MWSTG; on a year the Umsatzabstimmung at + 180 days, the Berichtigung at + 240 days and the GV six months on, Art. 699 Abs. 2 OR). Idempotent on workspace + template + period: a second start returns the existing run with created:false. Refuses needs_vat_config without an A05 configuration and period_not_filable for a vat_period label that is not one of the year's filing periods (naming them); period_not_ended while a month or year has not ended; year_already_closed on a sealed fiscal year; year_close_in_progress for the last fiscal month while a year_close run for that year exists (the year run covers it; an existing December run is still returned). Gates on manage_checklists. CONSEQUENCE: Starts the checklist for the period with every item and its due date. A run started by mistake is abandoned, never deleted.

NameRequiredDescriptionDefault
periodNo
templateIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it specifies the exact idempotency key (workspace + template + period) and the returned shape on a repeat call (created:false), discloses the permission gate (manage_checklists), enumerates domain error codes with causes, and states the consequence explicitly — a mistaken run is abandoned, never deleted. That is the kind of pre-call context an agent cannot get from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the period default, then errors, then consequence — a sensible ordering. It is dense and long, and the Swiss-law citations for due dates (Art. 71/86 MWSTG, Art. 699 OR) are more detail than an agent needs to select or invoke the tool, though they do justify the computed due dates.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating, multi-side-effect tool with no output schema and no described parameters, the description covers trigger, defaulting, side effects, idempotency semantics, authorization and every documented failure mode. Nothing an agent needs in order to decide and call correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load: it fully explains period (optional, the default selection rule, and the accepted A07 / YYYY-MM / YYYY label formats) and implicitly binds workspaceId and templateId through the idempotency key triple. idempotencyKey itself is never described as a parameter (generation, reuse expectations), which is the remaining gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Start a checklist run for a template and a period') and immediately scopes it against siblings by describing what the run contains (items, owner, prerequisites, due date) — clearly distinct from checklist_item_complete, checklist_abandon, checklist_templates and checklist_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit usage rule for the tricky part — period is optional and defaults to the last ended period, the behavior the seeded daily auto-start rule relies on — plus a precise list of refusal conditions (needs_vat_config, period_not_filable, period_not_ended, year_already_closed, year_close_in_progress) that tell the agent when this call will fail. It never names a sibling tool as an alternative, which is what keeps it at 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

checklist_templatesA
Read-only

List the shipped checklist templates (vat_period, the MWST-Periode from open books to a filed, locked, paid return; the close templates month_close and year_close as they land): id, kind, label, description, period kind (vat_period | month | year), anchor (vat_return | statements) and item count. Describes the software, not the workspace. Gates on read_books.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description adds value by disclosing the permission gate ('Gates on read_books') and the scope (software vs. workspace). It does not contradict annotations and provides additional behavioral context beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that efficiently packs template names, returned fields, and the permission gate without fluff. It is front-loaded with the core purpose, though it could be slightly reorganized for readability. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lists the returned fields (id, kind, label, description, period kind, anchor, item count), which partially compensates for the missing output schema. However, it does not explain the workspaceId parameter, mention potential pagination or ordering, or clarify edge cases (e.g., empty template list). Given the tool's simplicity, this is acceptable but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the single required parameter workspaceId, and the tool description does not explain its purpose or impact. The phrase 'Describes the software, not the workspace' could confuse an agent about whether workspaceId is even relevant. The description fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List'), the resource ('shipped checklist templates'), and enumerates specific templates (vat_period, month_close, year_close) and the fields returned. It also distinguishes itself from workspace-specific checklist tools by noting 'Describes the software, not the workspace,' making the scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by contrasting with workspace-specific checklists ('Describes the software, not the workspace'), but it does not explicitly name alternative tools (e.g., checklist_list) or provide when-to-use vs. when-not-to-use guidance. An agent must infer that this is for cataloging available templates rather than inspecting active checklists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clear_bank_standardA
DestructiveIdempotent

Remove ONE standard (standardId from list_bank_standards or a line's standardId): later lines of that counterparty are no longer proposed by it. The standard stays on record as cleared, never deleted; nothing booked changes. An already cleared standard answers ok with alreadyCleared: true. Idempotent on idempotencyKey. CONSEQUENCE: Removes a standard: later bank lines of this counterparty are no longer prefilled by it. Nothing already booked changes; the standard stays on record and you can set it again.

NameRequiredDescriptionDefault
standardIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint, but the description adds important nuance: the standard stays on record as cleared, is never deleted, and nothing already booked changes. It also discloses the alreadyCleared response and idempotency behavior on idempotencyKey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key scope and safety point are front-loaded, but the CONSEQUENCE sentence largely repeats the earlier statement that later lines are no longer proposed and nothing booked changes. Slight redundancy prevents a top score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent mutation with no output schema, the description covers the material effects, non-effects, idempotency behavior, and the already-cleared return case. This is complete enough for correct invocation, with only minor room to clarify workspaceId.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains standardId's source and idempotencyKey semantics, but workspaceId is not explained beyond its name, leaving part of the parameter surface undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Remove ONE standard', with scope clarified as one standard at a time. It also names where standardId comes from and distinguishes the effect from deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides useful usage context by naming standardId sources (list_bank_standards or a line's standardId) and emphasizing 'ONE'. However, it does not explicitly say when to use this versus set_bank_standard or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clear_diagnosticsB
DestructiveIdempotent

Delete every recorded error detail. Reports already written are kept.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the risk profile is known. The description adds real value by scoping the blast radius ('every recorded error detail') and confirming written reports are preserved, but it says nothing about permissions, recoverability, or whether the wipe is workspace-scoped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, with the destructive action and its exception front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with annotations covering destructiveness and idempotency and no output schema, the description covers what is removed and what is retained. The main gap is workspace scoping of the deletion.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (workspaceId) exists and schema description coverage is 0%, so the description carries the burden — yet it never mentions that deletion is scoped to a workspace, and 'every recorded error detail' could read as global. The sole parameter is a simple ID, keeping the omission from being severe.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Delete') and a specific resource ('every recorded error detail'), and the second sentence clarifies scope. It is distinguishable from get_diagnostics/set_diagnostics by its clearing semantics, though no sibling is named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to clear diagnostics versus reading them with get_diagnostics, nor any stated preconditions. The only scope hint is that previously written reports survive, which is behavioral rather than usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

close_monthA
DestructiveIdempotent

Soft-close a month (reversible guardrail). CONSEQUENCE: Closes the month, so nothing more can be booked into it. You can reopen it unless it has been hard-locked since.

NameRequiredDescriptionDefault
periodYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already flag destructiveHint and idempotentHint, but the description adds real substance: what the consequence actually is (no further bookings into the period), that it is a reversible guardrail, and the precise condition under which reversibility is lost (a subsequent hard lock). It stops short of mentioning permissions or the idempotency key's replay behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the operation and then the consequence in an explicitly labelled clause. Nothing is padded and the critical warning arrives before any elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The operation's semantics and its reversibility boundary are well covered for a mutating tool with no output schema, but with three required parameters at zero schema coverage the agent still lacks the information needed to construct a valid call without guessing the period and idempotency formats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three required parameters, so the description must carry the burden and largely does not. "Month" loosely maps to period, but the period format, what workspaceId scopes, and what idempotencyKey must contain are all left undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Soft-close a month" gives a specific verb plus resource, and the word "soft" implicitly separates it from hard-lock operations. It does not name the relevant siblings (reopen_month, lock_period, close_year) directly, so the differentiation is inferential rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the reversibility clause hints that you should use this instead of a hard lock when you may need to post again later. There is no explicit "use this when / use X instead" routing to reopen_month, lock_period, or prepare_period, which an agent would need in a family this crowded.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

close_yearA
DestructiveIdempotent

Hard-close a fiscal year: sweep the P&L into equity and seal the year. Refuses year_already_closed on a sealed year. While an open year_close checklist run exists for the year, a call WITHOUT runId refuses year_close_in_progress (naming yearRunId): the run seals the year from its seal row, which calls close_year WITH its runId. A call with runId runs only for an open year_close run of this workspace for exactly this year whose year_sealed row is unblocked (not_found, run_abandoned, run_not_year_close, run_year_mismatch, prerequisite_open otherwise). CONSEQUENCE: Closes the fiscal year for good: the profit or loss moves into equity and nothing more can be booked into that year. There is no reopening; a mistake found later is corrected in the following year.

NameRequiredDescriptionDefault
yearYes
runIdNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint and idempotentHint, yet the description adds substantial context beyond them: the exact refusal codes (year_already_closed, year_close_in_progress, run_abandoned, run_year_mismatch, prerequisite_open), the runId-vs-seal-row workflow, and the fact that nothing more can be booked and there is no reopening. This is materially richer than 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by refusal conditions and then a clearly labeled CONSEQUENCE. The parenthetical error-code list is dense but every item adds decision-relevant information; no sentence is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an irreversible, destructive operation with no output schema, the description supplies the full picture an agent needs: what it destroys, that it cannot be undone, how to correct mistakes, and exactly which precondition/runId combinations are rejected. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 4 parameters. The description thoroughly disambiguates runId (open year_close run of this workspace, exact year, unblocked seal row) and clarifies year as the fiscal year, but workspaceId and idempotencyKey are never mentioned, so half the parameters remain undocumented anywhere. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb, resource, and accounting effect: 'Hard-close a fiscal year: sweep the P&L into equity and seal the year.' An agent immediately knows this is the irreversible year-end close, distinct from close_month/reopen_month in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly branches usage: a call WITHOUT runId is refused while an open year_close checklist run exists, and a call WITH runId is only valid for an open, unblocked year_close run of the matching workspace and year. It does not name adjacent alternatives (close_month, lock_period) for contrast, which keeps it off a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comment_entryA
Idempotent

Ask or note something about a posted journal entry without touching it: appends one comment to the entry review thread (Prüfvermerk) and never changes the entry itself or its review status. The Treuhänder queries, the client answers with a correcting reversal (reverse_entry), never an edit.

NameRequiredDescriptionDefault
textYes
entryIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds meaningful behavioral context by stating that it appends a comment only and never changes the entry or review status. It does not disclose who can comment or how the review thread is exposed, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core append-only action and then the usage contrast with reverse_entry. There is no boilerplate and every clause contributes either scope or routing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the behavioral scope and the main alternative, but for a four-parameter tool with 0% schema description coverage it omits parameter meanings, especially idempotencyKey. It also does not describe what the comment append returns, though the absence of an output schema makes that a lesser gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and all four parameters are required. The description implicitly maps 'posted journal entry' to entryId and 'comment' to text, but it says nothing about workspaceId or the required idempotencyKey, leaving important invocation details unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: it appends one comment to an entry's review thread (Prüfvermerk) and explicitly does not alter the entry or its review status. It also distinguishes the tool from reverse_entry, so an agent can identify its role from the many journal-entry siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the intended usage context: asking or noting something about a posted entry, with the Treuhänder querying and the client correcting via reverse_entry rather than editing. The only gap is that it does not explicitly rule out other related tools such as flag_entry or approve_entry, nor state any prerequisite for when a posted entry is eligible for comment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compose_entryA
Read-only

Compose a journal entry without booking it. mode "expand" turns lines into the exact post_entry lines: an intent line {account, side, amount, gross, taxCode?, supplyDate?, costCenter?} is expanded with its MWST legs (Vorsteuer, Umsatzsteuer, Bezugsteuer, Einfuhrsteuer, the saldo fold, a refund mirrored), a plain line {account, debit|credit, taxCode?, taxBase?, taxAmount?} passes through, and the answer carries the lines, a caption per taxed line and the verdict post_entry would give (vat_trace_unreconciled, period_locked, unbalanced, ...). mode "decompose" reads a stored entry (entryId) or stored lines back into intent and says whether it roundTrips. A bank line instead: mode "expand" with bankTxnId and target (a book_bank_line target of kind accounts, viaAccountId included, or rule with its asks; a computed leg needs no ask) answers exactly the lines book_bank_line would post for it, the rule expanded on the line (target: the accounts target it expands to, computed amounts filled in), and its refusal as the verdict (rule_not_found, ask_missing, rest_is_zero, legs_do_not_sum, line_not_open, ...). D178: EVERY book_bank_line target previews this way (open_item with documentId or allocations, payment_batch, existing_entry, contact, expense_claims, accounts with fx legs), and a bank line's answer carries booking { targetKind, bookable, blockedBy (the refusal code book_bank_line would give now, else null), verdict, deviationMinor (line minus legs, allocations or claims), remainder, remainderOptions (what remainder may be now), documents [{ documentId, kind, contactId, openMinor, allocatedMinor, writeOffMinor, openAfterMinor }], contact { contactId, name, counterpartyKind, mode, settingMode, overridden, accountNumber }, claims [{ claimId, title, employeeId, status, totalMinor }], fx { currency, foreignMinor, baseMinor, rate, conversionLines }, entries [{ currency, lines }] (every entry the booking would post, with accountNumber and CHF per line), warnings, consequences [{ code, en, de-CH, reversibility }], acknowledgementsRequired (fx_counter_leg: book with acknowledgeFx: true) }; a settlement, contact or Spesen target is previewed by running the booking and rolling it back, so nothing is written. A Vorlage instead of lines: mode "expand" with date and template { standardId (a Vorlage, scope manual, from list_bank_standards), asks { legIndex: amountMinor } } answers the lines post_entry { template } would post (asked amounts are gross on a taxed leg, a same leg copies the asked leg it names, the rest leg balances the entry on its own side) with template { standardId, label, amounts [{ legIndex, side, amount }] }, and its refusal as the verdict (rule_not_found, rule_invalid, wrong_scope for a bank rule, ask_missing, rest_is_zero, rest_changes_side, plus every refusal of typed lines). Post or save the answered lines verbatim.

NameRequiredDescriptionDefault
dateNo
modeYes
linesNo
targetNo
entryIdNo
templateNo
bankTxnIdNo
workspaceIdYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations say only readOnlyHint=true, and the description adds substantial context beyond that: it discloses that settlement/contact/Spesen targets are "previewed by running the booking and rolling it back, so nothing is written," and enumerates the refusal/verdict codes (rule_not_found, ask_missing, rest_is_zero, period_locked, unbalanced, fx_counter_leg acknowledgement requirement). That is exactly the kind of side-effect and failure-mode disclosure annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is front-loaded and every clause is technically informative, but it is delivered as one enormous unbroken paragraph with nested parenthetical enumerations and long code lists. The complexity justifies length, not the near-total absence of sentence breaks, sections, or bullets between the four distinct workflows.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the heavy lifting by describing the returned structure field-by-field (booking.targetKind, blockedBy, deviationMinor, remainderOptions, documents, claims, fx, entries, consequences, acknowledgementsRequired) and the template response. It is complete enough to call correctly, though the dense prose makes some return shapes hard to parse at a glance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 8 parameters including nested objects, so the description must carry the load, and it largely does: it defines the intent-line shape {account, side, amount, gross, taxCode?, supplyDate?, costCenter?}, the plain-line shape with debit/credit/taxBase/taxAmount, entryId, bankTxnId with target kinds and viaAccountId, and template {standardId, asks}. Only workspaceId and the free-form target/template object internals are left to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: "Compose a journal entry without booking it," which immediately distinguishes it from posting siblings like post_entry and book_bank_line. The expand/decompose mode split is stated concretely, though the sheer volume of downstream detail dilutes the initial clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for each mode: expand for intent lines, bank lines, or a Vorlage; decompose for stored entries via entryId, and it closes with the handoff "Post or save the answered lines verbatim." It never explicitly excludes alternatives (e.g., vat_preview, preview_payment) or states prerequisites, so an agent must infer some routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

confirm_fieldB

Release a draft custom field so every screen and every caller can see it: the human half of draft-by-default. Confirming a field that is already live is a successful no-op.

NameRequiredDescriptionDefault
fieldDefIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the single destructiveHint=false annotation, the description discloses the effective state change (draft becomes globally visible) and idempotent retry semantics (no-op if already live), which is genuinely useful. It does not say whether confirmation requires elevated permissions, whether it can be undone back to draft, or what a response looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the effect and followed by the no-op caveat; nothing is wasted. The phrase 'the human half of draft-by-default' is compact but slightly cryptic without context on what the non-human half is.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with only destructiveHint=false, no output schema, and zero parameter documentation, the description covers the what and the retry behavior but leaves permissions, reversibility, and all parameter meanings unaddressed. It is adequate, not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Three parameters with 0% schema description coverage, and the description says nothing about workspaceId, fieldDefId, or idempotencyKey. The idempotencyKey is particularly notable since the description discusses no-op semantics without linking it to that parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (release/confirm) and resource (draft custom field) plus the observable effect: the field becomes visible to every screen and caller. It is clearly distinct from define_field (creation) and archive_field in the sibling list, though those siblings are never named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear condition for use (a field is still in draft and needs to be published) and implicitly removes a hesitation by stating that confirming an already-live field is a successful no-op. It does not name an alternative or exclusion path, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

confirm_matchA
Idempotent

A20's decision verb, now a wrapper over book_bank_line: settle an outgoing DEBIT against a vendor bill (vendorBillId, an open_item booking; a surplus parks as the supplier's Guthaben) or several bills (allocations[] for a multi-bill split) through A14's record_payment, or MATCH an existing journal entry that already books the movement (entryId, credit or debit: the entry must book this line's bank account with the same signed amount and its leg must not back another line). A settlement against a bank fact that is not a DBIT refuses wrong_direction. A line that is no longer open refuses line_not_open. Idempotent per key. CONSEQUENCE: Settles the bank debit against its vendor bills, or matches it to an entry already in the books. If it is wrong, you reopen the bank line and reverse what it booked.

NameRequiredDescriptionDefault
entryIdNo
bankTxnIdYes
allocationsNo
workspaceIdYes
vendorBillIdNo
idempotencyKeyYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already give idempotentHint=true and destructiveHint=false, yet the description adds real context beyond them: the surplus-parks-as-Guthaben behavior, the wrong_direction and line_not_open refusal conditions, and the CONSEQUENCE clause explaining that a wrong settlement is undone by reopening the bank line and reversing what it booked. This is meaningful operational disclosure despite the rewording of idempotency that repeats the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single dense run-on packed with internal codes ('A20', 'A14's record_payment') that is not front-loaded with a plain statement of what the tool does; the useful CONSEQUENCE block only arrives at the end. The information earns its place, but the structure and jargon make it slower to parse than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 6-parameter settlement tool with 0% schema coverage and no output schema, the description covers the two modes, the surplus handling, the refusal cases, and reversibility. The main gap is that it never indicates what a successful call returns, but behavioral coverage is otherwise strong for a mutation of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden and does so for the hard parameters: vendorBillId is 'an open_item booking', allocations[] is 'for a multi-bill split', and entryId requires that the entry book this line's bank account with the same signed amount and not back another line. It leaves bankTxnId, workspaceId, and the nested targetId/amountMinor implicitly or entirely undocumented, but the ambiguous params are well served.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb set (settle or match) and resource (an outgoing bank DEBIT against vendor bills or an existing journal entry), and explicitly frames itself as a 'wrapper over book_bank_line', which separates it from that sibling. The opening 'A20's decision verb' is opaque internal jargon, but the operative clause is clear enough to identify the tool's job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It distinguishes two invocation paths (supply vendorBillId/allocations to settle, or entryId to match an already-booked entry), which implicitly guides selection. However, it never states when to prefer this over book_bank_line, match_bill, or suggest_bank_lines, and gives no exclusions — the when-to-use is embedded in jargon rather than stated as a routing rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

confirm_statement_gapA
DestructiveIdempotent

Confirm that nothing is missing in a statement gap of a Bankkonto (A36 §4.7, D150): the day-end statements afterStatementId and beforeStatementId are neighbours in the books, their numbers skip, and the later one opens exactly on the earlier one's closing balance (difference 0), so the skipped numbers are days without bookings or bookings that cancel out. Human only: a person at the button passes confirmed=true and a reason; an agent seat is refused human_only (propose it to the person instead). Refuses gap_has_waiting_statement when a downloaded statement inside the gap does not chain (it proves money the books do not explain), and gap_not_chained when the balances do not chain (the missing statements carry money that is not in the books: import them, such a gap can never be confirmed) and gap_not_found when the gap was filled or the two statements are not neighbours. Appends one confirmation row and its audit entry; changes no statement and posts nothing. A confirmed gap leaves bank_channel_status statementGaps and the attention hub; a statement found later still imports. Idempotent per key; a gap already confirmed answers alreadyConfirmed. CONSEQUENCE: Records that the missing bank statements between two statements hold no money, so the gap stops waiting for you. You can withdraw this, and a statement found later still imports.

NameRequiredDescriptionDefault
reasonYes
confirmedNo
workspaceIdYes
bankAccountIdYes
idempotencyKeyYes
afterStatementIdYes
beforeStatementIdYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations: it explains the append-only audit effect, that no statement is changed and nothing is posted, how bank_channel_status and the attention hub are affected, and that a later-found statement still imports. It also documents idempotency and the alreadyConfirmed response, which is exactly the behavioral context an agent needs for a state-changing operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but mostly front-loaded: purpose first, then refusal conditions, human-only restriction, side effects, and consequence. It is long for a single paragraph, and some material is repeated in the CONSEQUENCE section, but the length is justified by the complexity of the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complex domain, multiple refusal paths, human-only constraint, and absence of an output schema, the description supplies the missing context an agent needs: what the tool verifies, who may call it, what it changes, what it refuses, and what happens afterward.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains the core semantics of afterStatementId and beforeStatementId as neighbouring statements whose numbers skip and balances chain, and it explains confirmed=true and reason in the human-only path. It does not explicitly describe workspaceId, bankAccountId, or idempotencyKey beyond the idempotency behavior, so it is strong but not fully compensating.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: confirming that nothing is missing in a statement gap, with the exact accounting condition that must hold. It also distinguishes this from merely filling or revoking a gap by describing the chaining and skipped-number logic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says the tool is human only: a person must pass confirmed=true plus a reason, while an agent seat is refused human_only and should propose the action to a person. It also lists the refusal conditions (gap_has_waiting_statement, gap_not_chained, gap_not_found), which tells the caller when not to use or expect success.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contacts_anonymiseA
DestructiveIdempotent

Anonymise a contact on a valid revDSG deletion request, bounded by OR 958f: blanks the personal fields and redacts the activity bodies while keeping the row ids so posted-document FKs stay intact. Erases the whole merge identity (the contact plus every duplicate merged into it), so pass the SURVIVOR: a merge tombstone is refused and names it. Refuses while any unsettled receivable or obligation is still live (draft, issued, sent, accepted, confirmed, partially_paid), because an unpaid claim is an overriding interest and OR 958f Abs. 3 needs the retained record to stay readable. CONSEQUENCE: Erases this person's personal data and the notes about them, merged duplicates included, once nothing is still open with them. Booked documents stay on record without those details; there is no way back.

NameRequiredDescriptionDefault
contactIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint/idempotentHint annotations: discloses exactly what is erased (personal fields, activity bodies, merged duplicates), what is preserved (row ids, posted-document FKs, booked documents), the refusal conditions, and that there is 'no way back'. This is precisely the extra context the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, effect, then consequence, with a clear CONSEQUENCE marker at the end. It is dense but slightly over-written — the OR 958f Abs. 3 rationale for refusing on unpaid claims is restated at length and could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, irreversible mutation with no output schema and near-zero schema documentation, the description covers scope, refusals, side effects and irreversibility thoroughly. Only the idempotencyKey contract and workspaceId scoping are left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It clarifies contactId semantics well (must be the merge survivor; tombstones are refused), but workspaceId and idempotencyKey are never mentioned, leaving the required idempotency contract unexplained for a destructive tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Anonymise a contact') plus the legal trigger ('valid revDSG deletion request, bounded by OR 958f') and the concrete effect ('blanks the personal fields and redacts the activity bodies'). An agent can immediately distinguish this from archive_contact or contacts_merge.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions ('on a valid revDSG deletion request') and explicit refusal cases (merge tombstone, live unsettled receivable/obligation with the status list). It also instructs to pass the SURVIVOR id, which implicitly routes merge handling elsewhere, but it never names a sibling alternative such as archive_contact or contacts_merge explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contacts_importA
Idempotent

Import already-parsed contact rows with duplicate detection. Each row is validated like create_contact; rows matching an existing contact on email, UID, or name+postcode come back in duplicates[] (never auto-merged) so the operator resolves each. Returns {created, createdIds, skipped, duplicates}.

NameRequiredDescriptionDefault
rowsYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral detail beyond annotations: rows are validated like create_contact, duplicate matching is on email, UID, or name+postcode, and matches are never auto-merged. This clarifies the non-destructive/idempotent semantics the annotations only hint at. It stops short of stating rate limits, workspace-scope effects on validation, or partial-failure behavior (does one bad row abort the import?).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, then duplicate-handling semantics, then return shape. No filler and the most decision-relevant fact (no auto-merge) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Good on duplicate semantics and return keys, but there is no output schema, so the description must carry the return contract alone and only names four keys without types or edge cases. The row shape and failure/validation-error behavior for a bulk import remain undocumented — a meaningful gap for a 3-required-param mutation with 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and all three parameters are bare (rows is just an untyped array, idempotencyKey and workspaceId undocumented). The description mentions 'rows' and implies row structure ('validated like create_contact') but never explains the row columns, what idempotencyKey deduplicates on, or workspaceId scoping. It only partially compensates for a significant schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Import already-parsed contact rows') plus a distinguishing qualifier ('already-parsed'), and names the return shape. It is clearly distinguishable from siblings like create_contact (single record) and resolve_possible_duplicate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (bulk import of pre-parsed rows, operator resolves duplicates) but never explicitly says when to use this instead of create_contact, nor states preconditions such as requiring a prior parse/extract step or the operator being present. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contacts_log_activityA

Log a note, call, email, meeting or task on a contact (the OP5 activity seam). occurredAt may be backdated but never future-dated; the stream is append-only (a wrong note is corrected by a new note). kind is one of note|call|email|meeting|task.

NameRequiredDescriptionDefault
bodyYes
kindYes
dealIdNo
contactIdYes
occurredAtNo
workspaceIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations carry only destructiveHint=false, so the description is doing real work: it states that occurredAt can be backdated but not future-dated, and that the stream is append-only so mistakes are corrected by a new note rather than an edit or delete. That is genuine behavioral context an agent could not infer. It stops short of covering the idempotency/duplicate-submission behaviour, which matters for an append-only stream.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the action, and every clause after the first carries information. The parenthetical '(the OP5 activity seam)' is internal jargon that consumes space without helping an agent decide or call correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation with no output schema, no schema descriptions and thin annotations, the description leaves meaningful gaps: it says nothing about return value, nothing about what happens on duplicate submission, and nothing about dealId's role in linking activity to a deal. It is adequate to start the call but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does partially: it enumerates 'kind' as note|call|email|meeting|task and explains occurredAt's backdating constraint, genuinely adding meaning beyond a bare string type. However four of seven parameters (workspaceId, contactId, dealId, idempotencyKey) get no treatment at all, and idempotencyKey in particular is left unexplained despite being the retry-safety control on an append-only write.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb ('Log') plus resource ('a note, call, email, meeting or task on a contact') makes the action unmistakable, and 'on a contact' implicitly separates it from the deals-oriented sibling deals_log_activity. It never names that sibling or contacts_timeline explicitly, so an agent must infer the routing rather than read it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes context (recording an activity against a contact) but gives no when-not guidance and never routes the agent to alternatives. The overlap with tasks_create for the 'task' kind, and with deals_log_activity for deal-scoped notes, is left unaddressed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contacts_mergeA
Destructive

Merge a duplicate contact into a survivor: re-points every live foreign key that names the source (documents, activities, employer links) to the target and tombstones the source. No posting and no journal effect. It does NOT freeze what an already-issued invoice re-renders as: A11 keeps no snapshot and reads the live contact row, so the survivor identity is what a re-rendered QR-bill carries. When the two roles differ the survivor is promoted to partyRole "both" and the result says so. Idempotent; a self-merge or a tombstone target is refused. CONSEQUENCE: Moves the duplicate's documents, activities and links onto the contact you keep, and retires the duplicate. A merge cannot be split again.

NameRequiredDescriptionDefault
sourceIdYes
targetIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only destructiveHint=true, so the description carries the burden and does so well: it discloses FK re-pointing, tombstoning, role promotion to 'both', refusal conditions, idempotency, the invoice re-render consequence, and irreversibility ('cannot be split again'). This is rich context beyond the single annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Core action is front-loaded in the first clause, followed by caveats. The trailing 'CONSEQUENCE' sentence largely restates the opening, and the 'A11' reference is jargon-heavy, but the density is mostly earning its place for a destructive merge.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers behavior, refusals, irreversibility, and even what the result reports ('the result says so'), which is important absent an output schema. The gap is parameter-level: for a destructive merge the agent should know workspaceId scoping and idempotencyKey semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It conveys the semantics of source (the duplicate being retired) and target (the survivor), but never explains workspaceId scope or idempotencyKey, and doesn't state the required-vs-optional difference. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Merge a duplicate contact into a survivor') and immediately enumerates the scope: re-point live foreign keys (documents, activities, employer links) and tombstone the source. It is clearly distinct from siblings such as archive_contact or resolve_possible_duplicate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the preconditions clearly: idempotent, a self-merge or a tombstone target is refused. It also rules out journal concerns ('No posting and no journal effect'), which tells the agent this is not an accounting operation. It does not, however, name an alternative tool for the 'find duplicates first' or 'just retire without merging' cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contacts_tagA
Destructive

Tag a contact: merge role and segment values into its roles/segments (deduplicated, case-preserving). Unlike update_contact, which sets the arrays absolutely, this UNIONS the new values into the existing set. Tags are free-text (trimmed, at most 40 chars each, at most 50 per contact), never a fixed enum.

NameRequiredDescriptionDefault
rolesNo
segmentsNo
contactIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=true available in annotations, the description does meaningful work: it discloses union (not replace) semantics, deduplication, case preservation, trimming, and the 40-char/50-per-contact limits. It does not, however, say what happens when the 50-tag cap is exceeded, nor does it reconcile the additive framing with the destructiveHint flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler: purpose and effect first, sibling differentiation second, input constraints third. Every sentence conveys information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description should indicate what comes back (the updated contact or the resulting tag set), and it does not. Combined with the unaddressed idempotencyKey and undefined over-limit behavior, it is adequate but leaves real gaps for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the full load. It richly documents the roles and segments parameters (free-text, trimmed, max length, max count, dedup, case preserved) but says nothing about contactId, workspaceId, or idempotencyKey — the latter being material for safely retrying a mutation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Tag a contact') and immediately defines the exact effect: merging role/segment values into existing roles/segments arrays. It explicitly contrasts with update_contact, so an agent can tell the two contact-mutation tools apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Unlike update_contact, which sets the arrays absolutely' clause gives a clear selection rule: use this for additive tagging, use update_contact for replacement. It stops short of an explicit 'use this when / do not use when' or mention of related siblings (contacts_merge, contacts_import), so the guidance is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contacts_timelineA
Read-only

Read a contact's activity timeline, newest first (P5). Following a merge chain, a read of a merged-away contact returns the survivor's consolidated timeline.

NameRequiredDescriptionDefault
contactIdYes
workspaceIdYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the 'newest first' ordering and the merge-chain behavior, which are useful behavioral traits beyond the readOnlyHint annotation. It does not contradict the annotation and adds context about what happens with merged contacts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no fluff. It front-loads the primary purpose and then adds a relevant edge-case behavior. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with two parameters and no output schema, the description covers ordering and merge behavior. It does not mention pagination or limits, but these are minor for a read operation. Overall, it provides sufficient context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero description coverage for both parameters. The description mentions 'a contact's timeline', implicitly referencing contactId, but never explains workspaceId or any parameter format or constraints. It fails to compensate for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Read a contact's activity timeline, newest first'. It also adds behavioral detail about merge chains. However, it does not explicitly differentiate from sibling tools like contacts_tag or contacts_log_activity, though the 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for reading a contact's timeline but provides no explicit guidance on when to choose this over alternatives (e.g., contacts_log_activity). The merge-chain note hints at a specific scenario but does not serve as a clear usage guideline or exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_documentA

Convert an accepted quote to an order or invoice (or a confirmed order to an invoice), linking the source.

NameRequiredDescriptionDefault
toTypeYes
documentIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only declare destructiveHint=false. The description adds useful behavioral context by stating the valid source states and that the source is linked, but it does not disclose permissions, reversibility, side effects on the source document, or idempotency behavior despite an idempotencyKey parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence that communicates the main operation and conditions without filler. It is appropriately sized for a conversion tool with structured parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core conversion paths and source linking, enough for an agent to understand the intended operation. However, with 0% schema parameter coverage and no output schema, it leaves notable gaps around workspaceId, idempotencyKey, and what the conversion returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It partially covers toType by naming invoice/order targets and indirectly suggests documentId as the source document, but it does not explain workspaceId or idempotencyKey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific conversion operation and names the allowed source/target states: accepted quote to order or invoice, and confirmed order to invoice. It is clear what the tool does, though the generic name convert_document and the existence of siblings like quotes_convert and sales_order_from_quote mean it stops short of explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context by requiring the source document to be an accepted quote or confirmed order and specifying the target document types. It does not explicitly say when not to use it or name alternative sibling tools, so it is strong but not fully resolving.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

costing_budget_vs_actualA
Read-only

Budgetvergleich (budget vs actual) for one project, in the workspace base currency: the B00 budget (the H-FX base snapshot where one was taken) against B03's cost-to-date (time at snapshot rates plus posted project bills plus the received-not-billed purchase accrual, the same terms B00's own budget seam reports), with remainingMinor, consumedBp (basis points, rounded once), logged hours vs budgetHours, and the overBudget flag. A project without budget fields answers budgeted:false and cost-to-date only, never a fake 0-budget overrun. remainingMinor goes negative on overrun, which an automation rule can read as condition data to fire an existing action (B03 emits no events of its own).

NameRequiredDescriptionDefault
asOfNo
projectIdYes
workspaceIdYes
includeOpenTimeNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description reveals important behavior: no fake zero-budget overrun, negative remainingMinor on overrun, rounding of consumedBp, inclusion terms for cost-to-date, and the absence of B03 events. This gives an agent reliable expectations for what a successful read will and will not do.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and packs many useful details without filler, and the core purpose appears first. It is long and somewhat parenthetical, but every sentence adds needed domain context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by listing the returned fields and key edge cases, and it explains currency and automation integration. It is complete for the required call path, though the optional parameter semantics and lack of an explicit return shape keep it just short of fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description compensates by explaining workspaceId's base-currency context and projectId's project-level scope, while also hinting at temporal aspects through snapshot and cost-to-date language. However, asOf and includeOpenTime are never explicitly explained, so those two optional parameters still rely on name inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this returns a budget-vs-actual comparison for a single project in the workspace base currency, and it names the specific output metrics such as remainingMinor, consumedBp, and overBudget. It is precise about scope and calculation, though it does not explicitly distinguish itself from close siblings like project_budget_actual.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It communicates a concrete automation use case (reading remainingMinor as condition data) and explains behavior on missing budget fields, so an agent can infer when the tool is relevant. However, it never names alternatives or gives explicit when-to-use vs. when-not-to-use guidance relative to the many costing and reporting siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

costing_drilldownA
Read-only

Die Belege hinter dem Projekterfolg: the raw contributing rows for ONE component ('time' | 'expenses' | 'purchases' | 'accrued_purchases' | 'committed' | 'revenue'), so every Rappen of the margin resolves to its source: time entries with snapshot rates and minutes, posted vendor bills with their postedEntryId, PO lines with quantity and base unit price, posted invoice lines and credit-note lines with their postedEntryId (the OR 957a traceability chain into the journal). Keyset-paginated (cursor/nextCursor, limit up to 500); totalMinor is the whole component and equals the card figure exactly, same code path. A component whose source rows carry no project reference answers zero rows with unattributable:true (none does today). An unknown component answers invalid_component.

NameRequiredDescriptionDefault
asOfNo
basisNo
limitNo
cursorNo
groupByNo
componentYes
projectIdYes
workspaceIdYes
includeOpenTimeNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only readOnlyHint=true in annotations, the description adds substantial behavioral context: keyset pagination via cursor/nextCursor, limit up to 500, totalMinor matching the card figure exactly, same code path guarantee, the unattributable:true edge case, and invalid_component for unknown components. No contradiction with the readOnly annotation exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense and almost every clause adds a distinct fact, including pagination, traceability, and edge-case behavior. It is slightly run-on and mixes languages, and contains an odd 'OR 957a' fragment, but it remains well front-loaded and free of fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only drilldown, the description covers the main behavioral surface: source-row kinds, pagination, totals, and error/edge cases. Without an output schema it could go further on exact response field names or the meaning of ambiguous parameters like `basis` and `groupBy`, but the essential invocation context is largely present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does document the central `component` parameter's allowed values and explains `cursor`, `nextCursor`, and `limit`. However, it leaves several parameters meaningfully unexplained, including `asOf`, `basis`, `groupBy`, and `includeOpenTime`, and never clarifies the required `workspaceId`/`projectId` semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific operation: returning raw contributing rows for one of six enumerated components, and gives concrete examples of source rows (time entries, vendor bills, PO lines, invoice lines). It is clearly distinguishable from the costing_project_pl/costing_budget_vs_actual siblings by focusing on row-level drilldown rather than period totals, though it never explicitly names those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys when this tool is useful: to make every margin figure resolvable to source documents and to get a component-specific drilldown. However, it provides no explicit guidance about when to use an alternative like costing_project_pl or costing_pl_list, and no 'do not use when' conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

costing_pl_listA
Read-only

Projekterfolg-Portfolio (P&L list): one revenue/cost/margin summary row per project, margin-sorted (die Marge, descending), the read that answers "welche Projekte oder Mandate tragen?". Closed projects are excluded unless status='closed' asks for them; any single B00 status filters exactly. A project with foreign-currency rows degrades to fxBaseMissing:true instead of blanking the portfolio. savedViewId applies a G00 saved view over the project entity kind: its stored filters merge underneath any filter named explicitly here. Same computation and same honesty flags as costing_project_pl (basisDegraded when a cost-basis entry lacks a cost rate).

NameRequiredDescriptionDefault
asOfNo
basisNo
statusNo
savedViewIdNo
workspaceIdYes
includeOpenTimeNo

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses significant non-obvious behaviors: margin-descending sort, closed-project exclusion unless status='closed', exact B00 filtering, degradation to fxBaseMissing for foreign-currency rows, saved view filter merging, and the basisDegraded honesty flag shared with costing_project_pl. These details substantially exceed the annotation baseline and materially aid an agent in interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and information-rich, covering many edge cases, but it mixes German and English and uses cryptic codes (B00, G00) without explanation. The structure is logical—output shape, filtering, degradation, saved views, shared computation—but the phrasing is not lean and some sentences are overloaded. It earns its place but sacrifices readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, no output schema, no parameter descriptions), the description covers the output shape and several behavioral edge cases, but leaves core parameters undefined and does not describe the exact return fields. An agent can call it correctly for the covered filters but may misuse asOf, basis, or includeOpenTime. Incomplete but not severely so.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for all 6 parameters. It explains only status (via closed/B00 semantics) and savedViewId (merge behavior). The parameters asOf, basis, includeOpenTime, and workspaceId are never mentioned, leaving an agent guessing about their meaning and accepted values. This is a major gap for a tool with no schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it reads a portfolio of project P&L summaries, one row per project, sorted by margin descending. It directly answers the business question 'welche Projekte oder Mandate tragen?', and references sibling costing_project_pl to place itself as the portfolio-level version of the same computation, distinguishing it without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: this is the read for portfolio-level project profitability, with explicit filter semantics for closed projects, B00 status, and saved view merging. It does not explicitly name alternatives or say when not to use it, but the referenced costing_project_pl and the portfolio framing imply the boundary. No contrary usage guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

costing_project_plA
Read-only

Projekterfolg (project P&L card): revenue vs cost for ONE project in integer Rappen, recomputed live from the source rows on every call (pure read, B03 posts nothing and caches nothing). Cost splits into time | expenses | purchases | accrued_purchases: 'time' is B01 entries at their OP1 snapshot rate (approved and beyond; includeOpenTime widens to open/submitted WIP), 'expenses' and 'purchases' are POSTED project-tagged A17 vendor bills at stored base net (purchases when 3-way matched to a D02 PO, expenses otherwise), 'accrued_purchases' is received-not-yet-billed project-tagged D02 quantity at PO base price (it drops as the matched bill posts, so no Rappen counts twice). committedMinor (ordered minus received on open POs) reports BESIDE the cost, never inside it. Revenue counts POSTED invoice lines generated from this project's time (B02's linkage), net of posted credit notes; drafts never count. marginBp is null when revenue is 0, never a fake break-even. basis 'bill' or 'cost': 'cost' values time at the rate card's cost-rate snapshot and falls back per entry to the bill rate with basisDegraded true where none was defined. asOf cuts every component by its source date. groupBy re-buckets the time component by a confirmed select custom field on time_entry without moving any total. A row priced in a non-base currency answers fx_base_missing rather than mixing currencies.

NameRequiredDescriptionDefault
asOfNo
basisNo
groupByNo
projectIdYes
workspaceIdYes
includeOpenTimeNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, so the read-only behavior is known. The description adds significant context about what gets computed and excluded, such as 'pure read, B03 posts nothing and caches nothing', which goes beyond annotations. However, it doesn't clarify auth or rate limits, but given the readOnlyHint, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and information-packed, but it's long. It front-loads the core purpose and read-only nature, with detailed explanations of cost components and parameters. Each sentence adds value, so it's appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and lack of output schema, the description covers the key semantics: cost splits, revenue handling, margin behavior, basis options, and parameter effects. The main gap is lack of return structure, but without an output schema, the description compensates well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description explains several parameters in depth: 'basis' (bill vs cost), 'includeOpenTime' (widens to open/submitted WIP), 'asOf' (cuts components by source date), 'groupBy' (re-buckets time). It does not explicitly explain 'workspaceId' and 'projectId', but those are obvious. This compensates for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool computes the project P&L (revenue vs cost) for ONE project, details the cost splits, specifies that it's a pure read, and differentiates it from siblings like costing_drilldown and costing_budget_vs_actual by mentioning 'ONE project' and 'recomputed live from source rows'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the behavior in detail but does not explicitly state when to use this tool vs alternatives like costing_drilldown or costing_pl_list. It implies usage (for a single project P&L card) but doesn't name alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_accountC
Destructive

Create a ledger account.

NameRequiredDescriptionDefault
nameYes
typeYes
numberYes
workspaceIdYes
idempotencyKeyNo
vatCodeDefaultNo
costCenterAllowedNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Only the annotation destructiveHint=true carries behavioral weight, and the description does not explain it. It omits what happens on duplicate account numbers, whether creation is idempotent (an idempotencyKey parameter exists but is not explained), and whether the account is immediately postable or inactive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence with no filler, but this is under-specification rather than conciseness. Nothing is front-loaded beyond the bare verb and resource, so the brevity provides no structural benefit.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter domain mutation with no output schema and 0% schema documentation, the definition should describe the required fields' meaning and the created account's state. Given the complexity, the description is far too thin to let an agent call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters (4 required), and the description names none of them. Critical ambiguity is left unaddressed: what values 'type' accepts, what format 'number' takes, what 'vatCodeDefault' or 'costCenterAllowed' do, and how idempotencyKey is used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Create') and resource ('ledger account'), which is clearly distinct from sibling tools like list_accounts or update_account. It does not, however, explicitly differentiate itself from the surrounding account lifecycle tools (archive_account, unarchive_account, delete_account), leaving that inference to the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus update_account, archive_account, or bootstrap_workspace/set_fiscal_config setup flows. No prerequisites (e.g. account number uniqueness, whether the workspace/chart-of-accounts must exist) are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_automation_ruleA
Destructive

Define an automation: when this event happens, and this condition holds, call this write verb with this input. The action must name a registered write verb, the trigger must name a registered event, and a rule whose action is the very verb that emits its own trigger is refused outright. A rule created by the agent actor lands DISABLED and a human must enable it. CONSEQUENCE: Creates the automation rule; once enabled, it runs its action in its author's name on every matching event, unattended. You can disable or archive it; what it already did stays done.

NameRequiredDescriptionDefault
nameYes
actionYes
enabledNo
triggerYes
conditionNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry destructiveHint=true, and the description adds substantial context beyond that: agent-authored rules land DISABLED pending human enablement, the rule runs unattended in its author's name on every match, and disable/archive stop future runs but cannot undo past effects. That is exactly the lifecycle, authority, and irreversibility information an agent needs for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the definition, then constraints, then an explicitly labeled CONSEQUENCE block. Dense but nearly every clause carries distinct information; the CONSEQUENCE section slightly restates the action behavior already introduced.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation with nested objects and no output schema, the description covers lifecycle, default disabled state, authority of execution, and reversibility. It omits any mention of what is returned and the meaning of several scalar parameters, which keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning; it explains the two most complex nested objects (trigger = registered event, action = registered write verb plus its input) and implies condition. It leaves workspaceId, name, enabled, and idempotencyKey entirely undocumented, so compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opening sentence gives a precise verb+resource with the full rule shape (event triggers, condition gates, action fires), which no sibling can be confused with. It is clearly distinguished from update_automation_rule, enable_automation_rule, and archive_automation_rule by being the definition/creation step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states concrete preconditions for use: the action must name a registered write verb, the trigger must name a registered event, and a self-triggering rule is refused outright. It does not explicitly name the alternative siblings (update/enable/archive) or when to prefer them, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_backupA
Idempotent

Take a point-in-time .tillbackup snapshot: a tenant-scoped SQLite file plus a re-hashed manifest, recorded in the backup history. The byte-perfect artifact restore_backup consumes. An optional planId links the backup to a Datenübernahme plan (once it has reached planned), satisfying the migration commit gate’s pre-migration-backup leg; a planId in another workspace refuses.

NameRequiredDescriptionDefault
planIdNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, yet the description adds genuine context: what physically gets produced (SQLite file + re-hashed manifest), that it is recorded in backup history, and an explicit refusal case ('a planId in another workspace refuses'). It does not cover permissions/tenant authority or how repeated idempotencyKey calls behave beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The identity of the tool and the artifact come first, followed by the restore relationship and then the optional planId branch — good front-loading with no filler. Minor cost: the planId sentence is long and packs a German domain term plus a gate reference into one clause, slightly raising reading load.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with zero schema coverage and no output schema, the description explains the artifact well but leaves gaps: no mention of idempotencyKey semantics (despite being required), and no statement of what the call returns (e.g. a backup id/handle usable with restore_backup or verify_backup). An agent can act, but not fully predict the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains planId thoroughly — its purpose, the required plan state ('planned'), and the cross-workspace refusal — and 'tenant-scoped' hints at workspaceId. But the required idempotencyKey is never mentioned anywhere, leaving one of two required parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and artifact: 'Take a point-in-time .tillbackup snapshot' consisting of a tenant-scoped SQLite file plus a re-hashed manifest recorded in backup history. It also explicitly positions the output against the sibling that consumes it ('The byte-perfect artifact restore_backup consumes'), so an agent can separate it from restore_backup, list_backups, and verify_backup without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear condition for the optional planId: it links the backup to a Datenübernahme plan that has reached 'planned' and satisfies the migration commit gate's pre-migration-backup leg. That is real when-to-use guidance for the non-trivial path. It does not say when a plain backup without planId is appropriate versus list_backups/verify_backup, so there is no explicit exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_bank_accountA

Register a Bankkonto: validates the IBAN (ISO 13616 mod-97), derives whether it is a QR-IBAN (QR-IID 30000 to 31999, receive-only), and links it to an asset account in the chart (ledgerAccountId, e.g. 1020 Bankkonto). Does NOT set an opening balance: that is set_bank_opening_balance. CONSEQUENCE: Registers a bank account with its IBAN and ledger account, so payment runs and bank imports can use it; nothing is booked. You can fix its details until an opening balance is posted, or archive it.

NameRequiredDescriptionDefault
ibanYes
nameYes
currencyNo
workspaceIdYes
idempotencyKeyNo
ledgerAccountIdYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the lone destructiveHint=false annotation, the description discloses validation behavior (ISO 13616 mod-97), implicit QR-IBAN receive-only semantics, that nothing is booked, that details can be edited until an opening balance is posted, and that the account can be archived. This is substantive behavioral context an agent could not infer from the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The response is dense but front-loaded with the core action, then structured into validation, linking, exclusion, consequence, and lifecycle notes. No sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no output schema and minimal annotations, the description covers the critical semantics: validation, ledger linking, side effects, editability, and archiving. It falls short on idempotency and currency/workspace parameter behavior, but an agent has enough to call it correctly in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It does well for iban (mod-97 validation, QR-IID range) and ledgerAccountId (example 1020 Bankkonto), but name, currency, workspaceId, and especially idempotencyKey are left unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Register a Bankkonto') and immediately adds differentiating behavior: IBAN validation, QR-IBAN derivation, and ledger-account linking. It explicitly contrasts with a sibling ('that is set_bank_opening_balance'), so the agent can distinguish it without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly frames the tool as the creation step and names the alternative for opening balances. It does not spell out the full create/update/archive lifecycle in prescriptive terms, but the intended use is clear from the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_contactC

Create a customer/vendor contact. paymentTermsDays is its own Zahlungsfrist in days: omit it and its documents fall due after the workspace default (update_company_profile), 0 means due immediately.

NameRequiredDescriptionDefault
nameNo
emailNo
addressNo
partyRoleYes
vatNumberNo
descriptionNo
workspaceIdYes
idempotencyKeyNo
defaultCurrencyNo
paymentTermsDaysNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare only destructiveHint=false, so the description carries most of the burden. It does add genuinely useful behavior for paymentTermsDays (inherits the workspace default, 0 means due immediately), but says nothing about duplicate handling, what idempotencyKey guarantees, or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the purpose leads and the parameter nuance follows. Nothing is wasted, though the second sentence is the only place meaning is added.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter create tool with a nested address object, 0% schema coverage and no output schema, the description leaves most of the calling contract to guesswork: partyRole values, idempotency semantics and duplicate behavior are all absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for 10 undocumented parameters, and it explains only one (paymentTermsDays, done well). Required fields like partyRole get no value guidance, and address, idempotencyKey, defaultCurrency and vatNumber are entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Create a customer/vendor contact" gives a specific verb and resource that distinguishes it cleanly from get_contact, list_contacts, update_contact and the other contact siblings. It does not explicitly name an alternative, but the create verb alone is unambiguous here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus update_contact, contacts_merge or contacts_import, and no prerequisites or exclusions are given. The only usage-like guidance is about omitting paymentTermsDays, which is parameter behavior rather than tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_cost_centerC
Destructive

Create a cost centre (Kostenstelle).

NameRequiredDescriptionDefault
codeYes
nameYes
workspaceIdYes
idempotencyKeyNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations supply only destructiveHint=true, which is itself puzzling for a create operation, so the description carries most of the burden and discloses nothing: not whether the code must be unique, not what happens on duplicate code, not how idempotencyKey affects retries, not what permissions are needed. The one useful behavioral fact — that idempotency is supported — is visible only as a parameter name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with zero waste and the verb front-loaded, which is structurally sound. However, the brevity here reflects under-specification rather than discipline — there is no second sentence of substance to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with no output schema, no meaningful annotations beyond a confusing destructiveHint, and 0% parameter documentation. An agent cannot know what a successful call returns (the new ID?), whether codes collide, or how idempotencyKey should be populated — all of which the description should cover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters. The description mentions none of them, so the agent gets no meaning for 'code' vs 'name' (uniqueness? format?), no explanation of workspaceId scoping, and no hint that idempotencyKey exists to make retries safe.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Create a cost centre'. The German synonym '(Kostenstelle)' helps with domain vocabulary. It is clearly distinct from siblings like list_cost_centers, archive_cost_center, and delete_cost_center, though the differentiation comes only from the tool name rather than from the description itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this instead of the archive/unarchive/delete siblings, no prerequisites, no mention of what workspace context is required. The agent must infer everything 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.

create_credit_noteA
DestructiveIdempotent

Draft a Gutschrift against an issued invoice: full, selected positions (reduced quantities), or a net amount apportioned over the remaining line nets. Always a draft; issuing is a separate, confirmed step (P8).

NameRequiredDescriptionDefault
modeNo
linesNo
reasonNo
amountMinorNo
workspaceIdYes
fromInvoiceIdYes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, so the safety profile is partly covered. The description adds meaningful context beyond this: the draft-only nature (nothing is finalized) and how the net-amount mode apportions over remaining line nets, which clarifies the tool's actual effect. Minor tension exists with destructiveHint=true for a 'draft', but this is not a contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the core action and back-loaded with the crucial draft/issuing constraint. No filler; the phrase 'apportioned over the remaining line nets' earns its place by conveying calculation behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter creation tool with a nested lines array, no output schema, and 0% schema coverage, the description covers purpose and the draft workflow but omits the 'reason' field, allowed mode values, and what the draft result contains. Adequate but with clear gaps an agent would hit at call time.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load. It explains the three logical modes that map to mode/lines/amountMinor and describes the reduced-quantity line concept, which adds real value. But it leaves workspaceId, fromInvoiceId, idempotencyKey and reason undocumented, and never names allowed mode values, so it only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Draft a Gutschrift against an issued invoice') and enumerates the three supported modes (full, selected positions with reduced quantities, or net amount apportioned). It implicitly distinguishes itself from the issuing step ('issuing is a separate, confirmed step'), though it does not name the sibling issue_credit_note directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Always a draft; issuing is a separate, confirmed step' clause implies the two-step workflow and tells the agent this is the drafting phase. However, there is no explicit 'use this when X, use issue_credit_note when Y' routing, and preconditions (invoice must be issued, etc.) are only hinted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_demo_workspaceA
DestructiveIdempotent

Mint a disposable demo workspace (workspace.kind = demo) and seed it with sample Swiss books through the real verbs: chart auto-seed, MWST effektiv/Soll, three customers, three items, two issued invoices and one draft, every posting through issue_invoice, so the demo behaves identically to a real workspace. The caller is seated as owner. No MWST number or UID is fabricated; the creditor profile carries the SIX specimen QR-IBAN. A demo can never go productive: its only exit is discard_demo_workspace. Idempotent: retrying the same key returns the existing demo, never a second one.

NameRequiredDescriptionDefault
nameNo
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With idempotentHint and destructiveHint already set, the description adds substantial context: retrying the same key returns the existing demo (never a second), the caller is seated as owner, no MWST/UID is fabricated, the SIX specimen QR-IBAN is used, and the demo's only exit is discard_demo_workspace. This goes well beyond what the annotations declare.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and demo scoping are front-loaded in the first sentence, and the lifecycle/idempotency constraints are grouped at the end. It is a dense paragraph with a worthwhile seeding spec, though the itemized seed contents (three customers, two invoices, etc.) border on over-detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description covers what is created, ownership, safety constraints, lifecycle, and idempotency — enough to call it correctly. The main omissions are the meaning of the `name` parameter and any indication of the returned handle for the new workspace.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden. It explains the idempotencyKey semantics implicitly ('retrying the same key returns the existing demo'), which is genuinely useful, but never names the parameter, and the optional `name` parameter is not described at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (mint) plus resource (disposable demo workspace, workspace.kind = demo) and enumerates exactly what gets seeded. It is clearly distinguishable from create_workspace, bootstrap_workspace, and discard_demo_workspace without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Establishes the demo use case and names the only exit path (discard_demo_workspace), and the 'can never go productive' line is effectively a when-not-to-expect-production caveat. It stops short of explicitly contrasting with create_workspace / bootstrap_workspace for real workspaces, so an agent must infer that boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_documentC
Destructive

Create a document draft (quote, order, invoice, or credit note) with positions.

NameRequiredDescriptionDefault
typeYes
linesNo
notesNo
dueDateNo
currencyNo
contactIdNo
supplyDateNoDocument-level Leistungsdatum (ISO YYYY-MM-DD). A line's own supplyDate wins; absent (or null on update) means the issue date.
workspaceIdYes
idempotencyKeyNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true, but the description gives no behavioural context: nothing about idempotency (an idempotencyKey parameter exists but is unexplained), what the draft state means for downstream issue/transition, or what could be overwritten. "Draft" is the only mitigating signal, and it sits in mild tension with a destructive hint that is neither explained nor contradicted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or repetition. It is efficient, though its brevity is partly under-specification given the tool's 9-parameter surface.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation tool with 11% schema coverage, no output schema, and a large family of overlapping document-creation siblings, the description is far too thin. An agent still cannot tell which fields are required, how lines and document-level dates interact, or what a successful call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 11% (just supplyDate), so the description needs to carry the load and does not. "With positions" hints at the lines array and the enumerated types clarify the type field, but currency, contactId, dueDate, notes, and idempotencyKey remain undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb and resource ("Create a document draft") with an explicit enumeration of the four document types and the "with positions" modifier, which tells an agent what a complete call produces. It does not, however, distinguish this generic creator from sibling creators such as quotes_create, sales_order_create, create_credit_note, or issue_invoice, leaving the agent to guess which entry point applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no statement of when to prefer this over the type-specific siblings, and no prerequisite information (e.g. that workspaceId and type are mandatory, or that a document starts as a draft needing transition_document/issue_invoice afterwards). The agent only learns what it does, not when to reach for it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_document_templateA

Create a document template (invoice, credit_note, quote or dunning_run): footer text per locale, render language (fixed or per contact), an ordered set of OPTIONAL non-legal line-item columns, and an E00 logo file linked via entityKind document_template. Always saved as a NON-default draft: going live is a separate set_default_document_template call a human confirms. Presentation only: the Swiss QR-bill payload, VAT figures and legal content are produced by the document itself and pass through byte-identical under every template.

NameRequiredDescriptionDefault
nameYes
footerI18nNo
fixedLocaleNo
workspaceIdYes
documentKindYes
languageModeNo
idempotencyKeyNo
logoDocumentIdNo
lineItemColumnsNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false in annotations, the description carries real behavioral weight: the result is always a NON-default draft, a human-confirmed set_default_document_template is needed to activate, and the template is presentation-only with QR-bill payload, VAT and legal content passing through byte-identical. That tells the agent exactly what state changes and what does not, which annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the create action, then parameter-relevant detail, then the lifecycle constraint and the scope limitation — each sentence adds distinct information. The sentences are long and clause-dense, which slows scanning slightly, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, nested-object creation tool with no output schema, the description covers the non-obvious fields, the draft lifecycle, and the safety boundary about legal content. It does not say what is returned (e.g. the new template id) or how idempotencyKey behaves, which is the main remaining gap for an agent reasoning about the call result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does for the ambiguous parameters: footerI18n (footer text per locale), fixedLocale/languageMode (fixed vs per-contact render language), lineItemColumns (ordered, optional, non-legal), logoDocumentId (E00 file linked via entityKind document_template) and documentKind (the four kinds). It leaves name, workspaceId and idempotencyKey unexplained, which keeps it off a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening clause states a specific verb and resource ("Create a document template") and immediately enumerates the four supported document kinds, which no sibling does. It also implicitly separates this creation tool from set_default_document_template, preview_document_template and update_document_template, so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states that the created template lands as a non-default draft and that going live requires a separate set_default_document_template call a human confirms — a clear when/when-not boundary. It stops short of naming siblings like update_document_template or preview_document_template for the edit/inspect cases, so it is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_entry_for_txnA
Idempotent

A20's booking verb, now a wrapper over book_bank_line with one accounts leg: book an open line (a bank fee, interest, a refund, a transfer; credit or debit) to the chosen contra account via A02 and link it. taxCode is computed exactly as a manual journal line under the workspace VAT method (Vorsteuer, Umsatzsteuer, Bezugsteuer). A foreign-currency line books in its own currency at the stored rate (VAT on it refuses unsupported). A line that is no longer open refuses line_not_open. CONSEQUENCE: Books the bank line to the account you choose. If it is wrong, you reopen the line, which books a correcting entry; both stay visible.

NameRequiredDescriptionDefault
taxCodeNo
bankTxnIdYes
descriptionNo
workspaceIdYes
idempotencyKeyYes
contraAccountIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations it discloses the real consequences: it books the bank line to the chosen account, a correction requires reopening which produces a second visible entry, foreign-currency lines book at the stored rate and VAT on them is refused, and a closed line fails with line_not_open. These are exactly the side-effect and failure-mode facts an agent needs before a mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main action and its consequence are front-loaded and the closing CONSEQUENCE paragraph is the highest-value sentence. Some density is spent on internal verb/step codes rather than on information the agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and no schema documentation, the description covers the action, the side effect, the correction path, the tax computation, the FX handling, and the error case. The only gap is the idempotency/description parameters, which the idempotentHint annotation already partly covers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry parameter meaning, and it does explain taxCode (computed as a manual journal line under the workspace VAT method, Vorsteuer/Umsatzsteuer/Bezugsteuer) and the choice of contraAccountId. It says nothing about idempotencyKey or the free-text description parameter, so half the surface remains undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete verb and object ("book an open line ... to the chosen contra account via A02 and link it") and explicitly positions itself relative to the sibling book_bank_line ("now a wrapper over book_bank_line with one accounts leg"). It is only held back from 5 by opaque internal jargon ("A20's booking verb", "A02") that costs the reader a moment of interpretation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete usage contexts (bank fee, interest, refund, transfer, credit or debit) and states the precondition that the line must still be open, with the line_not_open failure spelled out. It does not explicitly say when to call book_bank_line or reopen_bank_line instead, so the alternative route is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_itemC
Destructive

Create an invoicing item (a reusable line default).

NameRequiredDescriptionDefault
nameYes
unitNo
currencyNo
workspaceIdYes
defaultTaxCodeNo
idempotencyKeyNo
revenueAccountIdNo
defaultUnitPriceMinorYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The only annotation is destructiveHint=true, and the description does not explain that a create operation carries a destructive flag or what side effects it entails. Nothing is said about idempotency (despite an idempotencyKey parameter) or currency/price defaults being stored per workspace, so the annotation's warning is left uninterpreted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence, front-loaded with the verb, with a useful clarifying gloss in parentheses. Nothing is wasted or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write operation with 8 undocumented parameters, no output schema, and minimal annotations, the description is far too thin. An agent knows what the tool creates but not what it must supply, what defaults apply, or what it gets back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are 8 parameters with 0% schema description coverage, and the description only hints at defaultUnitPriceMinor and unit via the phrase 'line default'. Critical semantics — that defaultUnitPriceMinor is an integer in minor units, what currency defaults to, and what idempotencyKey does — are documented nowhere. This falls well short of compensating for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create an invoicing item') and clarifies the entity with the parenthetical 'a reusable line default', which is genuinely informative about what an item is. It does not, however, differentiate itself explicitly from the sibling update_item/delete_item/archive_item cluster, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to create an item versus reusing an existing one, and no mention of prerequisites such as an existing workspace, revenue account, or tax code. The usage context is entirely implied by the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_payment_batchA
Idempotent

Draft a payment batch from open A17 bills: validates the debtor account (A19, must not be a QR-IBAN, which is receive-only), that every bill is posted and open, that every bill shares one currency (CHF or EUR; a mixed selection is refused with mixed_currency), that every vendor has a creditor_bank_profile, and that a QR-IBAN vendor has a valid QRR reference on the bill. Snapshots each item so a later generate_pain001 is byte-reproducible even if the vendor profile changes afterward. Posts nothing. CONSEQUENCE: Drafts a payment run from the selected open bills; nothing is paid or sent yet. You can discard the draft, and its bills become payable again.

NameRequiredDescriptionDefault
itemIdsYes
workspaceIdYes
bankAccountIdYes
executionDateYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, and the description adds substantial context beyond them: it validates debtor account (no QR-IBAN), currency consistency, vendor profiles, and QRR references, snapshots items for byte-reproducible generate_pain001, and explicitly states no posting occurs and bills become payable again on discard. This is rich behavioral disclosure that goes well past the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and validation rules, followed by a clear CONSEQUENCE section. The density is justified by genuinely important validation and safety facts, though it could be marginally tightened around the numbered validations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-constraint drafting operation with no output schema, the description covers validations, failure modes (mixed_currency), snapshot semantics, and downstream effects comprehensively. The remaining gap is per-parameter documentation for executionDate and idempotencyKey.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description bears full burden for 5 parameters. It indirectly characterizes bankAccountId (debtor account A19) and itemIds (bills) through domain constraints, but leaves executionDate and idempotencyKey unaddressed and doesn't map constraints to parameter names explicitly. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (draft) and resource (payment batch) with clear scope: 'from open A17 bills', and its downstream relationship to generate_pain001 is explicit. An agent can distinguish it from siblings like payment_batch_transmit or discard_payment_batch without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this is a drafting step that precedes generate_pain001 and explicitly says nothing is paid or sent, plus that the draft can be discarded. It names the generate_pain001 follow-up but does not compare against alternative entry points like preview_payment or suggest_payment_matches, so the guidance is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_recurring_scheduleA
Idempotent

Lege eine Serienrechnung an (a recurring invoice schedule): the template (contact + positions, or templateDocumentId to snapshot an existing document), the cadence (interval monthly|quarterly|yearly|custom with customDays, anchorDate ISO YYYY-MM-DD), and optionally endDate, maxOccurrences, dueDays payment terms and autoIssue. Nothing is invoiced yet: run_due_recurring materialises each due period, as a review draft unless autoIssue is on (P8). The template is SNAPSHOTTED, never a live link, and never stores a supply date: the tick stamps each generated line with its own period as the Leistungsdatum. CONSEQUENCE: Sets up a recurring invoice. With auto-issue on, every due date issues and books an invoice without asking again; you can pause or end it, and a wrong invoice gets a credit note.

NameRequiredDescriptionDefault
nameNo
linesNo
notesNo
dueDaysNo
endDateNo
currencyNo
intervalYes
autoIssueNo
contactIdNo
anchorDateYes
customDaysNo
workspaceIdYes
idempotencyKeyYes
maxOccurrencesNo
templateDocumentIdNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the idempotentHint/destructiveHint annotations: the template is snapshotted rather than a live link, no supply date is stored, and the tick stamps each generated line with its own period as Leistungsdatum. The CONSEQUENCE block discloses that autoIssue issues and books invoices without further confirmation and that reversibility is via pause/end plus a credit note. It loses a point only because it never states return value or whether an approval/auth step is required before the schedule becomes active.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool creates, then consequences; nearly every clause carries information an agent needs for a 15-parameter mutation. Deductions for the cramped middle sentence packing cadence, anchor and terms together, and for noise tokens like '(P8)' that carry no meaning for a caller.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, high-parameter mutation with no output schema the description covers the snapshot semantics, the deferred-issue model and the irreversible-ish autoIssue consequence. Remaining gap is minor: no statement of what is returned (schedule id?) or how idempotencyKey should be reused across retries.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry the load, and it does for the consequential parameters: interval values 'monthly|quarterly|yearly|custom', customDays, anchorDate as ISO YYYY-MM-DD, endDate, maxOccurrences, dueDays, autoIssue, contactId/lines vs. templateDocumentId. It leaves workspaceId, idempotencyKey, currency, name and notes unexplained, so it is strong but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Lege eine Serienrechnung an (a recurring invoice schedule)') and enumerates the three things it defines: template source, cadence, and optional limits/terms. It is clearly distinguishable from list_recurring_schedules, update_recurring_schedule and run_due_recurring because it names the creation act and defers materialisation to run_due_recurring.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the boundary explicitly: 'Nothing is invoiced yet: run_due_recurring materialises each due period' – naming the alternative tool and the condition that selects it. It also flags the autoIssue branch (review draft vs. automatic issue/booking), so the agent knows which mode it is choosing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_saved_viewA
Destructive

Save a named filter, sort, column set and layout over an entity list. The view belongs to the calling session unless shared is true, which publishes it to everyone in the workspace and requires manage_saved_views.

NameRequiredDescriptionDefault
nameYes
sortNo
layoutNo
sharedNo
columnsNo
filtersNo
isDefaultNo
entityKindYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations carry only destructiveHint=true, so the description would need to explain the destructive aspect — e.g. whether saving under an existing name overwrites it. It does not. It does add real value with the visibility model (session vs workspace) and the manage_saved_views permission requirement, which 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the primary behavior is front-loaded ahead of the conditional visibility rule. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and an entirely undescribed input schema, the description still covers the core semantics plus permission gating and visibility scope. The remaining holes (isDefault, idempotencyKey, whether a name collision overwrites) are real but limited in scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 10 parameters, so the description must compensate and it only partly does: it maps name, filters, sort, columns, layout, shared and the entity/workspace scope to natural-language concepts. isDefault and idempotencyKey get no mention at all, and no parameter format or shape (sort array structure, filter object keys) is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb ('Save') and enumerates the resource precisely: a named filter, sort, column set and layout over an entity list. That is enough to distinguish it from list_saved_views/update_saved_view/delete_saved_view, though those siblings are never named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives the decisive usage context for the shared flag: session-private by default, workspace-wide when shared is true, and gated on manage_saved_views. However, there is no guidance on when to create a new view versus using update_saved_view, which is the adjacent sibling an agent will most often confuse it with.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_vendor_billA
Idempotent

Erfasse eine Kreditorenrechnung als Entwurf (a draft vendor bill: no posting, no ledger effect). amountMinor is integer Rappen and is the GROSS on the paper bill unless amountIsGross is false; taxCode is an input-side code (VST-M, VST-I, BEZUG, IMPORT) or absent for a vendor that charges no MWST. projectId tags the purchase to a B00 project for the B03 Projekterfolg (a reporting dimension like costCenterId: it prices nothing and appears on no journal leg). This is the agent path (P8): draft first, then post_vendor_bill as a separate, deliberate step.

NameRequiredDescriptionDefault
fxRateNo
dueDateNo
taxCodeNo
billDateYes
currencyNo
vendorIdYes
projectIdNo
receiptRefNo
supplyDateNo
amountMinorYes
workspaceIdYes
costCenterIdNo
amountIsGrossNo
idempotencyKeyYes
vendorReferenceNo
expenseAccountIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavior beyond the annotations: the record is a draft, nothing is posted, and there is no ledger effect. This is exactly the kind of consequence-level disclosure an agent needs before creating financial data. It does not discuss idempotency key semantics, which is a minor gap given idempotentHint=true is already annotated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the draft/no-posting scope, then proceeds to field-level semantics. Dense but every clause is substantive; the German/English parenthetical style is slightly awkward but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 16 parameters, zero schema descriptions, and no output schema, the definition covers the critical financial semantics and the draft-then-post workflow, but leaves roughly two-thirds of the parameters unexplained. An agent can call it correctly for the core case but may guess at fxRate, dueDate, supplyDate, receiptRef, and idempotencyKey usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 16 parameters, so the description must carry the burden. It adds genuinely valuable semantics for the hardest fields (amountMinor is integer Rappen and gross unless amountIsGross is false; taxCode enum-like values VST-M, VST-I, BEZUG, IMPORT; projectId/costCenterId are non-pricing reporting dimensions). However, many parameters (workspaceId, vendorId, billDate, expenseAccountId, currency, fxRate, dueDate, supplyDate, receiptRef, vendorReference, idempotencyKey) receive no explanation at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Erfasse eine Kreditorenrechnung als Entwurf / a draft vendor bill') and immediately scopes it as non-posting with no ledger effect, which distinguishes it sharply from post_vendor_bill and list_vendor_bills.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the sequencing rule: 'This is the agent path (P8): draft first, then post_vendor_bill as a separate, deliberate step.' That tells the agent when to use this versus the posting sibling, though it does not mention other intake alternatives such as capture_commit or record_expense.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_workspaceC

Mint a new workspace (tenant) with its KMU chart of accounts. A new workspace starts with a 30-day default Zahlungsfrist (defaultPaymentTermsDays, 0 to 365; null for none).

NameRequiredDescriptionDefault
nameYes
legalFormNo
baseCurrencyNo
idempotencyKeyNo
fiscalYearStartNo
defaultPaymentTermsDaysNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, so the description carries most of the burden. It usefully discloses the seeded state (KMU chart of accounts) and the 30-day default payment terms with its 0-365/null semantics, but says nothing about permissions required, whether creation is reversible/archivable, or what is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core action front-loaded and no filler. The untranslated German term 'Zahlungsfrist' in an otherwise English description costs a bit of clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter creation tool with no output schema and near-zero annotation coverage, the description omits most parameter meaning, return value (e.g. new workspace id/tenant), and any post-creation next step. It covers the seed behavior well but leaves the call underspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must document six parameters and documents only one: defaultPaymentTermsDays (range 0 to 365, null for none). name, legalForm, baseCurrency, idempotencyKey, and fiscalYearStart are left entirely unexplained, including format expectations for the date and currency fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Mint a new workspace') plus a clarifying synonym ('tenant') and the seeded side effect (KMU chart of accounts). It does not, however, distinguish itself from nearby creation siblings such as create_demo_workspace or bootstrap_workspace, which an agent must choose between.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus create_demo_workspace, bootstrap_workspace, or env_create, nor any prerequisites (admin role, onboarding state). The only usage-adjacent information is an implied 'this creates a real, chart-of-accounts-seeded workspace'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

customer_balanceB
Read-only

What one customer owes: their total open amount, the split across aging buckets in both the invoice currency and base currency, how many days their oldest overdue item has been outstanding, and any parked payment attached to them. onAccountMinor is reported positive for a Guthaben, so it comes out negative when what is parked is an unmatched refund: read the direction on the row rather than the sign of the total. An unknown customer reads as an empty balance rather than an error. Reads only.

NameRequiredDescriptionDefault
asOfNo
customerIdYes
workspaceIdYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses two genuinely non-obvious behaviors: the onAccountMinor sign convention (positive for a Guthaben, negative for an unmatched refund, read the row direction not the total sign) and that an unknown customer returns an empty balance rather than an error. The final 'Reads only' is somewhat redundant with the annotation, but the added quirks provide real value beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core return-value summary is front-loaded in the first sentence, with edge-case disclosures following in tight, purposeful sentences. The 'Guthaben' phrasing is slightly jargon-dense, but each sentence earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

In the absence of an output schema, the description does a strong job of telling the caller what it will get back and how to interpret the parked-payment row. However, with three undocumented parameters and no output schema, leaving the asOf semantics unexplained is a real gap for a tool whose output depends on an evaluation date; the description partially compensates for missing output richness but not for parameter coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the full burden for parameter documentation, and it mostly fails to deliver. customerId is only implicitly explained ('one customer implies the subject), but asOf is never mentioned at all — a surprising gap for a balance report where aging buckets are inherently date-sensitive — and workspaceId is not explained either. The description adds almost nothing about how the three parameters behave.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific subject ('What one customer owes') and enumerates the actual outputs: total open amount, aging buckets in two currencies, oldest-overdue days, and parked payments. This clearly identifies the resource and scope and distinguishes it implicitly from aggregate reports like aging_report. However, it never names a sibling tool or explicitly contrasts itself, so it stops short of the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use / when-not-to-use guidance and no alternative tools are named, despite very close siblings existing (aging_report, list_open_items, trial_balance). The intended use is inferable from 'what one customer owes,' but an agent choosing between a per-customer balance and an aging report gets no help from this description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dashboard_overviewA
Read-only

Die Übersicht (dashboard): one KPI tile wall for a date range, composed live from the read models the product already computes and never cached (pure read, F00 posts nothing and owns no tables). Core tiles: revenue | cash | ar_aging | ap_aging | utilisation | project_margin | mwst_due | stock_value | bank_inbox, each an integer-Rappen (or basis-point) figure that equals its source verb's answer for the same filter: revenue from income_statement (the Nettoerlöse section, with a previous-window trendBp), cash from the A19 bank accounts' Kontoblatt closing balances (general_ledger), AR from aging_report, AP from list_vendor_bills, utilisation as the billable share of time_list minutes (B01 has no capacity model), margin from costing_pl_list, MWST due verbatim from vat_return for the settlement period containing the range end, stock value from stock_valuation_report under the books' method. bank_inbox is the Bankeingang band (current, not ranged): the open bank lines, those that need you, the sure proposals and the lines booked to accounts without a Beleg, each by list_bank_inbox's own per-line definitions, per Bankkonto with money in and out, plus the last statement fetch, a fetch running now, the daily automatic fetch (autoMode, nextAutoSyncAt, lastAutoOutcome) and autoAvailable (false when this process runs no scheduler, e.g. till serve). Every tile embeds a drill descriptor (studioRoute, mcpTool, params) naming the EXISTING source tool behind the number: call that tool for the rows. Tiles the caller's A24 role may not see are omitted server-side into omitted[] (per-tile gates: read_books, read_sales, read_vat, read_master_data, time.read, costing.read); an unconfigured or unused module degrades its one tile to ok:false with the source's own code (needs_vat_config, needs_chart, needs_projects, needs_stock_items) while the rest still render; an empty workspace answers ok:true zero states, never an error. from > to answers invalid_range. savedViewId applies a G00 saved view (entityKind 'workspace', layout 'dashboard') to restrict and order tiles; an unresolvable view falls back to the full default with viewFallback:true and can never widen access.

NameRequiredDescriptionDefault
toYes
fromYes
savedViewIdNo
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true; the description adds a great deal beyond that: never cached, F00 posts nothing and owns no tables, per-tile role gating into omitted[], module degradation to ok:false with source codes, empty workspace answering ok:true zeros, invalid_range for from>to, and saved-view fallback that can never widen access.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, but the body is a single dense run-on paragraph of roughly 350 words packed with parentheticals and German domain jargon. Much of it earns its place, yet the exhaustive per-tile source-verb mapping and scheduler internals (autoMode, nextAutoSyncAt, lastAutoOutcome) exceed what is needed to invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-tile aggregate with no output schema, the description still covers the response shape (tiles with ok flags, omitted[], viewFallback, drill descriptors), the degradation and permission paths, and the error cases. An agent has everything needed to call it and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry the burden, and it does for three of four params: from/to define the range (with the from>to error case) and savedViewId is explained in detail (G00 view, entityKind 'workspace', layout 'dashboard', fallback semantics). workspaceId is only implied, never described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource: a single KPI tile wall for a date range, composed live from read models. It enumerates the concrete tiles (revenue, cash, ar_aging, ...) and their exact source verbs, so an agent knows this is an aggregate overview, not a row-level report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly routes the agent away from this tool for detail: 'Every tile embeds a drill descriptor ... call that tool for the rows', and savedViewId is described as restricting/ordering tiles. It never explicitly contrasts with the closest siblings (dashboard_tile, dashboard_series, attention_summary), so the alternative-selection guidance is present but incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dashboard_seriesA
Read-only

Die Diagramme der Übersicht: Geld rein und raus pro Monat und die grössten Aufwände (pure read, posts nothing). months[] holds every calendar month the range touches (clipped to it, at most 60), each with inMinor and outMinor in integer base-currency Rappen: the money in and out of the A19 Bankkonten's ledger accounts, netted per journal entry, so a transfer between two own bank accounts is neither in nor out, and the engine's own opening postings (Eröffnungsbilanz, Bank-Eröffnungssaldo) are left out because no money moved. totals sums them; Σ in − Σ out equals the bank accounts' net Kontoblatt movement over the window (general_ledger) minus those openings. topExpenses[] names the 5 (top, 1 to 12) largest Aufwand accounts of the range from income_statement (accountId, number, name, amountMinor), otherExpensesMinor is the rest of the expense accounts with a debit balance, grossExpenseMinor their sum (Σ top + other = gross), expenseReductionsMinor the expense accounts with a credit balance in the range (zero or negative: an Aufwandminderung or a stock change booked against material), and expenseTotalMinor the Erfolgsrechnung's net expense total (gross + reductions = total). bankAccounts counts the Bankkonten that fed the series (0 means no bank account yet: every month is 0, never an error). from > to answers invalid_range, a window over 60 months range_too_long, a workspace with no chart needs_chart.

NameRequiredDescriptionDefault
toYes
topNo
fromYes
workspaceIdYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds substantial behavioral context: netting per journal entry, exclusion of transfers and opening postings, clipping to at most 60 months, zero-bank-account behavior, and specific error codes. These details go well beyond the annotation and are consistent with the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then unpacks the financial semantics, which is appropriate for a complex calculation. It is dense and contains long parenthetical sentences, but most details earn their place by explaining non-obvious behavior and edge cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and minimal annotations, the description carries the burden of explaining the return structure and covers months[], totals, topExpenses[], otherExpensesMinor, grossExpenseMinor, expenseReductionsMinor, expenseTotalMinor, bankAccounts, and relevant error conditions. It is complete enough for an agent to understand and call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for all four parameters. It explains that 'top' controls the number of largest expense accounts (1 to 12, defaulting to 5) and that 'from'/'to' define the range with validation and a 60-month cap, but it does not specify date formats or clarify workspaceId semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource and content: monthly money-in/money-out charts and largest expense accounts for the dashboard. It is specific and distinguishes itself from general reports by focusing on dashboard series, but it does not explicitly name or contrast with sibling tools such as dashboard_overview or dashboard_tile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through 'Die Diagramme der Übersicht' and notes it is a pure read that posts nothing. It also documents error conditions (invalid_range, range_too_long, needs_chart), but it does not explicitly state when to use this tool versus dashboard_overview, dashboard_tile, or other reporting tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dashboard_tileA
Read-only

Eine Kachel der Übersicht in voller Tiefe: the same figure dashboard_overview shows for 'revenue' | 'cash' | 'ar_aging' | 'ap_aging' | 'utilisation' | 'project_margin' | 'mwst_due' | 'stock_value' | 'bank_inbox', plus its detail block (the aging buckets behind the Debitoren figure, the top and bottom projects behind the Marge, the MWST settlement period and filed flag, the per-bank-account closing balances) and the drill descriptor naming the source tool that owns the rows. The value is the source verb's own answer, recomputed on every call; F00 fabricates nothing. An unknown tile id answers unknown_tile naming the valid set; a tile the caller's A24 role may not see answers permission_denied outright (the same per-tile gate the overview applies as an omission); an unavailable module answers the tile with ok:false and the source's own structured code.

NameRequiredDescriptionDefault
toYes
fromYes
tileYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses important behaviors: the value is recomputed on every call from the source verb's own answer (no fabrication), and it enumerates three distinct error shapes (unknown_tile naming the valid set, permission_denied from the A24 role gate, ok:false with the source's structured code for unavailable modules). This is rich behavioral context that annotations alone would not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and tile enumeration are front-loaded, and the parenthetical detail examples (aging buckets, top/bottom projects, MWST period, per-bank-account balances) each convey concrete return content. The first sentence is a long dense run-on with heavy nesting, which slightly hurts readability but not substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does a good job describing the return payload (figure, detail block, drill descriptor) and the error responses. The main gap is the date-range semantics for 'from'/'to' and any workspace scoping behavior, which an agent would need for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four required parameters, so the description carries the burden. It strongly compensates for the 'tile' parameter by enumerating the valid tile ids (revenue, cash, ar_aging, ap_aging, utilisation, project_margin, mwst_due, stock_value, bank_inbox), but it says nothing about the format or semantics of 'from', 'to', or 'workspaceId', leaving three parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (one overview tile in full depth) with a precise scope: the same figure dashboard_overview shows for a named set of tile ids, plus its detail block and drill descriptor. It explicitly names the sibling tool it relates to, so an agent can distinguish this from dashboard_overview and dashboard_series without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly positions this as the deep-dive counterpart to dashboard_overview ('in full depth', 'the same figure dashboard_overview shows ... plus its detail block'), which gives an agent an implicit when-to-use rule. It does not explicitly state when to prefer dashboard_overview or dashboard_series, so it falls short of a full when/when-not/alternatives statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deals_createA

Lege einen Deal an: a sales opportunity on a C00 contact with an integer-Rappen value, born open in the first open stage of its pipeline (the first write seeds the default funnel Lead, Qualifiziert, Offerte, Gewonnen, Verloren when none exists). A non-base currency is converted ONCE at capture through the §H-FX resolver and frozen on the row (valueBaseMinor + fxRate, never client inputs); the creation lands on the contact timeline (OP5). A deal never posts: its value is an estimate, not a ledger row.

NameRequiredDescriptionDefault
titleYes
stageIdNo
currencyNo
contactIdYes
pipelineIdNo
valueMinorYes
workspaceIdYes
idempotencyKeyNo
expectedCloseOnNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the single destructiveHint=false annotation, the description discloses major side effects: it seeds the default funnel on first write when none exists, freezes FX-derived valueBaseMinor/fxRate values, writes to the contact timeline, and does not post to the ledger. These are meaningful behavioral traits an agent could not infer from the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the create action and uses only two dense sentences with little wasted text. It is somewhat hard to parse because of internal shorthand such as C00, OP5, and §H-FX, but the overall size is appropriate for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is strong on side effects and FX/default-stage behavior, which is important for this complex create operation. However, with 9 parameters, 0% schema description coverage, and no output schema, it should also explain idempotency, expectedCloseOn, return behavior, and explicit stage/pipeline selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It clarifies key semantics for valueMinor as integer Rappen, currency conversion/fxRate, and stage/pipeline defaulting, but it leaves idempotencyKey, expectedCloseOn, title, and workspaceId unexplained and does not say how an explicit stageId interacts with the first-open-stage default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear creation verb and names the exact resource: a sales opportunity/deal on a contact with a Rappen-denominated value. It also specifies the creation state and pipeline behavior, so the tool is distinguishable from deals_list, deals_update, or deals_move by intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not state when to use deals_create versus sibling tools such as deals_update, deals_move, quotes_create, or deals_to_quote. It implies creation through the verb, but gives no exclusions, prerequisites, or alternative-routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deals_listA
Read-only

The pipeline board in one read (P5): every pipeline for the picker, the selected pipeline stages in sort order, its deals (open only by default; includeClosed or a status filter widens), each with weightedMinor = round-once(valueBaseMinor times probability over 100), and the weightedTotalMinor over open deals in the workspace base currency, so mixed-currency funnels sum in one currency (§H-FX). C03 consumes this read; C01 does not forecast. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
statusNo
contactIdNo
pipelineIdNo
savedViewIdNo
workspaceIdYes
includeClosedNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint=true; the description adds substantial behavioral detail: open deals are default, includeClosed or a status filter widens results, weightedMinor is computed as round-once(valueBaseMinor times probability / 100), and weightedTotalMinor aggregates open deals in the workspace base currency. It also explains savedViewId filter merging. These go well beyond the annotation and enrich the agent's understanding of side effects and computations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but purposeful: it front-loads the core purpose ('pipeline board in one read'), then layers filters, calculations, currency logic, and saved view behavior. The use of internal cross-references (P5, C03, C01, G00, §H-FX) adds precision for those who know the spec but could be noise; nonetheless, every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with 6 parameters and no output schema, the description covers the essential output facets (pipelines, stages, deals, computed values, totals) and filter semantics. It does not mention pagination, sorting, or error conditions, but for the stated purpose it is sufficiently complete. The internal references may reduce universal clarity but do not leave critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description carries the full burden. It adds meaning for includeClosed and status ('widens'), savedViewId ('applies a saved view... merged underneath'), and implies pipelineId via 'selected pipeline stages' and workspaceId via 'workspace base currency'. However, contactId is not mentioned, and some parameters like workspaceId/pipelineId are only indirectly covered. Still, it compensates well for most parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'The pipeline board in one read' and enumerates exactly what is returned: all pipelines, selected pipeline stages in sort order, deals with defaults and widened filters, computed weightedMinor, and weightedTotalMinor. This clearly distinguishes it from sibling deal tools like deals_create, deals_update, and deals_move, and from forecasting tools like forecast_weighted_pipeline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'C03 consumes this read; C01 does not forecast,' which hints at internal consumers but does not explicitly tell an AI agent when to choose this tool over alternatives such as forecast_weighted_pipeline or a simpler deals list. There is no direct 'use this when...' or 'instead of...' guidance, so the usage context is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deals_log_activityA

Erfasse eine Aktivität auf einem Deal (note, call, email, meeting or task, the single OP5 kind enum): appends to the contact timeline through contacts_log_activity with the dealId stamped, newest-first on read. An optional reminderAt additionally mints one linked E03 task (entityKind deal) through tasks_create, so its assignee polls tasks_reminders_due like every other follow-up; a past reminder refuses with E03s own reminder_in_past. One idempotency key covers note + task together.

NameRequiredDescriptionDefault
bodyYes
kindYes
dealIdYes
occurredAtNo
reminderAtNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the sparse destructiveHint=false annotation, the description discloses key side effects: appending to the contact timeline with dealId, optionally minting a linked E03 task via tasks_create, notifying assignee polling via tasks_reminders_due, and refusing past reminders with E03's reminder_in_past. It also states that one idempotency key covers note and task together, which is important mutation context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: the first sentence states the core action and timeline behavior, and the second covers the optional reminderAt side effect and failure condition. Every clause adds operational detail needed for a 7-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and minimal annotations, the description covers the critical behavioral context: activity creation, timeline placement, optional task creation, failure mode, and idempotency scope. It is still incomplete on several parameter meanings and does not describe the return value, but the core invocation context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It usefully explains kind values, reminderAt's linked-task behavior, idempotencyKey scope, and dealId stamping, but it leaves workspaceId, body, and occurredAt unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource (

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the deal-specific path by stating that the activity is appended through contacts_log_activity with dealId stamped, and it explains the optional reminderAt path through tasks_create. It does not explicitly say when to prefer contacts_log_activity or tasks_create directly, so it has clear context but lacks explicit alternatives/exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deals_markA

Schliesse einen Deal ab oder öffne ihn wieder: the ONE door to status. won moves the deal into the pipeline outcome stage at probability 100; lost requires a lostReason (lost_reason_required otherwise) and lands at 0; open reopens a misclicked deal into the first open stage. A no-change re-mark is a state assertion and emits nothing; a genuine close emits deal.won or deal.lost. Every terminal move lands on the contact timeline (OP5).

NameRequiredDescriptionDefault
dealIdYes
statusYes
lostReasonNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is exceptionally transparent, detailing the impact of specific status values—such as moving a deal to probability 100, landing at 0, or emitting terminal events. This functional behavior is far more detailed than the provided annotation (destructiveHint: false).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Despite its complexity, the description is highly efficient. It front-loads the core function and systematically details the outcome of each status change in a single, dense but logical paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a state-transition tool. It covers the logic for successful outcomes, failed outcomes, re-opening states, no-op assertions, and the side effect of logging to the contact timeline.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since the schema description coverage is 0%, the description is critical. It provides semantic meaning to the most complex parameter, 'status', by explaining what 'won', 'lost', and 'open' mean in practical pipeline terms and when 'lostReason' is mandatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the core purpose: closing or reopening a deal ('Schliesse einen Deal ab oder öffne ihn wieder'). It distinguishes the tool's purpose as managing pipeline state transitions through status changes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear operational guidelines on when specific statuses should be used (e.g., `won` moves to 100%, `lost` requires a `lostReason`). It also guides behavior by specifying that a 'no-change' remark results in no state change.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deals_moveA

Verschiebe einen Deal in eine andere Phase of its own pipeline: updates the stage, re-defaults the probability to the target stage unless a hand pinned it, and logs the move on the contact timeline (OP5). A stage outside the deal pipeline refuses with stage_not_in_pipeline; a stage flagged won/lost refuses with terminal_stage_use_mark, because deals_mark is the ONE door to a terminal status. Emits deal.stage_changed.

NameRequiredDescriptionDefault
dealIdYes
stageIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the single destructiveHint annotation: discloses that probability is re-defaulted to the target stage unless manually pinned, that the move is logged on the contact timeline (OP5), and that a deal.stage_changed event is emitted. It also documents the two exact error codes and their causes, which is exactly the behavioral context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: the operation comes first, then side effects, then refusal conditions. The only blemish is the mixed German/English opening ('Verschiebe einen Deal in eine andere Phase of its own pipeline'), which slightly hurts parsing but costs no information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Strong on side effects and failure modes, but as a four-parameter mutation with no output schema and minimal annotations it leaves gaps: no explanation of workspaceId scoping or idempotencyKey behavior, and no indication of what the call returns. Adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description only implicitly gestures at stageId ('target stage') and dealId. workspaceId and especially idempotencyKey are never explained, so the agent gets no guidance on retry semantics or scoping for a mutation tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (move a deal to another stage within its own pipeline) and immediately distinguishes itself from sibling deals_mark, which is named as the only path to a terminal status. An agent can tell deals_move apart from deals_update/deals_mark without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the two conditions where this tool is the wrong choice (stage outside the pipeline, stage flagged won/lost) and names the alternative tool (deals_mark) for the terminal case. When-to-use is implied by the mutation itself and the exclusions are concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deals_to_quoteB

Wandle einen Deal in eine Offerte um: delegation only (US-C01.5). Invokes the registered quote-creation verb (create_document, type quote, until C02 rebinds the seam) through the shared dispatch with the deal contact and value as the single seed line, stores the returned quote id on the deal, and logs the conversion (OP5). Idempotent on the deal: one carrying a quoteId answers it and spawns nothing. The quote verb own capability applies to the caller; C01 never bypasses it.

NameRequiredDescriptionDefault
dealIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, and the description goes well beyond them: it discloses that the deal record is mutated with the returned quoteId, that a conversion is logged, and that the quote verb's own capability check is enforced for the caller. Idempotency semantics are spelled out explicitly. Missing only rate/error behavior, not a contradiction with destructiveHint=false since the write is additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, but the text is padded with internal ticket references (US-C01.5, C02, OP5, C01) that add no meaning for a caller, and it mixes German and English mid-sentence. Several clauses could be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should say what a caller gets back; it only says the quote id is stored on the deal, leaving the response shape unknown. Side effects and permissions are covered, but with three undocumented parameters and no return-value guidance it is only partially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% — none of dealId, workspaceId or idempotencyKey carries any documentation. The description discusses idempotency conceptually but never ties it to the idempotencyKey parameter, nor explains the deal/workspace identifiers. With zero schema coverage the description should compensate and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first clause states a concrete verb and resource ('Wandle einen Deal in eine Offerte um') and names what it delegates to (the create_document quote verb). It never contrasts itself with the obvious siblings quotes_create, quotes_convert or sales_order_from_quote, so an agent must infer the boundary, but the core action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The idempotency clause ('one carrying a quoteId answers it and spawns nothing') gives a real usage condition, and the capability caveat signals a permission gate. However, internal requirement codes (US-C01.5, C02, OP5) are opaque, and there is no statement of when to call this versus quotes_convert or quotes_create.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deals_updateA

Bearbeite einen offenen Deal from a patch: retitle, re-point the contact, reschedule the expected close, or pin a manual probability (which stage moves then stop re-defaulting). A patch naming valueMinor or currency re-runs the §H-FX capture and re-freezes valueBaseMinor + fxRate; any other patch leaves the frozen trio byte-identical. A closed deal refuses with deal_closed: reopen it through deals_mark first.

NameRequiredDescriptionDefault
patchYes
dealIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, so the description carries the real burden and does so well: it discloses that a valueMinor/currency patch re-runs the FX capture and re-freezes valueBaseMinor + fxRate, that all other patches leave the frozen trio byte-identical, that pinning probability suppresses stage re-defaulting, and that closed deals return the deal_closed error. These are non-obvious side effects an agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the patchable fields, then FX side effects, then the error path — a sensible progression with little waste. The mixed-language opening and dense domain shorthand (§H-FX, "frozen trio") cost some polish without bloating length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and zero schema documentation, the description supplies the side effects, the error code, and the recovery path, which is most of what an agent needs. Missing only the idempotency/retry contract and any hint about what the response contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does for the nested patch object: all six patchable fields are named and the tricky ones (probability pinning, valueMinor/currency FX re-capture) get real semantic explanation. It is silent on idempotencyKey and on the workspaceId/dealId identifiers, leaving a residual gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (patch an existing deal) and enumerates exactly which fields can change: title, contact, expected close, probability. An agent can tell it apart from deals_create and deals_mark, though the opening sentence is garbled by a German/English mix ("Bearbeite einen offenen Deal from a patch") that slightly muddies first-read clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly scopes the tool to open deals and states the negative case with the remedy: a closed deal refuses with deal_closed and must be reopened through deals_mark first. That names the sibling alternative and the condition that selects it, which is exactly the when/when-not guidance expected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

define_fieldA

Define a typed custom field on any registered entity, or patch an existing one by its key. The key may not shadow a column the entity already has, and once any value is stored the type is frozen (changing it would silently corrupt what is already there). A field defined by the agent actor lands as a draft and is invisible until confirm_field releases it. CONSEQUENCE: Adds or changes a custom field on every record of the chosen kind, for everyone in the workspace. You can archive it later; values already stored are kept.

NameRequiredDescriptionDefault
keyYes
sortNo
typeYes
optionsNo
requiredNo
labelI18nYes
entityKindYes
workspaceIdYes
defaultValueNo
idempotencyKeyNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false in annotations, the description carries substantial behavioral context: agent-defined fields land as invisible drafts, types freeze once values exist, changes apply workspace-wide to every record of the kind, and archiving preserves stored values. This is exactly the kind of consequence and lifecycle detail an agent needs before invoking a schema-mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded: it states what the tool does, then constraints, draft behavior, and consequence in a compact sequence. Every sentence contributes useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers critical behavioral risks and lifecycle rules well, which matters for a mutation tool. However, for a 10-parameter tool with 0% schema description coverage and no output schema, it is incomplete because most parameter meanings and the expected response are not addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the 10 parameters. It adds meaning for key and type, but leaves workspaceId, entityKind, labelI18n, options, required, defaultValue, sort, and idempotencyKey undocumented, which is a major gap for a 10-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: define a typed custom field on a registered entity, or patch an existing one by key. It distinguishes this tool from confirm_field and archive_field by explaining the draft lifecycle and later archival behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: use this to define a new field or patch an existing field by key. It also states key-shadowing and type-freezing constraints and routes the agent to confirm_field for releasing agent-created drafts, though it does not explicitly compare against all field siblings such as set_field_value or list_field_defs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

define_roleA
DestructiveIdempotent

Create a custom role, or reshape one of the three editable built-ins, as a named subset of the capability registry. A name outside the registry is refused (unknown_capability): a role can only ever recombine capabilities that already gate a real verb. CONSEQUENCE: Changes what this role may do, for everyone who holds it. The earlier set of rights is not kept.

NameRequiredDescriptionDefault
nameNo
roleIdNo
workspaceIdYes
capabilitiesYes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: it states the blast radius ('for everyone who holds it'), that the previous rights set is discarded rather than merged, and the exact failure contract (unknown_capability) when a capability is not in the registry. This matches destructiveHint=true without contradicting it, and tells the agent what it will lose before it calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the most important constraint (blast radius) front-loaded as CONSEQUENCE. Slight cost from jargon ('capability registry', 'gate a real verb') that assumes internal vocabulary, but nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, security-relevant, multi-tenant mutation with no output schema, the behavioral side is well covered. The gap is on the input side: with zero schema descriptions, the agent still cannot tell what workspaceId or idempotencyKey do, nor how name and roleId interact for create vs update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the parameters, and it only partially does: it implies capabilities must come from the registry and implies roleId targets a built-in. workspaceId and idempotencyKey are never mentioned, and 'a name outside the registry is refused' is ambiguous about whether 'name' is the role name or a capability string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb set and resource: create a custom role or reshape an editable built-in, defined as a named subset of the capability registry. That is clear and non-tautological. It does not differentiate from the sibling set_role or archive_role, so an agent has to infer which of the three is correct for a given mutation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The create-vs-reshape split and the 'three editable built-ins' limit imply when this tool applies, and the refusal of unknown capabilities sets a precondition. But there is no explicit guidance on permissions required, on why to choose define_role over set_role, or on what happens to roles it does not name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_accountA
Destructive

Hard-delete an account that never carried a posting. CONSEQUENCE: Deletes the account from your chart for good; only an account that never carried a booking can go. You can create it again, but not restore it.

NameRequiredDescriptionDefault
accountIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the bar is lower; the description still adds substance by clarifying irreversibility ('not restore it'), the eligibility constraint, and that re-creation is possible. It does not mention what the call returns or whether retries are safe.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and followed by the consequence. There is mild redundancy between 'for good' and 'but not restore it', which restate the same irreversibility.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotation beyond destructiveHint, so the description carries real weight; it covers destruction and eligibility but leaves the two opaque identifiers and their scoping unexplained. Adequate to avoid a wrong deletion in spirit, but thin for a 3-parameter destructive tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it only gestures at 'account'. Neither workspaceId nor idempotencyKey is explained, and the idempotency key is particularly consequential for a destructive operation where an agent may retry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Hard-delete an account') and encodes the distinction from soft removal via 'for good' and 'not restore it'. It never names the sibling archive_account explicitly, so the differentiation is implied rather than spelled out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a hard precondition: 'only an account that never carried a booking can go'. That is a real when-you-may-use criterion. It stops short of naming the alternative path (archive_account) for accounts that do have postings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_backupA
DestructiveIdempotent

Delete a local backup/export artifact and its history row. Storage housekeeping only: a backup file carries no legal retention lock of its own. CONSEQUENCE: Deletes the backup or export file and its history entry for good; your books are untouched. A new backup holds today's books, never the deleted snapshot.

NameRequiredDescriptionDefault
backupIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint and idempotentHint annotations, the description explains exactly what is destroyed: the backup/export file and its history entry, permanently. It also adds important scope context that the books are untouched and that a new backup will not contain the deleted snapshot.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action and consequence, and each sentence adds useful context. There is minor repetition between 'history row' and 'history entry' and between 'backup/export artifact' and 'backup or export file', but it remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The behavioral side is well covered for a destructive delete, especially with annotations confirming idempotency and destructiveness. However, with no output schema and zero parameter descriptions, the definition omits required input guidance that an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has three parameters with 0% description coverage, and the description does not explain backupId, workspaceId, or idempotencyKey. It only says what a backup is, not how the required parameters identify or scope the deletion.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: delete a local backup/export artifact and its history row. It clearly distinguishes this from restoring, verifying, or listing backups by scoping it to storage housekeeping and deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the context clearly: use for storage housekeeping only, and notes that a backup carries no legal retention lock. It does not explicitly name alternatives such as restore_backup or list_backups, but the usage context is reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_cost_centerA
DestructiveIdempotent

Hard-delete a cost centre that no posted line references. CONSEQUENCE: Deletes the cost centre for good; only one that no booking uses can go. You can create it again, but not restore it.

NameRequiredDescriptionDefault
workspaceIdYes
costCenterIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the description's job is to add context — and it does: irreversible removal, no restore path, and the posted-line guard that blocks deletion. It does not describe the failure mode (what error the agent sees when a booking exists) or whether the call is idempotent against an already-missing id, which would raise this to a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and front-loaded, with the destructive consequence surfaced early via the 'CONSEQUENCE:' marker. There is mild redundancy: sentence one already states the tool hard-deletes only an unreferenced centre, which sentence two restates before adding the new fact of irreversibility.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive tool with annotations already covering the safety profile and no output schema, the description supplies the essentials: irreversibility, no-restore, and the reference guard. The remaining gap is workspace scoping and error behavior, neither of which the schema documents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two required parameters, so the description carries full burden. It never mentions workspaceId or costCenterId, nor the expected identifier format; 'a cost centre' only loosely implies the costCenterId parameter and says nothing about workspace scoping.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Hard-delete a cost centre') plus a precondition ('that no posted line references'), which clearly separates it from archive_cost_center and unarchive_cost_center in the sibling list. It stops short of naming the archive sibling as the reversible alternative, so the differentiation is implied rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete eligibility condition ('only one that no booking uses can go') that tells the agent when this call will succeed. It does not explicitly say 'use archive_cost_center instead if the centre is in use or you want reversibility', leaving the alternative to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_draftA
DestructiveIdempotent

Delete a draft journal entry (never a posted one). CONSEQUENCE: Deletes the unposted draft entry for good; nothing was booked. To book it after all, you enter it again.

NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the description's real contribution is the accounting impact: nothing was booked, so there is no ledger reversal, and the deletion is permanent with re-entry as the only undo. That is meaningful context beyond the flags, though failure modes (not-found draft, already posted) are not disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the object and scope, then the labeled 'CONSEQUENCE' clause. Every sentence adds information and none repeats the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-output-schema mutation the description correctly explains consequences and recovery, which is the most important part. However, with three required undocumented identifiers it leaves the agent guessing what values to supply and what happens on an invalid entryId, so it is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%: workspaceId, entryId and idempotencyKey are all bare strings with no documentation, and the description says nothing about any of them. It does not state that entryId is the draft to remove, nor how workspaceId scopes the lookup; the idempotencyKey is only obliquely covered by idempotentHint. This is the definition's largest gap and the description does not compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a draft journal entry') and immediately narrows scope with '(never a posted one)'. Among hundreds of siblings that also contain 'draft' or 'delete', this pins the object down to an unposted journal entry, so an agent can match it against draft_list or sign_requests_delete_draft without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear exclusion (posted entries are out of bounds) and a recovery path for the opposite intent ('To book it after all, you enter it again'), which implicitly steers the agent to the entry-creation path. It does not name a specific alternative sibling tool (e.g. save_draft, post_entry, discard_dunning_run), so routing is inferred rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_itemA
Destructive

Hard-delete an item that is referenced nowhere (no document line, price-list row, variant, or stock movement). A referenced item is refused with item_referenced and its reference kinds; archive it instead so posted history stays resolvable. CONSEQUENCE: Deletes the item for good; only an item nothing refers to can go. You can create it again, but not restore it.

NameRequiredDescriptionDefault
itemIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Although annotations already flag destructiveHint=true, the description adds substantial context beyond them: the refusal path and error code (item_referenced with reference kinds), the irreversibility ('not restore it'), and the recreate-but-not-restore nuance. That is exactly the behavioral detail an agent needs before a destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The precondition is front-loaded ahead of the consequence, and the 'CONSEQUENCE:' label makes the destructive outcome scannable. Every sentence adds a distinct fact with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behavior, refusal semantics, and irreversibility are well covered and there is no output schema to explain, but the omission of any parameter guidance (especially idempotencyKey) leaves a gap for a 3-param destructive tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not mention any of the three parameters. itemId/workspaceId are inferable, but idempotencyKey is entirely undocumented in both schema and description, which matters for a destructive retryable operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('hard-delete') and resource ('item') plus a precise precondition ('referenced nowhere'), and explicitly contrasts with archive_item. An agent can distinguish this from archive_item/unarchive_item without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative ('archive it instead so posted history stays resolvable') and the condition that forces that choice (a referenced item is refused). The condition for using this tool ('only an item nothing refers to can go') is also stated, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_saved_viewA
Destructive

Delete a saved view outright. A true delete rather than an archive, because a view mints no state and holds no history; deleting a shared one requires manage_saved_views.

NameRequiredDescriptionDefault
viewIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the safety profile is known; the description adds value beyond that by explaining the delete is irreversible in the sense that no state or history is preserved, and by disclosing the permission requirement for shared views. It does not describe the response or any failure modes, but the annotation coverage lowers the bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tightly written sentence with the destructive nature front-loaded and the rationale following. No filler, every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the semantic difference from archiving and the permission gate, which is the main thing an agent needs. However, with three undocumented parameters (including an idempotency key) and no output schema, there are real gaps about how to call it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it says nothing about workspaceId, viewId, or especially idempotencyKey, which is non-obvious for a destructive call. All three parameters are effectively undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a saved view') and immediately disambiguates it from an archive, which is the key distinction among siblings such as create_saved_view, update_saved_view and list_saved_views. An agent knows exactly what operation this is without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains that this is a hard delete rather than an archive, and adds a concrete precondition (deleting a shared view requires manage_saved_views). It stops short of naming an alternative tool to use instead of deleting, but for a delete endpoint the guidance is clear enough to act on.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delivery_note_createA

Erstelle einen Lieferschein: drafts a delivery note for a confirmed orders stock-tracked lines from one D01 location. With no explicit lines it defaults to each lines undelivered qty; an explicit line may ship less (a partial). Issues nothing and moves no stock. Over-delivery (qty over the outstanding remainder) is refused with over_delivery naming the outstanding qty; a zero/fractional qty is refused (invalid_qty).

NameRequiredDescriptionDefault
linesNo
locationIdYes
workspaceIdYes
salesOrderIdYes
idempotencyKeyNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond destructiveHint=false by disclosing the default fill rule, partial-shipment behavior, the absence of stock/issue side effects, and the specific error codes (over_delivery with outstanding qty, invalid_qty). It does not say whether the draft persists across calls or how idempotency is enforced, which matters for a create-shaped operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then default behavior, then guardrails; every clause carries information. The duplicated German/English opening ('Erstelle einen Lieferschein: drafts a delivery note') is the only redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Strong on input behavior and failure modes, but with no output schema and no annotations beyond destructiveHint, the description never indicates what comes back (draft id / delivery note reference) or how retries interact with idempotencyKey. An agent can call it, but cannot confidently handle the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden and does explain the non-obvious parameter: `lines` defaults to each line's undelivered qty and may ship less, and qty must be a positive whole number. It says nothing about `idempotencyKey` or the role of `workspaceId`/`salesOrderId`/`locationId` beyond what their names imply, leaving gaps at 0% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('drafts a delivery note') with the exact scope (confirmed order, stock-tracked lines, one location). The clause 'Issues nothing and moves no stock' cleanly separates it from delivery_note_issue and delivery_note_render in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Prerequisites are clearly implied: the order must be confirmed and use stock-tracked lines from a single location, and the tool is for a draft only (no issue, no stock movement). It never names delivery_note_issue as the explicit next step or exclusion, so routing is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delivery_note_issueA
Destructive

Liefere aus (P8, stock leaves the shelf): issues a drafted delivery note. Mints ONE D01 issue movement per line through stock.move (OP2, D03 never writes stock_movement itself), stores each stock_movement_id, raises delivered_qty and advances the order (partially_delivered / delivered). Atomic and idempotent: over-delivery and insufficient stock are pre-checked (a refusal writes zero rows), a D01 refusal rolls the whole note back, and a retry re-issues nothing. carries actor for the audit trail. CONSEQUENCE: Ships the delivery note: the goods leave stock and the order counts them as delivered. An issued note can't be cancelled or edited; goods that come back are booked in with a stock return.

NameRequiredDescriptionDefault
actorNo
workspaceIdYes
deliveryNoteIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond destructiveHint=true: pre-checked over-delivery and insufficient stock with zero-row refusal, whole-note rollback on a D01 refusal, retry safety, and the hard rule that an issued note can't be cancelled or edited. It also discloses the audit-trail actor and the order-status side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the CONSEQUENCE block is genuinely useful. However internal codes (P8, D01, OP2, D03) and references to stock.move / stock_movement_id are opaque jargon that add length without adding meaning for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does report the material outcomes (one issue movement per line, stored stock_movement_id, raised delivered_qty, order advanced to partially_delivered or delivered). Only the concrete response shape is unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry all four parameters, but it only explains 'actor' (audit trail) and implicitly 'idempotencyKey' via the retry/idempotency claim. workspaceId and deliveryNoteId are left entirely to their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('issues a drafted delivery note') plus the physical effect ('stock leaves the shelf'), which clearly separates it from delivery_note_create (drafting) and delivery_note_render (display). The first phrase front-loads what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The precondition is implied by 'issues a drafted delivery note' and the CONSEQUENCE block makes the commitment level explicit, which helps an agent decide whether to call it now. It never names an alternative such as delivery_note_create for redrafting or a stock return for reversal, so routing guidance stops short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delivery_note_renderA
Destructive

Drucke / lade den Lieferschein (local artifact, OP4): renders the Lieferschein PDF for an ISSUED note, files it in E00 (entity_kind delivery_note) and locks OR 958f retention off the shipment date. The PDF carries NO VAT statement (a delivery note is a Beleg, not a taxable document; MWST arises on the A11 invoice). Idempotent: a re-render returns the existing E00 document, one Beleg per note. A draft note is refused (not_issued). The OSS core renders and files, then STOPS; emailing it is cloud-tier.

NameRequiredDescriptionDefault
workspaceIdYes
deliveryNoteIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral detail beyond the single destructiveHint annotation: it files a local artifact in E00, locks OR 958f retention from the shipment date, produces a PDF with no VAT statement, enforces one Beleg per note, and returns the existing document on re-render. These are exactly the side effects and workflow boundaries an agent needs to understand.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: it immediately states the operation, then covers filing, retention, tax-document status, idempotency, refusal behavior, and tier boundaries. Every sentence contributes useful operational context despite the presence of domain-specific codes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex filing-and-locking operation with no output schema and minimal annotations, the description covers behavior, side effects, idempotency, and refusal conditions well. It is less complete on parameter semantics and only partially describes what a first render returns, but overall it gives enough context to invoke the tool safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter semantics, but it never names workspaceId, deliveryNoteId, or idempotencyKey or explains their requiredness or format. It indirectly implies deliveryNoteId must refer to an issued note and that idempotency is enforced server-side, but it leaves most parameter-level meaning undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: renders the Lieferschein PDF for an issued delivery note and files it in E00. It also clearly distinguishes this operation from issuing or emailing by specifying that the note must be ISSUED, a draft is refused, and emailing is cloud-tier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: use it for an ISSUED note, drafts are refused with not_issued, re-renders are idempotent and return the existing E00 document, and the OSS core stops after rendering/filing. It does not explicitly name sibling alternatives such as delivery_note_issue, but the prerequisites and boundaries are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delivery_statusA
Read-only

Inspect the running TILL delivery process: mode (up | mcp | serve | agent_session), version, the schema generation of the open database, the path of the open database file (dbPath, ":memory:" on an ephemeral run), the bound loopback host and port, whether the built Studio is served, and the local scheduler (enabled, last tick, next tick). Pre-workspace: it describes the process, not any tenant, so it takes no workspaceId. In agent_session mode your books run inside the agent runtime and residency is the runtime vendor, not your machine (M00 US-M00.6).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds valuable behavioral context beyond that: it details the fields reported, explicitly notes that it takes no workspaceId, and explains the agent_session residency nuance. It does not mention potential absence of a database or failure modes, but the read-only nature and field list provide strong transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense but well-organized single paragraph of three sentences. It front-loads the primary purpose and enum values, then lists the inspected fields, and finally adds usage caveats. It is appropriately sized for a diagnostic tool with many reported fields, though slightly verbose with the M00 reference.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description fully enumerates all expected return fields (mode, version, schema generation, dbPath, host/port, Studio served, scheduler details). It also covers the pre-workspace context and agent_session residency, making the tool's behavior clear enough for an agent to invoke it correctly without guessing the result shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the baseline for zero parameters is 4. The description adds clarifications about what the tool does not take (workspaceId) and pre-workspace usage, which is useful guidance. With 100% schema coverage (empty schema), there is nothing else to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Inspect') and resource ('running TILL delivery process'), and enumerates the exact data points returned (mode, version, schema generation, dbPath, host/port, Studio served, scheduler). It clearly distinguishes this from tenant-level status tools by emphasizing it describes the process, not a tenant, and takes no workspaceId.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use it: it works pre-workspace and describes the process, so no workspaceId is needed. It also clarifies behavior in agent_session mode. However, it does not explicitly name alternative sibling tools (e.g., runtime_status, env_status) or state when not to use it in favor of those, so it falls short of the highest bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_rate_feedA
Read-only

Report which published rate series MWSTV Art. 45 admits, the endpoint each one lives at, how its validity dates and per-unit quotations work, and the pages that establish it. Call this first: the engine performs NO network I/O, so a caller fetches the endpoint itself and hands the response body to import_exchange_rates.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though the `readOnlyHint` annotation already signals safety, the description adds crucial behavioral detail: 'the engine performs NO network I/O' and that the caller must fetch the endpoint independently. This goes beyond the annotation and helps the agent correctly orchestrate the call, avoiding false assumptions about network side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero fluff. The first sentence states the core purpose and the second gives the critical usage instruction. Information is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple schema (one param), minimal annotations, and no output schema, the description fully covers what the tool returns (series, endpoints, validity, quotations, pages) and how to use it (call first, pass response to `import_exchange_rates`). Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has a single required `workspaceId` with no description, and schema description coverage is 0%. The description does not mention `workspaceId` at all, leaving its purpose only implicitly tied to the workspace context of rate feeds. With such low coverage, the description should have compensated by clarifying the parameter, but it doesn't.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: 'Report which published rate series MWSTV Art. 45 admits'. It precisely enumerates what the tool covers (endpoint, validity dates, per-unit quotations, establishing pages), making its function unmistakable. It also distinguishes itself from the related `import_exchange_rates` by explicitly marking itself as the preceding step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Call this first' and explains the exact workflow: 'a caller fetches the endpoint itself and hands the response body to `import_exchange_rates`.' This gives unambiguous sequencing and rationale (the engine performs no network I/O), leaving no doubt about when and how to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_anomaliesA
Read-only

Surface likely mistakes as flags, never auto-corrections: probable duplicate entries, stale drafts, missing tax codes and round-number outliers over the posted ledger (optional period YYYY or YYYY-MM). Writes nothing; the user confirms before any fix is drafted.

NameRequiredDescriptionDefault
periodNo
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds 'Writes nothing; the user confirms before any fix is drafted' and 'never auto-corrections.' This gives the agent important behavioral details about side effects and the interaction flow, adding value over the annotation's simple read-only flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core action ('Surface likely mistakes as flags') is front-loaded, followed by the specific anomaly types and the safety constraint ('Writes nothing'). Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 parameters, no output schema) and the readOnlyHint annotation, the description fully covers what an agent needs: the action, the scope, the optional period format, and the confirmation behavior. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates partially. It explains the period parameter's format ('optional period YYYY or YYYY-MM') but does not explicitly describe workspaceId. However, workspaceId is self-explanatory as a workspace identifier and the description implies its role via 'over the posted ledger.' This adds meaning beyond the raw schema, though it could be more explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Surface likely mistakes as flags, never auto-corrections' and lists specific anomaly types (duplicate entries, stale drafts, missing tax codes, round-number outliers) over the posted ledger. It distinguishes itself from sibling tools by emphasizing it never auto-corrects and requires user confirmation, making its scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context on when to use it ('over the posted ledger') and mentions an optional period (YYYY or YYYY-MM). However, it does not explicitly list alternatives or conditions for when not to use it, which would earn a 5. It provides clear context but no exclusions or named sibling comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

disable_automation_ruleB
DestructiveIdempotent

Stop a rule firing, immediately. Deliberately requires NO capability at all: a stop button that needs a permission is not a stop button, and disabling only ever prevents a write, never causes one.

NameRequiredDescriptionDefault
ruleIdYes
workspaceIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotent and destructive hints, the description discloses two useful behavioral traits: the action requires no capability/permission, and it only prevents writes rather than causing them. There is mild tension with destructiveHint=true, but the description is clarifying that the destructive effect is limited to disabling, not data mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action. The second sentence carries useful auth/safety context, though the rhetorical 'a stop button that needs a permission is not a stop button' is somewhat verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation tool, the description covers effect, immediacy, and authorization context. It leaves the required workspaceId and ruleId parameters unexplained and does not describe what happens if the rule is already disabled, though idempotency is covered by annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both required parameters (workspaceId, ruleId), and the description never explains what those identifiers refer to or how to obtain them. It adds no meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Stop a rule firing, immediately'), so the agent knows this disables an automation rule rather than archiving or updating it. It does not explicitly distinguish itself from sibling tools like archive_automation_rule or enable_automation_rule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The imperative 'Stop a rule firing, immediately' implies the use case: halt active automation. However, there is no explicit guidance on when to choose disable_automation_rule versus archive_automation_rule or update_automation_rule, and no stated prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

disable_pluginA
DestructiveIdempotent

Deaktiviere eine Erweiterung ohne sie zu deinstallieren (US-G02.3): sweep every capability registration the plugin holds (its MCP tools vanish, its Studio screen unmounts, its report source and automation actions stop resolving), stop its sandbox, and flip status to disabled, keeping the manifest and granted permissions so a later enable_plugin needs no re-install. History (audit rows, past automation runs) is untouched.

NameRequiredDescriptionDefault
pluginIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say idempotent and destructive; the description explains exactly what the destruction covers — capability registrations swept (MCP tools vanish, Studio screen unmounts, report source and automation actions stop resolving), sandbox stopped, status flipped. It also bounds the blast radius: manifest and permissions retained, audit rows and past automation runs untouched, which resolves any worry that destructiveHint means data loss.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense, front-loaded sentence whose parenthetical (its MCP tools vanish, its Studio screen unmounts, ...) carries real information rather than filler. Minor waste only in the internal ticket reference '(US-G02.3)' and the German/English switch mid-description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter mutation with no output schema, the behavioral picture is essentially complete — effects, reversibility, and preserved state are all covered. The remaining gap is practical: nothing about what a successful response contains or what happens when the plugin is already disabled, though idempotentHint true partly covers the latter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not mention workspaceId, pluginId, or idempotencyKey at all, so it adds nothing to the schema here. The parameter names are largely self-explanatory and idempotentHint covers the idempotency key's intent, which keeps this at a minimum-viable 3 rather than lower.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (disable a plugin) and immediately delimits it against the sibling it could be confused with: 'ohne sie zu deinstallieren' and 'keeping the manifest and granted permissions so a later enable_plugin needs no re-install'. That contrasts disable_plugin with uninstall_plugin and enable_plugin without requiring the agent to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is clear: temporarily deactivate a plugin while preserving install state, especially when a later enable_plugin is anticipated. Sibling routing is implied by the explicit 'not uninstall' framing rather than stated as an if/then rule, so there is no explicit when-not or step-by-step alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discard_demo_workspaceA
DestructiveIdempotent

Hard-delete a demo workspace and every row under it, because nothing in a demo is a real fiscal record. Refuses on any workspace whose kind is not demo (not_a_demo_workspace): a Testmandant discards through discard_testmandant, and a live workspace can only be archived (A23), never hard-deleted. Requires manage_settings on the demo and confirmed:true (needs_confirmation otherwise): the operator may have added their own experiments. A retry of the same key replays the stored result, even though the workspace itself is gone. CONSEQUENCE: Deletes the demo workspace and everything in it for good, your own experiments included. A live workspace can never be deleted this way.

NameRequiredDescriptionDefault
confirmedNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint and idempotentHint; the description goes well beyond them by naming the permission required, the needs_confirmation failure mode and why it exists (operator may have added experiments), and the exact idempotency semantics — a retry of the same key replays the stored result even though the workspace is gone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and logically ordered (what it does, refusals, requirements, idempotency, consequence), but it repeats itself: the CONSEQUENCE block restates the deletion scope and permanence from sentence one, and the closing sentence re-states the A23 live-workspace rule already given.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-param destructive tool with no output schema, the description covers the full decision surface: eligibility, permission, confirmation, idempotency replay, error codes, and an explicit consequence statement. Nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description has to carry the parameters, and it does for two of three: confirmed:true with the needs_confirmation fallback, and idempotencyKey with replay semantics. workspaceId is only implied by 'a demo workspace' rather than explained, leaving a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — hard-delete a demo workspace and every row under it — and immediately bounds the scope to workspaces whose kind is demo. It distinguishes itself from discard_testmandant and archive_workspace by name, so an agent can pick correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when-not to use it: refuses on any non-demo workspace (not_a_demo_workspace), routes Testmandant to discard_testmandant, and states a live workspace can only be archived (A23). Prerequisites (manage_settings, confirmed:true) are spelled out with their failure codes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discard_dunning_runA
DestructiveIdempotent

Discard a PROPOSED Mahnlauf: remove the draft run and its items and free the day, so a new propose_dunning_run for that date makes a fresh run. Nothing was booked, rendered or sent, so nothing else changes; the discard stays on the audit trail. An issued or sent run is refused invalid_transition: its letters and fee stand, and a wrong fee is reversed by dunning_fee_reverse. Idempotent: a replay, or a second discard of the same run, answers alreadyDiscarded and writes nothing. Another workspace's run is not_found. CONSEQUENCE: Discards the proposed reminder run; nothing was booked or sent. The run cannot be brought back, but you can propose a new run for the same day.

NameRequiredDescriptionDefault
runIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond idempotentHint/destructiveHint: it discloses that nothing was booked, rendered or sent, that the discard remains on the audit trail, that the run cannot be restored, and that the same-day reuse path is propose_dunning_run. It also enumerates the exact error semantics (invalid_transition for issued/sent, alreadyDiscarded for replays, not_found for another workspace's run).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core behavior is front-loaded in the first sentence and the error/idempotency rules follow logically. The trailing CONSEQUENCE block, however, restates ground already covered ('nothing was booked or sent', 'cannot be brought back'), so the description is longer than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent mutation with no output schema it covers side effects, reversibility, audit trail, error codes and the recovery path. The remaining gaps are the success response shape and per-parameter requirements, which are not addressed anywhere in the structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning, and it only does so indirectly: idempotency behavior is described ('a replay ... answers alreadyDiscarded'), workspace scoping is implied ('Another workspace's run is not_found'), and runId is only 'the run'. It never says where runId comes from (list_dunning_runs/propose_dunning_run) or that idempotencyKey must be caller-supplied and stable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Discard a PROPOSED Mahnlauf: remove the draft run and its items and free the day') and immediately scopes it to draft runs only, distinguishing it from issue/send paths. The effect on the day and the follow-up propose_dunning_run are spelled out, so an agent can identify the tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit use conditions (a proposed run you want to redo), explicit non-use conditions (an issued or sent run is refused invalid_transition), and names the correct alternatives: propose_dunning_run to recreate, dunning_fee_reverse for a wrong fee. This is a complete routing decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discard_orphan_testmandantA
DestructiveIdempotent

Discard an ORPHANED Testmandant: a hard delete of a trial workspace (kind sandbox) that no migration plan in any workspace links any more, for example one an env_copy carried without its plan. Pass the sandbox itself as workspaceId. Refuses a workspace that is not a sandbox (not_a_testmandant) and a sandbox a plan still links (testmandant_linked: discard it with discard_testmandant from that plan). Requires manage_import on the sandbox and confirmed:true (needs_confirmation otherwise). A retry of the same key replays the stored result, even though the workspace itself is gone. CONSEQUENCE: Deletes this trial workspace, which no migration plan uses any more, and everything in it for good. Your live books are never touched.

NameRequiredDescriptionDefault
confirmedNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive and idempotent, and the description adds substantial context beyond them: manage_import permission requirement, confirmed:true with needs_confirmation error code, and the replay semantics of a retried idempotency key even after the workspace is gone. The CONSEQUENCE line states what is irreversibly destroyed and reassures live books are untouched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then constraints, then error codes, then consequence — well organized with a clear CONSEQUENCE marker. It is dense but nearly every clause carries actionable information; slightly long for the payload.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-output-schema tool this is complete: it covers prerequisites, refusal conditions with error codes, idempotency behavior, and the destruction scope. An agent can call it correctly and know what to expect on failure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry all three params, and it largely does: workspaceId must be the sandbox itself (not the plan), confirmed must be true, and idempotencyKey controls result replay. Only the key format/length is left unspecified, a minor gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: a hard delete of an orphaned Testmandant (trial workspace, kind sandbox) that no migration plan links. It explicitly distinguishes itself from siblings discard_testmandant and discard_demo_workspace by defining 'orphaned' precisely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the exact conditions for use and the alternatives: refuses non-sandboxes (not_a_testmandant) and sandboxes still linked by a plan, routing the caller to discard_testmandant from that plan. The env_copy example clarifies the typical orphan origin.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discard_payment_batchA
Idempotent

Abandon a batch that must not be paid, moving it to the terminal 'discarded' status so its bills become payable again. A draft batch discards freely; a generated batch has already produced a pain.001 file, so discarding it requires confirmation:true. A paid batch cannot be discarded (already_paid) and a discarded one is already terminal (already_discarded). Deletes no row (append-only); this is the recovery path for a batch drafted against a mistyped IBAN or one whose generate step failed, without it the only forward move was to book a payment that was never made. Posts nothing. CONSEQUENCE: Discards the payment run, so its bills become payable again; the run stays on record as discarded. If you already uploaded its file at your bank, cancel the order there too.

NameRequiredDescriptionDefault
batchIdYes
workspaceIdYes
confirmationNo
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotency and non-destructiveness; the description adds the state machine (draft/generated/paid/discarded), the required confirmation:true gate, named error outcomes (already_paid, already_discarded), the append-only guarantee, that it posts nothing to the ledger, and an out-of-band caveat about cancelling the order at the bank. That is substantial disclosure of consequences beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and outcome, then the state conditions, then the labeled CONSEQUENCE. It repeats 'its bills become payable again' in the opening sentence and again in the consequence block, and the recovery-path anecdote is slightly verbose, but nothing is out of order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and thin annotations, everything needed to call it safely is present: preconditions, the confirmation gate, failure modes, whether rows are deleted, ledger impact, and the external bank-side follow-up. Nothing material is missing except the return payload, which no output schema promises.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load; it does explain the one non-obvious parameter (confirmation, required only for generated batches) but leaves batchId, workspaceId and idempotencyKey entirely undocumented. The three required params are conventional identifiers, so partial compensation is enough for a 3, not a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Abandon'/'discard') plus resource ('a payment batch') plus the resulting state ('terminal discarded status') and the downstream effect on bills. An agent can distinguish this from mark_batch_paid or generate_pain001 without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the triggering situations (batch drafted against a mistyped IBAN, or whose generate step failed) and the state-conditional behavior. It implicitly contrasts with the only other forward move ('book a payment that was never made') but never names a sibling tool such as mark_batch_paid as the alternative, so it stops just short of a full routing rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discard_testmandantA
DestructiveIdempotent

Discard a Testmandant and have it truly gone: a hard delete of the trial workspace and every row under it, because nothing in it is a real fiscal record until it goes productive. It deletes only the Testmandant these books created: a copy of the books whose plan still points at the original's Testmandant drops its own link and deletes nothing ({unlinkedOnly:true, discardedWorkspaceId:null}), and a link to a workspace that no longer exists is cleared ({alreadyGone:true}). Refuses on any workspace whose kind is not sandbox (not_a_testmandant): a demo discards through G03, and a live workspace can never be hard-deleted through this family, so after go_productive this same call refuses. Once any step has committed to a live workspace, discard requires commit_migration. The plan itself survives and returns to planned with its trial-load state reset (an abandoned or closed plan keeps its status); the maps and declared controls are kept. A sandbox no plan links any more is discarded with discard_orphan_testmandant. CONSEQUENCE: Deletes the trial workspace these books created, and everything in it, for good; a copy never deletes the original's. Your live books and the migration plan stay, so you can load a new trial.

NameRequiredDescriptionDefault
planIdYes
confirmedNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond destructiveHint/idempotentHint by explaining exactly what is destroyed, what survives, how copies behave, how already-gone links are handled, and when the call refuses. The CONSEQUENCE section reinforces irreversibility and scope without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the structure moves logically from action to caveats to consequence. It is longer than necessary for a description and repeats the deletion consequence, but the length is largely justified by the tool's destructive complexity and edge cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive migration tool with no output schema, it covers behavior, refusals, alternatives, residual state, and consequences thoroughly. The remaining gap is parameter-level guidance, which is handled separately, so overall context is strong but not perfect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain workspaceId, planId, idempotencyKey, or confirmed. It gives conceptual context around workspaces and plans but does not map meaning, requiredness, or expected values to the actual parameters, leaving the agent to infer from names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: discarding a Testmandant via hard delete of the trial workspace and all rows under it. It clearly distinguishes this from discard_orphan_testmandant, discard_demo_workspace, go_productive, and commit_migration, so an agent can identify the operation without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when this applies and when it refuses: only sandbox workspaces, not demos, not live workspaces after go_productive, and live-committed workspaces require commit_migration. It also names discard_orphan_testmandant for sandboxes no plan links, giving clear alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dispatch_previewA
Read-only

Render the concrete outbound message(s) as a pure read: nothing is sent, nothing is written. documentId (invoice/quote) yields exactly one resolved message; runId (dunning_run) yields one per debtor (narrowable via contactId), each with the recipient, locale, filled variables and attachment list; with neither, the saved or built-in text renders against MUSTER sample values (the editor's preview; locale picks the slot). A recipient without an email carries the owning send verb's own flag (needs_customer_email per A11, needs_email_transport per A15).

NameRequiredDescriptionDefault
runIdNo
localeNo
contactIdNo
documentIdNo
workspaceIdYes
documentKindYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses detailed behavioral nuances: exact message counts per mode, what fields are provided (recipient, locale, filled variables, attachment list), and the fallback to sample values. It also covers the special case of recipients without email and their associated flags, adding substantial context that the annotation alone could not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with the most important behavioral caveat ('pure read'). All three sentences contribute information, using semicolons to pack multiple facts into a structured flow. The heavy use of domain jargon (MUSTER, A11, A15) may hinder parseability for agents, but the structure itself is logical and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all three usage modes, specifies the output contents, and addresses an important edge case (missing email). Given there is no output schema, it provides reasonable detail for an agent to know what will happen. Some terms like 'MUSTER sample values' assume domain familiarity, and the return shape is described but not formally structured.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description must explain parameters, and it does explain documentId, runId, contactId, and locale with specific meaning. However, the two required parameters, workspaceId and documentKind, are not described at all; they are left entirely to the agent's domain knowledge. The description partially compensates for the schema gap but not completely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Render') and resource ('outbound message(s)'), and immediately clarifies the key scope with 'nothing is sent, nothing is written'. It clearly differentiates the three input modes (documentId, runId, neither) and implies this is the preview counterpart to send operations, making 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides strong context for when to use the tool: to preview concrete outbound messages without sending. It explains the three different invocation patterns based on ID presence, effectively telling the agent which arguments select which behavior. However, it does not explicitly name alternative tools or state 'use this instead of X', leaving exclusions implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dispatch_text_resetA
DestructiveIdempotent

Return one Textbaustein slot (documentKind invoice, quote or dunning_run, and locale) to the built-in default text by deleting its saved subject + body; the slot then resolves exactly as one never saved (preview defaulted:true). Naturally idempotent: resetting a slot with no saved text answers ok with unchanged:true and touches nothing. Sends NOTHING, changes no send behaviour and never edits the send log. CONSEQUENCE: Deletes the saved email text for this kind of document and language; messages from now on use the built-in text. To get your text back, it has to be saved again.

NameRequiredDescriptionDefault
localeYes
workspaceIdYes
documentKindYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint, but the description goes well beyond them by naming exactly what is destroyed (the saved subject and body of one slot), how idempotency manifests (`ok` with `unchanged:true`, nothing touched), and what is explicitly out of scope (no sending, no send-behaviour change, no send-log edits). It also discloses the recovery cost: the text must be saved again, which is critical for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then idempotency, then the negative guarantees, then a capitalized CONSEQUENCE line. Every sentence carries signal, though the explicit no-send/no-log sentence overlaps slightly with the consequence framing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape (`ok`, `unchanged:true`, preview `defaulted:true`) and the full destructive footprint, which is what an agent needs before invoking. It stops short of covering validation or error cases, e.g. an unknown documentKind or a workspaceId the caller cannot access.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are no enums, so the description carries the burden. It compensates well for the two discriminating parameters by enumerating documentKind values (invoice, quote, dunning_run) and explaining locale as the slot's language; workspaceId is only implied as the tenant scope.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: delete a saved Textbaustein slot's subject + body so the slot falls back to the built-in default. The scoping key (documentKind + locale) is spelled out, so the operation is unambiguous. It never names the sibling `dispatch_text_upsert` as the inverse operation, which is what would separate a 5 from a 4.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context for when this applies: undoing a customization so messages use the built-in text, including the safe no-op case when nothing is saved. Exclusions are present for adjacent concerns (does not send, does not alter send behaviour or the send log). It does not explicitly point at `dispatch_text_upsert` for the opposite action, so an agent must infer the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dispatch_text_upsertA
DestructiveIdempotent

Speichere den Textbaustein (subject + body) for one document kind (invoice, quote or dunning_run) and locale: the workspace's own outbound message text, with {{variable}} interpolation validated against the kind's registered variable set AT SAVE TIME (an unknown variable is refused with unknown_variable naming the valid set, never a broken mail later). Naturally idempotent: it asserts the absolute state of one (documentKind, locale) slot, and a value-identical re-save writes nothing at all. Sends NOTHING and changes no send behaviour; a missing slot falls back to the built-in default text at preview. CONSEQUENCE: Saves the email text for this kind of document and language; messages sent from now on use it. You can edit it again or reset it to the built-in text.

NameRequiredDescriptionDefault
bodyYes
localeYes
subjectYes
workspaceIdYes
documentKindYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: reveals that {{variable}} interpolation is validated AT SAVE TIME and an unknown variable is refused with an error code (unknown_variable) naming the valid set, that re-saving identical content writes nothing, that a missing slot falls back to the built-in default at preview, and that no mail is sent and send behaviour is unchanged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, but it opens in German and switches to English mid-sentence, and the trailing 'CONSEQUENCE:' paragraph largely restates the save-and-now-in-use semantics already given. Several clauses (preview fallback, reset/editability) could be tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param write tool with no output schema, it covers the important unknowns: validation timing and error code, idempotency semantics, side-effect absence, and the fallback behaviour. It only lightly conveys that an existing saved text is replaced (the destructiveHint), which is the one material gap for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry the load, and it does explain the key parameters: documentKind (invoice/quote/dunning_run), locale, subject+body as the interpolatable text, and workspaceId implicitly via 'the workspace's own outbound message text'. It does not specify locale syntax (e.g. de-DE vs de) or subject/body size limits, so it stops short of full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource: save the text template (subject + body) for one (documentKind, locale) slot in the workspace's outbound message text. It even enumerates the valid documentKind values (invoice, quote, dunning_run), so an agent knows exactly what this writes without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: it says messages sent from now on use the text and that you can edit again or reset to the built-in text, which hints at the reset sibling. But it never explicitly says when to use this instead of dispatch_text_reset or dispatch_preview, and there are no exclusions or prerequisites beyond 'this sends nothing'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draft_generateA
Idempotent

Erstelle einen Antwortentwurf für einen Mail-Thread, lokal und in den Entwurfsordner des eigenen Mail-Programms (nie versendet: TILL hat kein Sende-Verb und kein SMTP). Der Entwurf spricht mit dem gelernten Schreibstil (E05) und wird NUR für einen Kontakt mit eingeschalteter Einwilligung (contact.ledger_grounding_enabled, via contacts_update) mit den Buchhaltungs-Fakten aus A16/A11/B00 fundiert; groundInLedger:false schaltet die Fundierung zusätzlich AUS, einschalten kann kein Parameter (die Einwilligungs-Asymmetrie). Ein unbekannter Absender fundiert nie; ohne read_sales fundiert nichts. Antwortet nothing_to_reply_to wenn die neuste Nachricht schon von Ihnen ist, needs_voice_profile ohne Schreibstil, needs_local_runtime ohne lokale Engine (kein Cloud-Fallback existiert), source_changed wenn die Nachricht sich geändert hat. Ein Schlüssel schreibt genau EINEN Entwurf.

NameRequiredDescriptionDefault
threadIdYes
profileIdNo
workspaceIdYes
groundInLedgerNo
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that the draft is written only locally into the drafts folder and is never transmitted, that grounding is gated by per-contact consent, that the consent asymmetry makes enablement impossible via any parameter, and it enumerates the specific failure outcomes (nothing_to_reply_to, needs_voice_profile, needs_local_runtime, source_changed). The "one key writes exactly one draft" statement is consistent with idempotentHint=true, not a restatement of it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action in the first clause, and every subsequent sentence adds substantive constraint or error semantics rather than filler. It is dense with nested parentheticals and long semicolon chains, which costs some readability, but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter mutation tool with no output schema and only two annotations, the description covers side effects, consent gating, runtime requirements and named error states thoroughly. Remaining gaps are the meaning of workspaceId/threadId/profileId and what the returned draft handle looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden; it does explain groundInLedger's semantics and the one-draft-per-idempotencyKey rule, and implies profileId through needs_voice_profile. But threadId, workspaceId and profileId are never defined in either the schema or the description, leaving three of five parameters opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ("Erstelle einen Antwortentwurf für einen Mail-Thread") plus its scope: written locally into the local mail client's drafts folder, never sent. That "never sent, no SMTP verb" clause meaningfully separates it from send-style tools. It does not explicitly name the closest siblings (mail_draft_write, draft_regenerate, draft_list), so differentiation is by behavior rather than by routing statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives detailed when/when-not conditions: grounding only applies to a contact with ledger consent, groundInLedger:false can only switch funding off, unknown senders and missing read_sales never ground, and no cloud fallback exists. What is missing is routing guidance against the sibling tools that also write drafts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draft_listA
Read-only

Die Entwurfs-Läufe (P5), neuste zuerst, je Thread oder über den Arbeitsbereich: welches Modell welchen Entwurf schrieb (runtime, model_ref, prompt_sha256, nie der Prompt selbst), ob die Buchhaltung einbezogen war (grounded), der Status (ok, needs_local_runtime, needs_mailstore, failed), und der Entwurfstext ON DEMAND aus dem Entwurfsordner gelesen, nie aus SQLite. draftGone sagt, dass der Mensch ihn gesendet oder gelöscht hat; modelChanged, dass ein anderes Modell registriert ist als das, das ihn schrieb.

NameRequiredDescriptionDefault
threadIdNo
workspaceIdYes

TDQS

A3.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=trueholiday. The description adds substantial behavioral context beyond that: the draft text is read on demand from the drafts folder 'nie aus SQLite', the prompt itself is never returned, and the semantics of the draftGone and modelChanged flags are explained. This gives the agent a precise mental model of what the tool will and will not do.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense run-on sentence stuffed with parenthetical enumerations (fields, statuses, flag meanings). Every clause carries information, so there is no waste, but the structure is hard to parse and front-loads only partially; the core purpose appears first, yet the flag semantics trail in a long tail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully explains the meaning of returned fields, statuses, and edge-case flags—the hardest part of invoking this tool. However, it never explicitly states that workspaceId is required or documents the expected parameters in a structured way, leaving an agent to reverse-engineer the call signature from prose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It indirectly explains the workspaceId vs threadId scoping ('je Thread oder über den Arbeitsbereich') but never names either parameter explicitly, nor documents requiredness or formats. Partial compensation at best for the 2 undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb plus resource: it lists draft runs ('Entwurfs-Läufe'), sorted newest first, scoped per thread or workspace, and enumerates the fields returned. It is clearly a listing operation distinct from siblings like draft_generate or draft_regenerate, though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies two usage scopes ('je Thread oder über den Arbeitsbereich'), which maps to the threadId/workspaceId parameters, but provides no guidance on when to prefer this tool over alternatives, no exclusions, and no prerequisites. All usage context must be inferred from the prose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draft_regenerateA
DestructiveIdempotent

Erstelle einen Entwurf neu, mit optionalem Hinweis ("kürzer", "förmlicher"): schreibt eine NEUE draft_run-Zeile (die Versuchsfolge bleibt nachvollziehbar) und ERSETZT die Nachricht im Entwurfsordner statt eine zweite daneben zu legen. Ein Entwurf, den der Mensch schon gesendet oder gelöscht hat, antwortet draft_gone und wird nicht neu erzeugt: gesendet heisst seiner. Hat der Mensch den Entwurf im Mail-Programm bearbeitet und noch nicht gesendet, antwortet draft_edited und nichts wird überschrieben; nur overwriteEdits:true ersetzt seine Änderungen. Einwilligung und RBAC werden neu gelesen, nie vom früheren Lauf geerbt.

NameRequiredDescriptionDefault
hintNo
draftRunIdYes
workspaceIdYes
idempotencyKeyYes
overwriteEditsNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint and idempotentHint, and the description goes well beyond them: it discloses the append-only draft_run audit row, that the drafts-folder message is replaced in place, the two guarded failure modes (draft_gone / draft_edited) and the overwriteEdits escape hatch, plus that consent and RBAC are re-evaluated per run rather than inherited. That is exactly the behavioral context an agent needs before invoking a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main effect (new run row + in-place replacement) is front-loaded, and the guard conditions follow in a logical order. It is dense and reads as a long run-on, but essentially every clause carries information an agent needs; little could be cut without losing a rule.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent-looking mutation with no output schema, the description covers side effects, the audit trail, and both refusal outcomes. The remaining gap is what a successful response contains and what idempotencyKey guarantees across retries, which the agent must infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description has to carry all five parameters. It meaningfully explains hint (with concrete examples "kürzer", "förmlicher"), overwriteEdits (overrides the human's mail-client edits) and implies draftRunId as the target of regeneration, but workspaceId and idempotencyKey are never addressed, leaving two required parameters undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Erstelle einen Entwurf neu") and immediately states the two defining effects: a new draft_run row is written and the message in the drafts folder is replaced rather than duplicated. The required draftRunId makes it clear this operates on an existing draft, distinguishing it from draft_generate without needing the sibling's schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit conditions and outcomes: a sent/deleted draft returns draft_gone, a human-edited unsent draft returns draft_edited, and only overwriteEdits:true overrides those edits. What's missing is an explicit routing statement (use draft_generate for a first draft, this for a redo) and guidance on when the optional hint is worth supplying beyond the two examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dunning_fee_reverseA
Idempotent

Storniere the Mahngebühr of an ISSUED or SENT Mahnlauf (D169), the ONE correction of a booked dunning fee: posts the faithful A02 reversing entry of the run's single fee entry (OR 957a, dated today, the D69 VAT trace carried, so the Umsatzsteuer comes back on its Ziffer). The run, its levels and its letters stand (D73: a letter that went out cannot be unsent, and lettersSent on the result counts them); the fee leaves the OP-Liste from today, and in the same transaction every letter not yet sent is re-issued without the fee (D174: its frozen demand drops the fee line, nothing else moves, the superseded demand is on the audit trail as refreeze_without_fee; lettersReissuedItemIds names the items), so send_dunning_run mails it. A letter already sent, or whose transport outcome is unknown, stays exactly as it went. The whole run's fee is reversed: it is one aggregate posting. Refusals write nothing: a proposed run is invalid_transition (discard_dunning_run instead); a run without a fee entry is no_fee_booked (feeSkippedReason names a period lock); a fee any live payment settled is fee_settled with paymentIds (reverse_payment first); a fee already reversed, also by a raw Storno from before this verb, is already_reversed naming the mirror; period_locked when today is sealed; a blank reason is reason_required. The raw reverse_entry refuses the fee entry (owned_by dunning_fee_reverse). Requires dun AND post. Idempotent: a replay under the same key answers the stored result. D174: the workspace setting dunning.refreeze decides what happens to the unsent letters: re-issue (default, as above) or hold (D169: nothing is re-frozen and send_dunning_run holds such a letter as fee_reversed); dunning.letter_date decides the date a re-issued letter carries: run_date (default) or today (the day of the re-issue, fixed then, so a later change of the setting re-dates nothing; the run view names each letter's letterDate). refreeze (re-issue|hold) and letterDate (run_date|today) override the setting for this run only and need a non-blank overrideReason (reason_required otherwise, before anything is drafted or written), which is written into the mirror's text and a dunning_run refreeze_override audit row; the result names the rules that applied (refreeze, letterDate) and overridden:true. CONSEQUENCE: Reverses the run's reminder fees with a correcting entry; the original stays visible. Levels and sent letters stand; an unsent letter is re-issued without the fee, or held if your settings say so.

NameRequiredDescriptionDefault
runIdYes
reasonYes
refreezeNo
letterDateNo
workspaceIdYes
idempotencyKeyYes
overrideReasonNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint and destructiveHint=false annotations, it discloses exactly what survives (the run, levels, sent letters), what changes (the fee leaves the OP-Liste from today, unsent letters re-issued without the fee), what is refused (invalid_transition, no_fee_booked, fee_settled, already_reversed, period_locked, reason_required) and that refusals write nothing. It also states the required permissions (dun AND post), the idempotency replay behavior, and the interaction with workspace settings dunning.refreeze and dunning.letter_date plus per-run overrides. This is unusually rich behavioral disclosure well past the annotation bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the purpose, and the final CONSEQUENCE sentence is a helpful recap. However, the body is a dense single-block wall of jargon, parenthetical document codes (D169, D174, A02, OR 957a, D73, D69) and abbreviated refusal codes that make it hard to scan. Much of the content earns its place, but the reading burden is high and could be structured with clearer separation of effects, refusals, and settings.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema, the description covers everything an agent needs: preconditions (ISSUED/SENT run, permissions), transactional effects, per-letter re-issue behavior, settings and override precedence, the full refusal vocabulary, and the result fields it will see (lettersReissuedItemIds, feeSkippedReason, paymentIds, refreeze, letterDate, overridden). Little is left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the burden, and it largely does: refreeze (re-issue|hold) and letterDate (run_date|today) are explained with their workspace-setting defaults and override semantics, overrideReason must be non-blank and lands in an audit row, a blank reason is reason_required, and idempotencyKey replays the stored result. Only workspaceId and runId go unexplained, which is minor for two obvious identifiers. The explanation of the enum parameters in particular adds real meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it reverses (Storniere) the dunning fee (Mahngebühr) of an ISSUED or SENT dunning run, via a correcting A02 entry. It also distinguishes itself from siblings by noting that the raw reverse_entry refuses the fee entry (owned_by dunning_fee_reverse) and by naming discard_dunning_run as the alternative for proposed runs. The heavy German accounting jargon (Mahnlauf, OP-Liste, Umsatzsteuer) makes the purpose less immediately legible, but the core action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly routes the agent: a proposed run is invalid_transition, use discard_dunning_run instead; a fee settled by a live payment is fee_settled, use reverse_payment first. It also states that the whole run's fee is reversed because it is one aggregate posting, and that the reverse_entry tool refuses this entry. There is essentially no ambiguity about when this tool is the correct choice versus its alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ebill_delivery_statusA
Read-only

Track eBill deliveries: one by deliveryId (with its mirrored partner-status event trail), or a filtered list by invoiceId, local status (prepared|submitting|transmitted|failed), mirrored partner status (NWP_PENDING|OPEN|APPROVED|REJECTED|COMPLETED), or created-at range, newest first. Read-only.

NameRequiredDescriptionDefault
toNo
fromNo
statusNo
invoiceIdNo
deliveryIdNo
savedViewIdNo
workspaceIdYes
partnerStatusNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds 'Read-only' redundantly but consistently. It adds value by disclosing 'newest first' ordering, the ability to fetch a single delivery with a 'mirrored partner-status event trail', and lists the exact status enums. These details go beyond the annotation and help predict behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core purpose, then enumerates the modes and filters. It uses semicolons to separate clauses, and every phrase adds information. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 8 parameters and no output schema. The description explains the main filters and ordering but does not describe the response format or the exact meaning of the 'mirrored partner-status event trail'. It also omits pagination details and does not mention that workspaceId is required. For a read-only tracker it is reasonably complete but leaves notable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains deliveryId, invoiceId, local status (with enums), partner status (with enums), and created-at range (implied from/to), but does not explicitly map these to the schema property names (e.g., 'from'/'to'). It also omits savedViewId and does not mention the required workspaceId. It covers the main filters but leaves some parameters unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Track') and resource ('eBill deliveries'), and clarifies two modes: lookup by deliveryId or filtered list by various criteria. It includes specific enum values and ordering ('newest first'), and clearly distinguishes from generic 'delivery_status' by the 'eBill' prefix. An agent can immediately understand 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for eBill delivery tracking, but does not explicitly mention alternatives or when not to use it. It does not reference sibling tools like 'delivery_status' or 'ebill_transmit' to guide selection. The context is clear but exclusions are absent, so only implied usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ebill_prepareA
DestructiveIdempotent

Turn an issued invoice (issued, sent, or partially_paid) into an eBill delivery payload on disk, carrying A11's QR reference unchanged. Files the A11 PDF as an E00 document (entity_kind ebill_delivery, OR 958f retention) and records an ebill_deliveries row (status prepared) with the payload's conformance facts (PDF/A profile, eBill addressing, byte length) recorded, never claimed. Refuses a draft/cancelled/settled invoice (invalid_state) and an invoice with no payment part (needs_qr_bill), writing nothing. Idempotent by outcome: at most one active (non-failed) delivery per invoice, so a re-prepare returns the existing row and its stored artifact regardless of key. Posts nothing.

NameRequiredDescriptionDefault
invoiceIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond idempotentHint/destructiveHint: it defines idempotency by outcome ('at most one active (non-failed) delivery per invoice', re-prepare returns the existing row and artifact regardless of key), states that failed prepares are the exception, and explains that conformance facts are 'recorded, never claimed'. That is exactly the mutation-adjacent nuance the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Action is front-loaded in the first clause and every sentence adds a distinct fact (states, side effects, refusals, idempotency). Slightly dense with jargon ('OR 958f retention', 'conformance facts') and mild redundancy between 'writing nothing' and 'Posts nothing'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotation coverage of return values, the description supplies the refusal outcomes, the artifact/row side effects, and what re-invocation returns. It omits any permission/precondition authority and where on disk the payload lands, which would round it out for a filesystem-writing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning: it explains idempotencyKey's semantics ('regardless of key') and implies invoiceId via the invoice-state rules, but says nothing about workspaceId or ID formats. Partial compensation only, so the baseline-3 level is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Turn an issued invoice ... into an eBill delivery payload on disk') plus the exact accepted source states (issued, sent, partially_paid), and the trailing 'Posts nothing' separates it from the transmit sibling. An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not conditions with error codes (draft/cancelled/settled → invalid_state, no payment part → needs_qr_bill) and clarifies it is a prepare-only step that posts nothing. It never names a sibling by name (e.g. ebill_transmit) as the follow-on, so routing is implied 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.

ebill_transmitA
DestructiveIdempotent

Transmit a prepared delivery through the owner-gated cloud connector (P8: outbound, draft-by-default; pass confirmed=true or enable the workspace dial). Guard order: no connector returns the honest {transmitted:false, reason:'cloud_tier'} and the artifact stays downloadable; then needs_biller_pid; then needs_confirmation; then payload_not_conformant if the payload is not PDF/A-3b, not eBill-addressed, or over 10 MB (nothing non-conformant is ever transmitted). On acknowledgement records the business case and drives the invoice issued->sent (A10) only from issued. Idempotent: a transmitted delivery never resubmits; transmission is at-least-once via a stored correlation id. Posts nothing. CONSEQUENCE: Transmits the invoice as an eBill into the customer's e-banking through the connected eBill service. Once it is out, it can't be called back; a correction goes out separately.

NameRequiredDescriptionDefault
confirmedNo
deliveryIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the owner-gated connector, draft-by-default behavior, guard order, specific failure reasons, payload conformance requirements, invoice state transition, idempotency semantics, at-least-once delivery, and irreversibility. These details are consistent with destructiveHint=true and idempotentHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action and then uses a structured guard-order explanation. It is fairly long and dense with internal jargon such as P8 and A10, but most of the detail is relevant for a high-stakes destructive transmission tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, irreversible transmission tool with no output schema, the description is strong on behavioral flow, precondition failures, and consequences. However, it does not fully document parameter meanings or the successful response shape, leaving some invocation details to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needs to explain all four parameters. It only explicitly mentions confirmed=true, while workspaceId, deliveryId, and idempotencyKey are left implicit or only loosely referenced through phrases like 'prepared delivery', 'workspace dial', and 'stored correlation id'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: transmitting a prepared eBill delivery into the customer's e-banking via the connected eBill service. It clearly distinguishes this from preparation or configuration siblings by focusing on the outbound transmission and irreversible external consequence.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use it: after a delivery is prepared, with draft-by-default behavior and confirmed=true or a workspace dial to proceed. It explains failure gates that prevent transmission, but it does not explicitly name alternatives such as ebill_prepare or ebill_delivery_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

egress_self_testB
Read-only

Run the offline proof (OP6): install a socket-level probe over every network vector (TCP, UDP, DNS, TLS, HTTP(S), fetch, WebSocket, subprocess) and run a REAL end-to-end draft generation (E04 mail read -> E05 voice retrieve -> E06 compose -> E04 Drafts write) under it. Reports honestly: passed:true with socketsOpened:0 when the whole loop opened zero sockets (the claim, measured, and it holds with wifi on or off because the probe counts sockets and does not depend on the network being down); egress_violated with the offenders named when any socket was opened (we report our own violation loudly, never degrade the claim quietly); needs_setup naming what is missing (mail_store, voice_profile, local_runtime, draftable_thread) when a real run cannot be attempted; self_test_incomplete when the loop could not finish for a non-egress reason. Produces a draft in the practitioner's own local Drafts folder; mints nothing else. Reads egress.read; deliberately readable by an agent auditing the claim.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true is contradicted by the description's explicit statement that the tool 'Produces a draft in the practitioner's own local Drafts folder' – a clear write side effect. This is a direct annotation contradiction, so the description fails to align with structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense, single block with multiple semicolon-separated clauses. It is front-loaded with the core action but becomes long and winding when explaining all possible outcomes and side effects. While every sentence carries information, the structure could be clearer and more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description thoroughly explains the tool's behavior, return outcomes (passed, egress_violated, needs_setup, self_test_incomplete), and side effect of producing a draft. However, it omits any explanation of the workspaceId parameter, and the contradiction with readOnlyHint undermines overall completeness for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required parameter workspaceId with zero description coverage (0%), and the description does not mention this parameter at all. Since schema coverage is low, the description was expected to compensate but provides no meaning beyond the raw schema type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Run the offline proof (OP6)' that probes network vectors and performs an end-to-end draft generation. It clearly distinguishes this from a simple status check like the sibling egress_status by describing a full self-test with concrete outcomes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for auditing the egress claim ('deliberately readable by an agent auditing the claim') and explains what scenarios lead to which report. However, it never names sibling tools (e.g., egress_status) or states when to prefer this over alternatives, so it lacks explicit exclusions or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

egress_statusA
Read-only

The standing trust indicator (P5, observed never stored): the egress state of THIS process. state=local when the probe is installed and has observed zero outbound sockets this session, violated when it has seen one or more (with the offenders), unknown when the probe could not install (an unverified claim renders as unverified, never as optimism). socketsOpened is the observed count and since is when the observer started. Scoped to the TILL process, NOT the Mac: the mail app uses the internet (that is how mail arrives); this reports only what TILL itself did. Reads egress.read.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses the observed-never-stored nature, the state semantics (including the unverified claim renders as unverified, never as optimism), the counters (socketsOpened, since), and the read source ('Reads egress.read'). This fully explains what the agent will observe and what will happen when the probe can't install.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and information-rich but every clause earns its place. The parenthetical meanings and the explicit NOT distinguish this from sibling status tools. It's a bit long, but each detail (P5, never stored, state meanings, read source) is necessary for correct interpretation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the readOnlyHint and this tool's simplicity (1 param, no output schema), the description fully covers the state space, the observability caveats, and the scope. An agent can decide whether to call this tool and correctly interpret its result without ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only lists workspaceId with zero description. The description does not explicitly explain the workspaceId parameter, but it deeply explains the output/semantics of the tool. With only one parameter, schema coverage is 0%, so the description could have mentioned that workspaceId specifies which workspace's process this queries. However, since the tool is about THIS process, the workspaceId role remains slightly understated; hence 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states this is a trust indicator of the egress state of THIS process, with the exact meaning of each state (local, violated, unknown). It specifies the resource ('TILL process, NOT the Mac') and distinguishes from the mail app. It's specific and unambiguous about what it reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly scopes the tool: 'Scoped to the TILL process, NOT the Mac: the mail app uses the internet... this reports only what TILL itself did.' It clarifies when this tool is relevant (checking this process's egress state) and what it does NOT measure, preventing confusion with other status/monitoring tools like delivery_status, sync_stream_status, or runtime_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

enable_automation_ruleA
DestructiveIdempotent

Let a rule fire again. Requires manage_automations, which is the asymmetry that makes disabling safe to leave open: anyone may stop a rule, only an administrator may start one. An archived rule refuses. CONSEQUENCE: Lets the rule fire again: every matching event then runs its action in its author's name, unattended. You can disable it at any time; what it already did stays done.

NameRequiredDescriptionDefault
ruleIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Significantly exceeds the annotations (idempotentHint, destructiveHint) by disclosing the permission requirement, archived-rule refusal, and a CONSEQUENCE section explaining that actions run unattended in the author's name and cannot be undone ('what it already did stays done'). This is exactly the behavioral context an agent needs before enabling automation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, but 'Let a rule fire again' is repeated almost verbatim in the purpose and the CONSEQUENCE sections, and the aside about 'the asymmetry that makes disabling safe to leave open' meanders. Still reasonably compact but with clear redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-mutating automation tool with no output schema, the description covers permissions, the archived-rule restriction, reversibility, and the unattended-action consequence well. The one gap is total silence on the two required parameters, though annotations already carry the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% with two required parameters (workspaceId, ruleId), yet the description never mentions either. The description provides no compensating meaning about what these IDs refer to, so it adds nothing over the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and resource ('Let a rule fire again') that maps unambiguously to re-enabling an automation rule. It also implicitly contrasts with disable_automation_rule via the asymmetry ('anyone may stop a rule, only an administrator may start one'), so the agent can distinguish it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use (to let a stopped rule fire again) and an exclusion ('An archived rule refuses'), plus a permission prerequisite (manage_automations). It stops short of explicitly naming disable_automation_rule as the counterpart to choose when the goal is the opposite direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

enable_pluginA
DestructiveIdempotent

Aktiviere eine Erweiterung (US-G02.2/3): register every capability the still-persisted manifest declares (its MCP tools, Studio screen, report source, automation actions) and start its sandbox, flipping status to installed. Refuses an incompatible plugin (plugin_incompatible, no run-anyway override, §6b) and a capability whose name another plugin has since taken (capability_name_conflict). CONSEQUENCE: Starts this plugin's third-party code again with the rights you granted, and its tools come back. You can disable it again at any time; what it does while it runs stays done.

NameRequiredDescriptionDefault
pluginIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint; the description goes far beyond by naming the two refusal cases with their error codes (plugin_incompatible with no override, capability_name_conflict), and by stating that third-party code restarts with the previously granted rights. The CONSEQUENCE block clarifies the reversibility/irreversibility boundary ('what it does while it runs stays done'), which is exactly the information annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and mechanics, then refusals, then a clearly labelled CONSEQUENCE block — good information hierarchy. It is dense and includes internal references (US-G02.2/3, §6b) that add noise for an invoking agent, and the German/English mix is slightly uneven.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description covers the state transition (status to installed), failure modes, and side effects well enough to call the tool safely. The remaining gap is parameter-level guidance, especially idempotencyKey semantics for a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three required parameters (workspaceId, pluginId, idempotencyKey), so the description carries the full burden — yet it never explains any of them. In particular the idempotencyKey contract is unaddressed despite the tool being a destructive re-activation, which is the one parameter an agent most needs guidance on.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb (activate/enable) on a specific resource (an extension), followed by the concrete mechanics: registers persisted-manifest capabilities, starts the sandbox, flips status to installed. This is clearly the re-enable counterpart to install_plugin/disable_plugin, and an agent can distinguish it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'still-persisted manifest' implies the plugin was previously installed and disabled, which scopes usage well, and 'You can disable it again at any time' points at the reverse operation. It does not explicitly tell the agent to use install_plugin for new plugins or name any sibling tool, so routing is contextual rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

end_recurring_scheduleA
Idempotent

End a schedule for good: ended is terminal and cannot be resumed (create a new schedule instead). Ending an already ended schedule settles to the same answer. Generated invoices are untouched. CONSEQUENCE: Ends the recurring invoice for good: it makes no more invoices, and those already made stay as they are. To bill again, you set up a new schedule.

NameRequiredDescriptionDefault
scheduleIdYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: terminal state, non-resumability, idempotency ('settles to the same answer'), and preservation of already-generated invoices. This resolves the key risk (does ending destroy invoices?) that idempotentHint/destructiveHint alone would not. Minor redundancy from the CONSEQUENCE restatement keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The terminal/idempotency point is front-loaded, but the 'CONSEQUENCE' sentence largely restates 'End ... for good' and 'Generated invoices are untouched,' wasting space on repetition rather than adding new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behavioral impact is well covered despite the absence of an output schema, but for a two-parameter tool with 0% schema coverage, the complete omission of parameter meaning leaves a real gap an agent must fill from guesswork.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and neither scheduleId nor workspaceId is mentioned in the description. With two undocumented parameters and no compensating text, the agent gets no semantic help about what these identifiers are or where to obtain them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('End a schedule') and makes the terminal outcome explicit ('`ended` is terminal and cannot be resumed'). It implicitly distinguishes itself from resume_recurring_schedule by naming the 'create a new schedule instead' path for re-billing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditions: use when you want to stop billing permanently, and use a new schedule if you want to bill again. It does not explicitly contrast with pause_recurring_schedule, so the agent must infer the pause-vs-end choice, but the terminal nature is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_copyA
Destructive

Copy data one-way from a source environment into a lower one, sanitized. scope is instance (every workspace) or mandate: (one workspace, others in the target untouched). sanitize is raw (verbatim), pseudonymize (deterministic PII masking, valid CH test IBANs, amounts intact unless scaleFactor is given) or structure_synthetic (structure kept, amounts and transactions replaced). Build-then-swap: a failed copy leaves the prior target intact. Refuses target=main and refuses a source whose tier rank is not strictly above the target (down-only). The SECRET FLOOR always neutralizes live access secrets (bank/EBICS/token) regardless of level; the owner-only retainSecrets override lifts it. Refuses a copy into the active env without force. Unconfirmed, returns the exact plan and changes nothing (P8). CONSEQUENCE: Replaces the data of a lower environment with a copy from a higher one, sanitised as you choose; your main books are never the target. What the target held before is gone for good.

NameRequiredDescriptionDefault
forceNo
scopeNo
sourceYes
targetYes
sanitizeNo
confirmedNo
scaleFactorNo
workspaceIdYes
retainSecretsNo
idempotencyKeyNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint=true annotation: build-then-swap means a failed copy leaves the prior target intact, the SECRET FLOOR neutralizes live access secrets unless the owner-only retainSecrets override is used, and unconfirmed calls return the plan without changing anything. It also spells out irreversibility plainly ("What the target held before is gone for good").

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but mostly front-loaded, with the operation and its scoping stated before the caveats. There is some redundancy: "main books are never the target" repeats the earlier target=main refusal, and the trailing CONSEQUENCE sentence restates destructiveness already implied.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, 10-parameter tool with no output schema and no schema descriptions, the definition covers consequences, safety mechanisms, refusal conditions, and dry-run behavior. An agent has what it needs to invoke it safely, with only minor return-value detail left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% with 10 parameters, so the description must carry the burden, and it largely does: scope is defined (instance vs mandate:<workspaceId>), sanitize has three explained modes with scaleFactor interaction, and force/confirmed/retainSecrets are given meaning. However, workspaceId and idempotencyKey are never explained, leaving a real gap for a required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (one-way copy of data from a source environment into a lower one) plus the key differentiator of sanitization. This clearly separates it from sibling env_create, env_reset, env_switch, and env_delete, each of which manipulates environments differently.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-conditions and refusals: refuses target=main, refuses when source tier rank is not strictly above target (down-only), and refuses an active-env copy without force. It does not name a sibling alternative for the cases it refuses, so the guidance is strong on conditions but not on routing to other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_createB
Destructive

Create a new environment and populate its data root per its policy: synthetic (seeded, seed selectable, default the Seeblick golden ledger) or live (an empty ledger). policy=copy is Phase B. Refuses a data root that collides with an existing environment or aliases main`s volume. Unconfirmed, returns a plan and changes nothing (P8).

NameRequiredDescriptionDefault
nameYes
seedNo
scopeNo
dbPathNo
policyYes
sourceNo
sanitizeNo
tierRankNo
confirmedNo
guardTierNo
codeChannelNo
scaleFactorNo
workspaceIdYes
runtimeTargetNo
idempotencyKeyNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true; the description goes well beyond that by disclosing refusal conditions (data root colliding with an existing environment or aliasing main's volume) and the dry-run-by-default contract ('unconfirmed... changes nothing'). It still omits what a successful call returns, permission requirements, and how idempotencyKey or tier guards affect behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with the core action and policy semantics before the safety caveats. It is efficient, though references like '(P8)', 'Phase B', and 'the Seeblick golden ledger' assume internal context, and the stray backtick in 'main`s' is a small blemish.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter mutation with no output schema and only a destructive hint for annotations, the description covers the conceptual model, the two supported policies, and the safety/dry-run behavior. It stops short of documenting the remaining parameters or the successful return payload, so an agent could still call it correctly but cannot reason about most inputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 15 parameters, so the description must carry the parameter burden. It explains only policy (synthetic/live), seed (selectable, defaulting to the Seeblick golden ledger), and indirectly confirmed, leaving scope, dbPath, source, sanitize, tierRank, guardTier, codeChannel, scaleFactor, runtimeTarget, idempotencyKey, and workspaceId completely undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Create a new environment') and scopes the behavior to populating a data root per policy, naming the two supported policies (synthetic with seed, live with empty ledger) and excluding copy. That is far more informative than the name alone, but the sibling env_copy/env_switch/env_reset family is never named directly, so the differentiation is implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'policy=copy is Phase B' implies copy is not yet supported here, and 'Unconfirmed, returns a plan and changes nothing' implies a dry-run-before-confirm workflow. There is no explicit statement of when to call env_create rather than env_copy, env_switch, or create_workspace, and no prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_currentC
Read-only

The active environment for this face, and whether it is read-only (only a served/hosted env is read-only from a local face; a local main is the real books and stays writable, D135).

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes the safety profile, and the description adds real domain context: a served/hosted environment is read-only from a local face while a local main stays writable. However, it does not say what is returned, whether workspaceId changes the answer, or any failure behaviour, so it adds context but not full operational transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single sentence with no wasted padding, and the core claim is front-loaded. But the parenthetical is dense with internal shorthand ('this face', 'D135') that costs the reader more than it saves, so brevity comes at the expense of clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of explaining what comes back; it partially does (the active environment plus a read-only flag) but leaves the shape and the meaning of 'face' undefined. For a lookup tool with a required parameter and no annotated return contract, this is under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter workspaceId is never mentioned in the description, so the agent gets no explanation of whether workspaceId selects the environment being inspected or the caller's context. With one undocumented required parameter, the description needed to compensate and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (the active environment for this face) and one attribute (read-only vs writable), but it is a noun phrase with no verb, so it reads like a return value rather than an action. It also does not distinguish itself from the very similar sibling env_status, which an agent would have to disambiguate by opening both schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit statement of when to call this versus env_status, env_list, whoami, or runtime_status, all of which sound like they answer adjacent questions. The only conditional content (hosted env read-only, local main writable) describes semantics of the result, not when the tool should be selected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_deleteA
Destructive

Remove a named environment`s data root and its landscape entry. Refused on main always, on a standard tier without force (use reset), and on the active environment (switch away first). Unconfirmed, returns a plan and changes nothing (P8). CONSEQUENCE: Removes the environment and its data for good; your main books can never be deleted. To have one again, you create a new environment.

NameRequiredDescriptionDefault
nameYes
forceNo
confirmedNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, and the description goes further by naming the irreversibility ("for good"), the main-environment protection, and the dry-run semantics of an unconfirmed call — genuinely useful additions. However, it never mentions the idempotencyKey's role in safe retries or what the returned plan contains, which matters for a destructive operation with 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then the refusal rules, then the consequence — good priority ordering with dense, functional sentences. Minor waste in the closing "To have one again, you create a new environment" and an unexplained internal reference ("P8") that the agent cannot interpret.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent-guaranteed mutation with no output schema and only a destructiveHint annotation, the description supplies the safety profile, refusal matrix, and dry-run path. It falls short only on workspace scoping and idempotency behavior, which an agent needs to call this safely in retry scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It meaningfully explains force (required for standard tier) and confirmed (unconfirmed returns a plan), covering three of five parameters including name, but workspaceId and idempotencyKey receive no explanation at all, leaving a real gap against the 0% baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and two-part resource: removing an environment's data root plus its landscape entry. It distinguishes itself from the closest sibling by name ("use reset" for standard-tier teardown) and from env_switch via the active-environment refusal, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly enumerates the three refusal conditions (main always, standard tier without force, active environment) and prescribes the corrective action for each: use reset, or switch away first. It also states that omitting confirmed yields a no-op plan, which is exactly the when-to-use framing an agent needs before a destructive call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_listA
Read-only

List every TILL environment in the landscape with its code channel, data policy, guard tier, runtime target, tier rank, last refresh, size and which one is current. Standard tiers (main, test, develop) are pinned first, then named environments. Fails loud if the landscape control file fails its integrity check.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses ordering behavior ('Standard tiers ... pinned first, then named environments') and a failure mode ('Fails loud if the landscape control file fails its integrity check'). This adds useful behavioral context that the annotation alone does not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then lists specific output fields, followed by ordering and failure behavior. Each sentence carries relevant operational detail, though the list of fields is slightly long; overall it is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output fields, ordering, and failure behavior are well covered, and the readOnlyHint annotation handles safety. However, the required workspaceId parameter is left completely unexplained, creating ambiguity about whether the tool lists environments for a specific workspace or across the entire landscape. This is a notable completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one required parameter and 0% schema description coverage, the description carries the full burden for explaining workspaceId, but it never mentions the parameter, its role, format, or how it relates to the 'landscape'. The description adds no meaning to the input schema beyond its existing name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb, resource, and scope: 'List every TILL environment in the landscape'. It then enumerates the exact fields returned, which makes the tool's purpose concrete and distinguishable from siblings like env_current or env_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its usage through 'List every TILL environment', but it does not explicitly state when to prefer this tool over env_current, env_status, or other environment-related siblings. No when-not guidance or alternative routing is provided, so usage is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_resetA
Destructive

Wipe and repopulate an environment from its data policy, build-then-swap: a new db file is seeded and gated (foreign-key check plus a balance re-foot) and swapped in only on success, so a failed reset leaves the prior environment intact. Refused on main (by data root, not just name) and on the active env without force. Reset of a copy-policy env is Phase B. Unconfirmed, returns a plan and changes nothing (P8). CONSEQUENCE: Wipes the environment and fills it again from its data policy; your main books are never reset. What it held before is gone for good.

NameRequiredDescriptionDefault
nameYes
seedNo
forceNo
confirmedNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, and the description goes well beyond that: it explains the gating (foreign-key check plus balance re-foot), that a failed reset leaves the prior environment intact, the force requirement for the active env, and what unconfirmed does. The remaining gap is the response/plan shape and idempotency behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Core behavior and refusal conditions are front-loaded, but the closing CONSEQUENCE block restates the opening 'wipe and repopulate ... fills it again from its data policy', and the internal jargon (P8, Phase B) adds noise without clarifying action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, 6-param tool with no output schema and only destructiveHint for annotations, the description covers the critical safety story: what gets destroyed, what survives on failure, and when it is refused. It falls short only on undocumented params and the exact shape of the returned plan.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 6 params, so the description must compensate. It does partially – force is implied by 'the active env without force' and confirmed by 'Unconfirmed, returns a plan and changes nothing' – but seed, idempotencyKey, and the exact role of workspaceId/name are left undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ('wipe and repopulate an environment from its data policy') and describes the build-then-swap mechanism, so it is clearly distinguishable from env_create, env_copy, env_delete and env_switch. An agent knows exactly what operation this performs without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete preconditions: refused on main (by data root, not just name) and on the active env without force, plus the unconfirmed-returns-a-plan behavior. It does not explicitly route the agent between this and the env_* alternatives such as env_create/env_copy, but the operating context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_statusA
Read-only

Detail one environment: its data freshness, guard tier, runtime target, recorded code channel and drift against the built one, and whether its data root exists. Fails loud on a landscape integrity mismatch.

NameRequiredDescriptionDefault
nameYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals safety, but the description adds meaningful behavioral context beyond that: it names what is inspected and explicitly warns that the tool 'Fails loud on a landscape integrity mismatch'. That failure-mode disclosure is valuable and not present in structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core operation, followed by a compact list of inspected attributes and a terminal failure-mode warning. Every sentence earns its place with no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only two-parameter status tool with no output schema, the description covers the main contract: what data is returned and the notable failure behavior. It does not fully define the term 'landscape integrity mismatch' or describe the exact response shape, but the listed fields provide enough operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description does not explicitly explain the workspaceId and name parameters or their formats/constraints. The phrase 'Detail one environment' weakly implies name identifies the environment, but with no schema descriptions the description should compensate more than it does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Detail one environment') and enumerates the exact aspects returned: data freshness, guard tier, runtime target, code channel, drift, and data-root existence. This clearly distinguishes it from list/switch/current/create-style environment siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool's purpose is clear enough that an agent can infer when to use it: when details about a single named environment are needed. However, it never explicitly contrasts it with env_list, env_current, or env_switch, leaving the when-to-use-vs-alternatives decision implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_switchA
Destructive

Set the active environment for this face. Switching to a served (hosted) env records the pointer and marks the face read-only; a local main stays writable (D135). Destructive env-wide verbs stay refused on main regardless. Unconfirmed, returns a plan and changes nothing (P8).

NameRequiredDescriptionDefault
nameYes
confirmedNo
workspaceIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Moving well beyond the single destructiveHint annotation, the description discloses real consequences: the pointer is recorded, the face becomes read-only on hosted envs, main stays writable, destructive env-wide verbs remain refused, and unconfirmed calls are dry-run plans. This is genuinely useful behavioral context; the only shortfall is missing auth/permission or reversibility notes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences with the core action front-loaded and the dry-run caveat last. It is efficient, though the parenthetical spec references (D135, P8) consume space without informing an external agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema and bare parameters, the description supplies good behavioral context and even a return hint ('returns a plan'). However, half the parameters (name, idempotencyKey) and any permission/reversibility detail remain undocumented, leaving the definition only partially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the load. It effectively explains the 'confirmed' parameter's dry-run semantics ('Unconfirmed, returns a plan and changes nothing') and implies 'name' and 'workspaceId' via 'env' and 'this face', but never addresses 'idempotencyKey' or states parameter names directly, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb+resource 'Set the active environment' is unambiguous and naturally distinguishes this mutation from env_current/env_status/env_list reads and env_create/env_delete. However, opaque internal jargon ('this face', 'D135', 'served (hosted) env', 'main') is never decoded, slightly blurring the exact resource being changed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Embedded rules give partial guidance: switching to a hosted env marks the face read-only, and an unconfirmed call returns a plan without applying. But the description never states plainly when an agent should choose env_switch over env_create, env_reset, or env_copy, so usage is more implied than prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expense_claim_approveA
Idempotent

Approve a submitted claim: POSTS the reimbursement liability via A02 (Dr per-category expense + Dr 1170/1171 Vorsteuer; Cr 2000 Kreditoren gross, the A17 vendor-bill shape with the employee as counterparty). P8 draft-gated: WITHOUT confirm:true it returns the journal-entry preview and posts NOTHING. Requires spesen.approve AND post. Refuses self_approval (approving your own claim, four-eyes, including an automation firing), period_locked (a locked posting period, pre-checked, no partial post), and invalid_transition (not submitted). Re-approving never double-posts. needs_employee_contact if the employee has no vendor-role contact to settle against. CONSEQUENCE: Approves the expense claim and books what you owe the employee. If it is wrong, you reverse the claim with a correcting entry; the original stays visible.

NameRequiredDescriptionDefault
claimIdYes
confirmNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: preview-only without confirm:true, no partial post on a locked period, self-approval refusal including automation firing, no double-post on re-approval, and the reversal path with the original staying visible. The idempotency claim is consistent with idempotentHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then gating, then refusals, then consequence — a sensible order with no filler sentences. The A02/A17 account-shape parenthetical is dense domain reference that costs more than it earns for an agent deciding whether to call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and minimal annotations, the description carries the burden well: it covers side effects, atomicity, permissions, error conditions, and recoverability. The notable remaining gap is what idempotencyKey is for and what the preview response contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so all meaning must come from the description. confirm is explained thoroughly (gate for posting vs. preview), but claimId, workspaceId, and above all idempotencyKey — a required parameter — get no semantics at all beyond 're-approving never double-posts'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb and resource — 'Approve a submitted claim' — extended with the exact accounting effect (Dr per-category expense, Dr 1170/1171 Vorsteuer, Cr 2000 Kreditoren). The agent knows precisely what the call does and what it books, not merely that it approves something.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Strong on preconditions and refusal paths: it must be submitted, requires spesen.approve AND post, and is draft-gated on confirm:true. It doesn't explicitly route to or exclude sibling tools (expense_claim_reject, expense_claim_reverse, expense_claim_reimburse), so the alternatives dimension is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expense_claim_createA
Idempotent

Create a draft expense claim (Spesenabrechnung) for an employee. Requires spesen.submit. Add lines with expense_line_upsert, then submit with expense_claim_submit.

NameRequiredDescriptionDefault
titleYes
currencyNo
employeeIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered; the description adds that the result is a non-final draft and that spesen.submit authorization is required. It does not explain how the required idempotencyKey interacts with retries, which is the one behavioral detail still missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, followed by the sequencing steps. Every clause carries a distinct operational fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The workflow, permission requirement, and draft state make this callable as part of a sequence, which matters since no output schema exists. However, with zero schema description coverage on all five parameters, an agent still cannot tell what title/currency/workspaceId should contain or why idempotencyKey is mandatory.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 5 parameters, so the description must carry the explanatory load, but it only hints at employeeId via 'for an employee'. Nothing is said about title, currency, workspaceId, or idempotencyKey, leaving four parameters undefined anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Create'), resource ('draft expense claim'), and scope ('for an employee'), plus the German synonym Spesenabrechnung. It is clearly separable from siblings like expense_claim_submit, expense_claim_get, and expense_line_upsert.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly sequences the workflow: create the draft here, add lines with expense_line_upsert, then finalize with expense_claim_submit, and names the required permission. It does not address boundary cases such as when to use record_expense instead, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expense_claim_getB
Read-only

Read one claim with its lines, the posted journal entry (once approved) and the payment (once reimbursed). Self-scoped: a bare reader reading a colleague`s claim id gets not_found.

NameRequiredDescriptionDefault
claimIdYes
workspaceIdYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only nature is covered by structured data. The description adds value by disclosing that the returned data depends on claim state ('once approved', 'once reimbursed') and reveals the authorization behavior (not_found for colleague's claims). However, it doesn't mention what happens for a claim that is approved but not reimbursed, or any other edge cases, though with annotations present this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. Front-loads the read action and returned components, then the security caveat. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with readOnlyHint and no output schema, the description covers the resource, the conditional contents, and the authorization quirk. It doesn't explain what a 'claim' is or how the response is shaped, but given the simple schema and existing sibling nomenclature, this is roughly adequate, with a minor gap on workspaceId semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are two string parameters (workspaceId, claimId). The description mentions 'claim' and 'colleague's claim id', which hints at claimId's meaning, but it does not clarify workspaceId at all or provide the parameter-format context the schema lacks. Given zero schema coverage, the description should compensate more; it only partially does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Read') with resource ('one claim') and clarifies scope ('with its lines', 'posted journal entry once approved', 'payment once reimbursed'). It distinguishes itself from sibling expense_claim_list (which presumably lists claims) and expense_claim_create by being the getter. However, it doesn't explicitly name a sibling alternative, so a small differentiation gap remains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Self-scoped' sentence conveys an important access caveat (a bare reader gets not_found for a colleague's claim id), which implies usage context. But it doesn't explicitly say when to use this tool instead of expense_claim_list, nor does it state prerequisites like requiring the claim id. The guidance is present but implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expense_claim_listA
Read-only

List expense claims, SELF-SCOPED: only hr.manage (full cross-employee) or spesen.approve (the submitted-claims approval queue) widens the read beyond the caller`s own claims. status and employeeId narrow within scope.

NameRequiredDescriptionDefault
statusNo
employeeIdNo
savedViewIdNo
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, and the description adds scope-limiting behavior (self-scoped vs. permission-widened) and the filtering effect of status and employeeId. This complements the annotation without contradiction, giving an agent a clear understanding of what the read operation will return under different contexts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence with no wasted words. It front-loads the core action, then efficiently explains scope modifiers. The use of technical permission names is compact, though it may be slightly cryptic to an agent without prior exposure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (list with filters) and read-only, but the description omits details on workspaceId and savedViewId, and does not mention pagination, sorting, or output structure. The scope and filtering guidance is useful, but these gaps mean an agent may still make wrong calls when needing to use the full parameter surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverageached and four parameters, the description only mentions status and employeeId as narrowing filters, leaving workspaceId (required) and savedViewId completely unexplained. The agent cannot reliably infer the meaning or allowed values of these parameters, so the description fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear verb-object pair 'List expense claims' and immediately distinguishes itself by specifying self-scoping behavior and the exact permissions (hr.manage, spesen.approve) that widen read scope. This makes it easy to differentiate from other expense_claim_* tools like expense_claim_get or expense_claim_approve.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical context: by default only the caller's own claims are visible, and certain permissions broaden access. It implicitly tells an agent when this tool is appropriate versus those requiring extra permissions, though it does not explicitly name alternative tools or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expense_claim_reimburseA
Idempotent

Reimburse an approved claim: pays the employee via A14 recordPayment (outgoing supplier settlement clearing 2000 Kreditoren, Dr 2000 / Cr bank) and prepares the pain.001 as a LOCAL artifact. P8 draft-gated: WITHOUT confirm:true it returns the payment + artifact plan and pays NOTHING. Transmission of the pain.001 to a bank is cloud-tier: the result carries transmitted:false, reason:cloud_tier. Idempotent: a reimbursed claim is never paid twice. A claim whose posting was reversed in the journal refuses claim_posting_reversed (close it with expense_claim_reverse). Requires spesen.approve AND pay AND post. bankAccountId names the paying Bankkonto. CONSEQUENCE: Records the payment to the employee for the approved claim and prepares the payment file; a claim is never paid twice. Reversing the payment reopens the claim.

NameRequiredDescriptionDefault
claimIdYes
confirmNo
workspaceIdYes
bankAccountIdNo
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the idempotentHint/destructiveHint annotations: draft-gated execution semantics, the fact that bank transmission is cloud-tier and returns transmitted:false, required scopes (spesen.approve AND pay AND post), the claim_posting_reversed refusal path, and the consequence that reversing reopens the claim. None of this is derivable from the annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The most important constraint (pays nothing without confirm:true) and the idempotency guarantee are front-loaded, and each sentence carries operational content. However, the closing 'CONSEQUENCE' sentence restates the never-paid-twice guarantee already made earlier, adding redundancy and density with internal jargon.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter, no-output-schema mutation tool, the description covers preconditions, gating, idempotency, permission scope, artifact/transmission tier, and the remediation path for a failed state — enough for an agent to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden: it explains confirm as the draft-gate switch with an exact default behavior, and bankAccountId as the paying Bankkonto. idempotencyKey is only implied via the idempotency statement, and claimId/workspaceId are left to the schema names, so it is good but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reimburse an approved claim') and immediately names the mechanism (A14 recordPayment, Dr 2000 / Cr bank) plus the secondary artifact (pain.001). It is clearly distinguishable from siblings like expense_claim_approve or expense_claim_reverse, which it references by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition (claim must be approved), a hard gating rule ('WITHOUT confirm:true it returns the payment + artifact plan and pays NOTHING'), and a failure-mode alternative ('close it with expense_claim_reverse'). It stops short of comparing against generic siblings such as record_payment or generate_pain001, so the routing guidance is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expense_claim_rejectA
Idempotent

Reject a submitted claim with a reason (reason_required if empty). Terminal (submitted -> rejected). An APPROVED (posted) claim is not rejected: it is corrected by an A02 reversing entry plus a fresh claim (invalid_transition otherwise). Requires spesen.approve (approve and reject share the review right).

NameRequiredDescriptionDefault
reasonYes
claimIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: the terminal nature of the transition, the reason_required error when the reason is empty, invalid_transition for approved claims, and the required spesen.approve right (shared with approve). The idempotencyKey parameter plus idempotentHint=true are consistent, and nothing contradicts destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the action and scope. The arrow notation and parenthetical error codes are dense but each clause carries distinct information; minor readability cost only.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation with no output schema, this covers transitions, error outcomes, and authorization — enough to call it correctly. What is missing is the return/result shape and any hint about the idempotency key's scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden. It does clarify that `reason` is mandatory (reason_required if empty), but says nothing about workspaceId, claimId, or how idempotencyKey is used for retry safety — the latter is only implied by the annotation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Reject a submitted claim') with the required reason and the resulting terminal state (submitted -> rejected). An agent can distinguish it from expense_claim_approve, expense_claim_reverse and expense_claim_reimburse from the text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it (submitted claim) and when not to (approved/posted claims, which need an A02 reversing entry plus a fresh claim), plus the permission precondition spesen.approve. The only gap is that the alternative is described as an accounting mechanism rather than naming the sibling tools (e.g. expense_claim_reverse / expense_claim_create), leaving the agent to map the workflow itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expense_claim_reverseA
Idempotent

Storniere an APPROVED expense claim (D168), the ONE correction of a booked claim: posts the faithful A02 reversing entry of the approve posting (OR 957a, dated today, the VAT trace carried) and moves the claim approved -> reversed (terminal) in one transaction. Nothing is edited or deleted; the correction of the business fact is a fresh claim. A REIMBURSED claim is refused with claim_reimbursed: reverse the reimbursement payment first (reverse_payment walks the claim back to approved). A second reverse is already_reversed; any other state is invalid_transition; a blank reason is reason_required; period_locked when today is sealed. A claim whose posting a raw reversal already took out (a book from before this verb) adopts that reversal and posts nothing (adopted:true). The raw reverse_entry refuses this entry (owned_by expense_claim_reverse). Requires spesen.approve AND post. CONSEQUENCE: Reverses an approved expense claim with a correcting entry; nothing in the original is edited. The claim stays on record as reversed; to claim again, you start a new one.

NameRequiredDescriptionDefault
reasonYes
claimIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the idempotentHint/destructiveHint annotations: discloses atomicity ('in one transaction'), that nothing is edited or deleted, the terminal state transition, the adopted-reversal edge case for pre-existing raw reversals, required permissions (spesen.approve AND post), and a full enumeration of failure codes (claim_reimbursed, already_reversed, invalid_transition, reason_required, period_locked).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and state change, which is good, but the description is dense with opaque internal jargon (D168, OR 957a, A02) and the final CONSEQUENCE sentence largely repeats 'nothing is edited or deleted' already stated earlier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive-adjacent mutation with no output schema, the description covers preconditions, permissions, error paths, idempotency behavior and the adoption edge case thoroughly. The only meaningful gap is that two of four input parameters and the response shape are undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden. It adds meaning for 'reason' (a blank reason yields reason_required) and implicitly for claimId (the claim must be approved), but workspaceId and idempotencyKey are never mentioned, so half the parameters remain unexplained in both schema and prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Storniere an APPROVED expense claim'), names the exact posting it produces (A02 reversing entry of the approve posting OR 957a) and the resulting state (approved -> reversed, terminal). It also distinguishes itself from the generic sibling: 'The raw reverse_entry refuses this entry (owned_by expense_claim_reverse).'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (only correction of a booked/approved claim), when-not (REIMBURSED claims are refused, use reverse_payment first to walk the claim back to approved; raw reverse_entry cannot be used), and the alternative for re-claiming (start a fresh claim). Nothing about routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expense_claim_submitA
Idempotent

Submit a draft claim for approval. Refuses empty_claim (no lines) and receipt_required (a line over CHF 50 with no receipt, naming the offending line_ids). Snapshots the base total. Requires spesen.submit. Idempotent on the key.

NameRequiredDescriptionDefault
claimIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint/destructiveHint; the description goes well beyond by naming the two exact refusal modes (empty_claim, receipt_required with the CHF 50 threshold and offending line_ids), the required permission scope, and the side effect of snapshotting the base total. This is the kind of failure and side-effect disclosure an agent needs before mutating state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action and refusal modes, no filler. 'Idempotent on the key' mildly repeats the annotation but is fused with the parameter it describes, so it still earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-param mutation with no output schema, the description covers preconditions, failure modes, permissions, and side effects well. It does not say what the caller gets back (e.g. resulting claim status), which is the main remaining gap given no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains the idempotency key's behavior ('Idempotent on the key') but says nothing about claimId, workspaceId, their formats, or how line_ids returned in errors map back to inputs — only partial compensation for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Submit a draft claim for approval') plus the exact precondition (draft state). An agent can distinguish it from siblings like expense_claim_approve, expense_claim_create, or expense_line_upsert without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The precondition 'draft claim' and the named prerequisite 'Requires spesen.submit' tell the agent when the call is valid. It stops short of explicitly routing to alternatives (e.g. create the claim or lines first), but the implied workflow is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expense_line_upsertA
Idempotent

Add or edit a claim line (only while the claim is draft). line carries expense_date, category (travel|meals|supplies|it|other), amountMinor (integer Rappen, the receipt total), currency (default CHF), an optional fxRate for a foreign line, an optional taxCode (an input-side Vorsteuer code, or none), an optional receiptDocumentId (an E00 file), and optional costCenterId/projectId/expenseAccountId. The per-line tax_code + base + tax are resolved ONCE by A05 and stored as values (MWSTG Art. 28). Requires spesen.submit. Pass line.lineId to edit.

NameRequiredDescriptionDefault
lineYes
claimIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint/destructiveHint annotations, it discloses key behavior: draft-only mutation, the spesen.submit permission requirement, and that per-line tax_code+base+tax are resolved ONCE by A05 and stored as values (MWSTG Art. 28). This immutability/tax-freezing detail is exactly the kind of context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and constraint before enumerating fields, with no filler sentences. It is a dense single paragraph whose every clause adds information, though slightly heavy for one block and the idempotencyKey/return behavior is left unaddressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nested-object mutation with no output schema and 0% schema coverage, the description supplies field-level detail, the draft constraint, the permission prerequisite, edit path, and tax-resolution semantics. The remaining gaps (idempotencyKey meaning, response shape) are standard/minor for this kind of tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and `line` is an untyped object, so the description carries the full burden — and it does, enumerating expense_date, category with allowed values, amountMinor (integer Rappen = receipt total), currency default CHF, optional fxRate, taxCode, receiptDocumentId, and costCenterId/projectId/expenseAccountId. This fully compensates for the empty schema on the one non-obvious nested parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Add or edit a claim line') and immediately scopes it ('only while the claim is draft'). The add-vs-edit distinction is made concrete via 'Pass line.lineId to edit', so an agent can tell exactly what operation it is performing without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions: the claim must be in draft, and editing requires passing line.lineId. It states the required permission ('Requires spesen.submit'). It doesn't name a sibling alternative (e.g. expense_claim_create/submit) or say what to do if the claim is not draft, keeping it at 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_journalA
Read-only

The Buchungsjournal of a period ('YYYY-MM' or 'YYYY') as a locale-neutral CSV file, base64-encoded: one row per posted line exactly as the ledger holds it (integer Rappen in line and base currency, ISO dates, stored fx_rate and VAT trace values verbatim, OR Art. 958f: a faithful copy, never a recomputation), plus a footing total record. Same period, same bytes. Nothing is transmitted anywhere.

NameRequiredDescriptionDefault
formatNo
periodYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals safety, so the description earns credit by adding concrete behavior: exact row semantics ('one row per posted line'), fidelity guarantees ('faithful copy, never a recomputation'), determinism ('Same period, same bytes'), and the privacy guarantee ('Nothing is transmitted anywhere'). This goes well beyond the boolean annotation, though it does not mention error cases or size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence with no filler: every clause carries meaningful detail (format, encoding, row content, fidelity, determinism, privacy). It is front-loaded with the core purpose. The phrasing is slightly run-on, especially the 'OR Art. 958f' aside, but it remains compact and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description thoroughly explains what the caller receives: a base64 CSV, row structure, field values, and a footing record. It also covers determinism and data residency. Missing are details about the optional 'format' parameter and error handling for invalid periods, but for a read-only export with a rich description, it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It does add meaning for 'period' by specifying the two accepted formats ('YYYY-MM' or 'YYYY'), which is valuable. However, it fails to explain the 'format' parameter at all, and 'workspaceId' is left entirely to its name. This is a clear gap for the ambiguous optional parameter, warranting only a mid score despite good coverage of the period.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('export') and a specific resource ('the Buchungsjournal of a period') and fully specifies the output ('locale-neutral CSV file, base64-encoded'). It also names the period formats ('YYYY-MM' or 'YYYY') and differentiates from sibling export tools like export_statements, export_vat, and export_workspace by its focus on the journal/ledger. An agent can confidently know 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the tool is for exporting the journal of a period, so an agent can infer when it would be appropriate. However, it gives no explicit guidance on when to prefer this tool over siblings like export_statements or export_vat, and no exclusions or alternative conditions are named. Usage guidance remains implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_statementA
Read-only

Render any of the four statements as a LOCAL file and hand back its bytes, base64-encoded: kind one of 'trial', 'balance', 'income', 'ledger', format one of 'csv', 'pdf', plus that statement's own parameters. The CSV is locale-neutral for re-import (integer Rappen, ISO dates, a record_type column carrying the totals) and the PDF is a print artifact with no PDF/A conformance claimed. The model is computed by the same verb the screen calls, so the file and the screen cannot disagree. Nothing is transmitted: e-filing or publishing the artifact is a cloud-tier concern and is not part of this tool.

NameRequiredDescriptionDefault
asOfNo
kindYes
formatYes
groupByNo
accountIdNo
compareToNo
periodEndNo
periodStartNo
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnlyHint annotation by detailing behavioral specifics: the output is base64-encoded bytes, CSV is locale-neutral with integer Rappen and ISO dates, PDF makes no PDF/A conformance claim, and the model is computed by the same verb as the screen ensuring consistency. These details help the agent understand the exact nature of the output and its guarantees, adding value beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, front-loading the core action and then providing concise clarifications about format details and behavioral guarantees. Each sentence adds distinct information without redundancy. While it is somewhat lengthy, it remains focused and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 9 parameters, a nested object, no output schema, and no schema descriptions, the description covers the main purpose and format semantics but omits explanations for several parameters and the expected return structure beyond base64 bytes. It also does not specify how parameters like periodStart and periodEnd are used or whether compareTo is required for certain statement types. This leaves gaps for an agent to correctly call the tool in all scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for parameter meaning. It does enumerate valid values for 'kind' and 'format' and mentions 'plus that statement's own parameters,' implying the remaining parameters are context-specific. However, it does not explain workspaceId, asOf, groupBy, accountId, compareTo, periodEnd, or periodStart, leaving the agent to infer their roles. This is partial compensation at best.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Render any of the four statements as a LOCAL file and hand back its bytes, base64-encoded.' It specifies the resource (four statement kinds) and the output format, making the purpose unambiguous. It also distinguishes itself from related tools by emphasizing local-only generation and no transmission, which differentiates it from export_vat or export_statements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (for local file generation) and explicitly states what it does not do ('Nothing is transmitted: e-filing or publishing the artifact is a cloud-tier concern and is not part of this tool'), which guides agents away from using it for transmission. However, it does not explicitly name alternative tools or provide a clear when-to-use versus when-not-to-use scenario, leaving some inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_statementsA
Read-only

The filing pair for a period: the Bilanz as of the period end AND the Erfolgsrechnung over it, one artifact each, format 'pdf' or 'csv'. Each statement is rendered by A08's own export_statement engine (this tool only packages the pair), so the figures cannot differ from the screen or from export_statement, and A08's statutory caveats apply unchanged: do not present the Bilanz as the OR minimum structure.

NameRequiredDescriptionDefault
formatNo
periodYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds meaningful context: it does not render statements itself, uses A08's export_statement engine, guarantees consistency with the screen and export_statement, and carries statutory caveats. This goes beyond simply restating the name or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences front-load the core artifact definition and then add essential behavioral and statutory caveats. Every clause contributes something useful; there is no filler or padded explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the artifact composition, format options, rendering engine, consistency guarantee, and statutory caveat, all without an output schema. It does not specify the exact period string format or the shape of the returned artifacts, but for a read-only packaging tool this is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden. It meaningfully clarifies period ('as of the period end' and 'over it') and format ('pdf' or 'csv'), but does not explain workspaceId at all. That leaves one of three parameters undocumented despite the heavy burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's purpose: it packages the statutory filing pair of Bilanz and Erfolgsrechnung for a period, one artifact each. It explicitly contrasts this with export_statement, noting this tool 'only packages the pair,' which distinguishes it from the sibling that renders individual statements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'filing pair' framing tells the agent when this tool is appropriate, and the contrast with export_statement implies the alternative for single-statement use. It does not explicitly state when not to use related tools like export_journal or export_vat, but the package pair focus is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_vatA
Read-only

The MWST-Abrechnung figures of a period as a per-form-line CSV working paper: every Ziffer line exactly as vat_return computes it (stored trace values, never recomputed), plus the payable (Ziffer 500) and credit (Ziffer 510) totals. period is YYYY-MM, YYYY, YYYY-Qn or YYYY-Hn, from 1995 (the MWST era). A label names the file (mwst-2026-Q3.csv); a label that is not a filing period of the book's method that year (vat_periods lists those: quarters under effektiv, half-years under Saldo) still exports, with notice not_a_filing_period, filingPeriods and filingMethod (the method governing the label, as artifact.method); a label touching a switch-year stub answers notice switch_year_stub_not_modelled. The file a Treuhänder lays beside the annual accounts; the ESTV ePortal upload artifact itself is vat_export_ech0217, not this.

NameRequiredDescriptionDefault
formatNo
periodYes
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses that values come from stored trace values and are never recomputed, lists the included Ziffer lines and totals, and describes specific notice behavior such as not_a_filing_period and switch_year_stub_not_modelled. This is unusually rich behavioral context for a read-only export.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and remains information-dense rather than padded. It is long, but the length is mostly justified by domain-specific export behavior and notice handling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex export with no output schema, the description explains the CSV contents, included totals, period semantics, and notice fields. It still leaves gaps around workspaceId, the format parameter, and exactly how the file is returned, so it is strong but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It thoroughly documents period formats and the 1995 MWST-era boundary, but it does not explain workspaceId or the format parameter, leaving two of three parameters without semantic guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: exporting MWST-Abrechnung figures as a per-form-line CSV working paper. It explicitly distinguishes this from the sibling vat_export_ech0217 by saying the ESTV ePortal upload artifact is that tool, not this one. An agent can identify exactly what this tool produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative tool, vat_export_ech0217, and explains that this export is the Treuhänder working paper laid beside annual accounts rather than the ePortal upload artifact. It also explains when labels are not filing periods and what notice is returned, giving clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_workspaceA
DestructiveIdempotent

Export the whole workspace to a documented, open .tillexport bundle (one JSONL file per table plus a manifest and FORMAT.md) a human can read without TILL. Optional scope names a subset of tables. Not a restore source.

NameRequiredDescriptionDefault
scopeNo
workspaceIdYes
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint, and the description adds genuinely useful context beyond them: the exact bundle layout, that it is human-readable without TILL, and a warning that the artifact cannot be used to restore. It does not reconcile the surprising destructiveHint=true for what reads as a read operation, nor mention permissions or size/runtime limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose and artifact, then scope, then the negative constraint. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, 0% parameter coverage, and a destructiveHint, the description should say whether the export returns inline or as a job/artifact handle, what is idempotent about repeated calls, and what 'destructive' means here. None of that is covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden; it explains scope as 'a subset of tables', which is the only non-obvious optional param. workspaceId is self-evident from the name, but idempotencyKey is required and completely unexplained, leaving one real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (export the whole workspace) plus the concrete output artifact (.tillexport bundle: one JSONL per table, manifest, FORMAT.md). The scope clause distinguishes full-workspace export from a table subset, and 'Not a restore source' rules out the most likely confusion with restore tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'optional scope names a subset of tables' line implies how to narrow the export, and 'not a restore source' implicitly routes restore needs elsewhere. However, no sibling is named (restore_backup, list_backups, export_journal, export_statements, export_vat all exist) and there is no explicit when-to-use/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_deleteA
Destructive

Erase a stored file and its bytes for good, once nothing forbids it: a retention date still in the future refuses with retention_locked (on a superseded version too, and against the recomputed statutory floor rather than only the stored date), and a version something supersedes refuses with not_head_version. Irreversible, so an agent caller gets {staged:true} and a pending badge unless it passes confirmed=true. Re-send the SAME idempotencyKey with confirmed:true to complete a staged deletion: confirmed is part of the replay identity, so the confirm is not swallowed as a repeat of the staging. CONSEQUENCE: Deletes the file and its contents for good; a file still under retention cannot be deleted. TILL keeps no copy, so keep your own if you may need it.

NameRequiredDescriptionDefault
fileIdYes
confirmedNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true; the description adds irreversibility, the staged {staged:true} return with pending badge, the confirmed=true completion path, and the idempotency replay-identity rule. It also discloses that no copy is kept and that the statutory floor is recomputed rather than trusting the stored date.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the refusal conditions, then the staged-confirm mechanics. The trailing 'CONSEQUENCE:' block partially repeats the opening sentence ('for good' / 'keep your own copy'), costing a little efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive 4-param tool with no output schema and no annotation detail, the description covers the entire call lifecycle: preconditions, error codes, staged vs confirmed execution, idempotency replay, and irreversibility. Nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning and it does: 'confirmed' is explained as the staged-deletion completion flag included in replay identity, and 'idempotencyKey' is explained via the re-send-same-key contract. Only workspaceId/fileId are left implicit, which is acceptable for obvious identifiers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Erase') and resource ('a stored file and its bytes'), and the scope ('for good') is unambiguous. It is clearly distinguishable from siblings like folders_delete, files_update, or files_set_retention by naming the object being removed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit preconditions for success and the exact refusal conditions (retention_locked, not_head_version), which effectively tells an agent when not to call it. It does not name sibling alternatives such as files_set_retention as the remedy, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_get_contentB
Read-only

Read a stored file back as base64, having re-hashed the bytes and compared them against the stored sha256 first. A mismatch returns integrity_mismatch with both hashes and NO bytes, because serving content the checksum disowns is worse than refusing; a missing blob returns content_not_found. This is the OR 958f Abs. 3 readability half. Needs the file-content right on top of the master-data read: a read-only role may list the filing and not download it.

NameRequiredDescriptionDefault
fileIdYes
workspaceIdYes

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses important behavioral traits: it re-hashes bytes and compares against stored sha256, returns integrity_mismatch with both hashes on mismatch, and content_not_found if the blob is missing. It also explains the rationale for refusing to serve mismatched content and mentions permission nuances. This is substantial additional context, though the cryptic 'OR 958f' phrase adds confusion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded ('Read a stored file back as base64'), but the description becomes verbose with conditional error behaviors and cryptic references. Phrases like 'This is the OR 958f Abs. 3 readability half' and 'Needs the file-content right on top of the master-data read' are unclear and add noise without clear value. The structure could be tightened by focusing on the action, parameters, and expected outputs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should explain what the success response contains beyond base64, but it only mentions error cases. It also fails to describe how workspaceId and fileId are used or validated. The cryptic legal/regulation reference does not aid understanding. For a tool with two parameters and no schema descriptions, this is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has two required string parameters (workspaceId and fileId) with no descriptions (schema coverage 0%). The description does not mention either parameter, leaving the agent without clues about what fileId refers to (e.g., a file identifier) or how workspaceId scopes the operation. This is a critical gap for a tool with no schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a stored file and returns it as base64, with a specific verb ('Read') and resource ('stored file'). It also mentions the integrity check and error conditions, making it distinct from sibling file tools like files_upload, files_search, or files_delete, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives. It includes a cryptic reference to 'OR 958f Abs. 3 readability half' and a note about read-only roles, but no clear guidance on when to choose this over other file operations. The agent must infer that this is the primary content-retrieval tool, but the description lacks explicit routing or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_list_linkedA
Read-only

Every file attached to one record (the OP3 listLinked), newest first. Current versions only; includeVersions nests each file's history underneath it rather than listing a superseded copy as a peer.

NameRequiredDescriptionDefault
entityIdYes
entityKindYes
workspaceIdYes
includeVersionsNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as read-only, and the description adds useful behavior beyond that: newest-first ordering, current-versions-only semantics, and the fact that includeVersions nests history rather than listing superseded copies as peers. No contradiction with the readOnlyHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each earning its place. The primary behavior is front-loaded, and the second sentence provides a precise, compact clarification of the subtle version behavior without excess wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description covers the essential selection and version-nesting behavior. It lacks details about pagination or the meaning of entityKind, but the core call context is mostly sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description should carry more semantic weight. It explains includeVersions clearly, and 'one record' loosely maps to entityId, but workspaceId and entityKind are left unexplained, including what values entityKind accepts or how they scope the result.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: listing files attached to one record, and clarifies version and ordering behavior. It is clear on its own but does not explicitly distinguish itself from sibling file tools like files_search or files_get_content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope 'attached to one record' implies when the tool is appropriate, and the version behavior implies when includeVersions should be used. However, it does not explicitly state when to prefer an alternative such as files_search, files_link, or files_get_content.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_new_versionA

Add a version that supersedes the current one, keeping both. The chain is linear and append-only (OR 958f): the prior version stays readable and stays retained, and superseding a version something already supersedes is refused with not_head_version. Folder, title, tags, the entity link and the retention date all carry forward. CONSEQUENCE: Adds a new version of the file that becomes the current one; the previous version stays readable and kept. A wrong version is followed by another new version.

NameRequiredDescriptionDefault
mimeNo
fileIdYes
filenameNo
workspaceIdYes
contentBase64Yes
idempotencyKeyNo

TDQS

A3.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false; the description goes far beyond by disclosing that the chain is linear and append-only, that the prior version remains readable and retained, that metadata (folder, title, tags, entity link, retention date) carries forward, and that a wrong version can only be corrected by adding yet another version. This is exactly the retention/irreversibility context an agent needs on a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core rule is front-loaded and clear, but the 'keeping both' guarantee is restated three times and the CONSEQUENCE block largely repeats the opening sentences. Roughly a third of the text could be cut without information loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only a destructiveHint=false annotation, the description adequately covers the mutation's semantics and error behavior but leaves the required contentBase64 payload and the purpose of idempotencyKey unexplained. For a six-parameter write tool, that gap matters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across six parameters, so the description must carry the burden, and it does not: contentBase64, mime, filename, idempotencyKey, fileId and workspaceId are all unmentioned. Worse, the fields it does enumerate (folder, title, tags, entity link, retention date) are inherited metadata, not input parameters, which could mislead an agent about what it must supply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource combination ('Add a version that supersedes the current one, keeping both') that clearly distinguishes this append operation from files_update, files_upload, or files_link. It doesn't explicitly name a sibling to route away from, but the semantics of versioning versus in-place update are unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives positive usage context (create a new version while retaining the old one) and one failure condition (not_head_version when superseding a non-head version), which implies the correct preconditions. However, it never names an alternative tool such as files_update for in-place edits or files_upload for the first version, leaving the routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_set_retentionA
Destructive

Set or extend how long a file must be kept (Aufbewahrung bis, ISO YYYY-MM-DD). Extending is always allowed; a date below the OR 958f floor is refused with retention_below_statutory and the floor it computed. The floor is remembered separately from the date, so extending a statutory retention by hand cannot erase it and a later re-link to a non-accounting record cannot release the file. A date set by hand is recorded as manual provenance, never as gesetzlich.

NameRequiredDescriptionDefault
fileIdYes
workspaceIdYes
idempotencyKeyNo
retentionUntilYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the single destructiveHint annotation: it discloses the refusal error code (retention_below_statutory), that the computed floor is returned, that the floor is stored independently of the date so manual extension cannot erase it and re-linking cannot release the file, and that manual dates carry 'manual' provenance rather than 'gesetzlich'. This is exactly the kind of mutation-behavior context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the action and format before the constraint rules. Each sentence carries distinct information, though the 'floor is remembered separately' passage is dense and could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and no annotation beyond destructiveHint, it covers the hard part: failure mode, floor computation, and provenance consequences. The remaining gap is that the idempotency and identifying parameters are left unexplained, but the risky semantics are fully covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It explains retentionUntil thoroughly (ISO YYYY-MM-DD, statutory floor constraint) but says nothing about fileId, workspaceId, or idempotencyKey, so three of four parameters remain undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (set/extend) and resource (how long a file must be kept), and pins the exact field semantics with the German term 'Aufbewahrung bis' plus the ISO date format. An agent can distinguish this from files_update or files_link without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives operational conditions — extending is always allowed, a date below the statutory floor is refused — which implies when the call succeeds. However it never names an alternative tool (e.g. files_update for other metadata, or files_link for the re-link case it references) or states when *not* to use it, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_updateA
Destructive

Patch a stored file's filing metadata: title, tags, folder, or the pendingDelete flag an agent-staged deletion set. Never its bytes: content is corrected by a new version, never by an edit, so sha256, size and version have no path through this verb.

NameRequiredDescriptionDefault
patchYes
fileIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The destructiveHint annotation already signals mutation, and the description adds useful behavioral context: edits are limited to filing metadata and pendingDelete staging, while sha256, size, and version cannot be changed here. It does not cover permissions, validation failures, or response behavior, but it meaningfully reduces the chance of misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core action and scope come first, followed by the critical content-immutability constraint. Every sentence carries semantic weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The core purpose and metadata-vs-content boundary are covered, but with a generic nested patch schema, no output schema, and 0% parameter description coverage, important details remain missing — notably idempotency behavior, ID parameter expectations, and what the tool returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the patch object is generic, so the description must compensate. It usefully enumerates patchable fields and excluded fields, but it says nothing about workspaceId, fileId, or idempotencyKey, leaving important parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — patch a stored file's filing metadata — and enumerates the patchable fields. It also distinguishes this from content editing, making clear this is not a byte/version update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames when to use it: for metadata such as title, tags, folder, or pendingDelete, and explicitly not for content changes, which require a new version. It does not explicitly contrast with files_delete, files_link, or folders_upsert, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_uploadA
Destructive

Store a file on this device: the bytes arrive base64-encoded in contentBase64, are hashed with sha256, and are kept content-addressed inside the ledger so nothing leaves the machine. Optionally filed into a folder and tagged. Refuses a payload that is not base64 (file_unreadable) or larger than 25 MiB (file_too_large), and never trusts a caller-supplied hash.

NameRequiredDescriptionDefault
mimeNo
tagsNo
titleNo
filenameNo
folderIdNo
workspaceIdYes
contentBase64Yes
idempotencyKeyNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=true available, the description carries most of the behavioral load and does it well: local-only storage ("nothing leaves the machine"), sha256 content addressing, untrusted caller-supplied hashes, the 25 MiB cap, and two named error codes (file_unreadable, file_too_large). It does not cover idempotency behavior despite an idempotencyKey parameter, nor what a duplicate-content upload returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and mechanism, then optional behaviors, then failure modes. Every clause carries distinct information — storage location, encoding, hashing, error codes, size limit — with no repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation with no output schema and only a destructive hint, the description covers the safety-relevant behavior (local storage, validation, size limit) that an agent needs to call it correctly. Remaining gaps are the return value and idempotencyKey semantics, which an agent would likely want before retrying a failed upload.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 8 parameters, so the description must compensate. It explains contentBase64's encoding, the optional folderId ("filed into a folder") and tags, but leaves workspaceId, mime, title, filename, and idempotencyKey entirely undocumented, plus a warning about hash handling that maps to no actual parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Store a file on this device" names a specific verb and resource, and the description goes further by explaining the base64/hash/content-addressed mechanism. It does not distinguish itself from the sibling chunked path (files_upload_begin / files_upload_chunk / files_upload_commit) or from files_new_version, which an agent could confuse with a fresh upload.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the 25 MiB rejection threshold hints that this is the single-shot path and that larger payloads need the chunked siblings, but no alternative is ever named. There is no explicit "use this when / use X instead" statement, so the routing decision between files_upload and the begin/chunk/commit trio is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_upload_beginA
Destructive

Open a chunked upload for a file too large for the 25 MiB single-call bound (G18 US-G18.4): declare its name, mediaType, sizeBytes and intent (migration_source), and receive an uploadId plus the per-chunk byte ceiling. The bytes then arrive through files_upload_chunk and the blob is minted only by files_upload_commit once the accumulated sha256 is verified. The migration-class ceiling is 500 MB; an incomplete session expires after 24 h and never leaves a stored file behind.

NameRequiredDescriptionDefault
nameYes
intentNo
mediaTypeNo
sizeBytesYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry destructiveHint=true, so the description adds real behavioral value: the 500 MB migration-class ceiling, the 24 h expiry of incomplete sessions, sha256 verification at commit, and the assurance that an abandoned session leaves no stored file. It does not address authorization requirements or the role of idempotencyKey, which matters for a multi-step upload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the threshold and the returned handles; every clause carries information. The parenthetical spec reference "(G18 US-G18.4)" is internal noise that costs the reader without helping invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter tool with no output schema and minimal annotations, the description covers the lifecycle, limits, expiry and verification well enough to call it correctly. The remaining gap is retry/idempotency behavior and what exactly the per-chunk byte ceiling response looks like beyond the two named fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden. It gives meaning to name, mediaType, sizeBytes and intent (naming migration_source as the relevant value), but says nothing about workspaceId or idempotencyKey — the latter being the parameter most likely to be used incorrectly in a retryable multi-call flow.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Open a chunked upload") and immediately bounds it to files too large for the 25 MiB single-call limit, which implicitly separates it from files_upload. It then names the two sibling tools that continue the flow, so an agent can tell where this tool sits in the upload pipeline without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 25 MiB threshold is a precise, quantitative use condition, and the description states that bytes must arrive via files_upload_chunk and that only files_upload_commit mints the blob. What it doesn't do explicitly is name files_upload as the alternative for files under the bound — the routing is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_upload_chunkA
Destructive

Append one ordered chunk (base64, each within the 25 MiB bound) to an open upload session. Chunks arrive in seq order from 0; a repeated seq is an idempotent no-op and a gap is refused with chunk_out_of_order. The running total may not exceed the declared sizeBytes.

NameRequiredDescriptionDefault
seqYes
uploadIdYes
workspaceIdYes
contentBase64Yes
idempotencyKeyNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond destructiveHint=true: it explains ordering rules, idempotency on repeated seq, specific rejection behavior via chunk_out_of_order, and the running size limit. It does not describe the response shape or broader session lifecycle.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the core action and followed by operational constraints. Every sentence adds useful information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a chunk-upload tool with no output schema, the description covers the essential calling rules and failure conditions. It is slightly incomplete on parameter roles and how this fits with begin/commit siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate. It clarifies seq ordering and contentBase64 semantics including the 25 MiB bound, but leaves uploadId, workspaceId, and idempotencyKey largely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: append one ordered chunk to an open upload session. It immediately distinguishes this from a whole-file upload or session setup through the chunk/session framing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage constraints: chunks arrive in seq order from 0, repeated seq is an idempotent no-op, gaps are refused, and total size cannot exceed declared sizeBytes. It does not explicitly name sibling alternatives such as files_upload_begin or files_upload_commit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_upload_commitA
Destructive

Close an upload session and mint the blob, verifying the accumulated sha256 against the caller-declared one: a mismatch refuses with source_integrity_mismatch and stores nothing. A blob over the single-call bound is kept in segments and is read only through the streaming reader (files_get_content refuses it with file_too_large_use_stream). Idempotent: a replayed commit returns the file it already minted.

NameRequiredDescriptionDefault
sha256Yes
uploadIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=true in the annotations, the description carries most of the load and does it well: it discloses the integrity check, the exact failure mode and error code (source_integrity_mismatch), that nothing is stored on failure, segmentation of large blobs, and replay/idempotency semantics. It does not state what permissions are required or what an existing same-named blob would be replaced with, which is the one gap for a destructive-hinted mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences, front-loaded with the action before the integrity and streaming caveats. Every clause carries information, though the parenthetical error-code and refusal detail makes the middle sentence dense enough to require a careful read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter mutation with no output schema and no annotation depth beyond destructiveHint, this covers failure behavior, storage semantics, large-blob handling and idempotency. Missing pieces are the return shape beyond the replay hint and any mention of workspaceId scoping or auth requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters. The description explains sha256 ("caller-declared") and implicitly uploadId via "upload session," and the idempotency sentence conveys the role of idempotencyKey, but workspaceId is never mentioned and no format or sourcing guidance is given for sha256. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb phrase and resource: "Close an upload session and mint the blob," which is exactly the terminal step of an upload lifecycle. This clearly differentiates it from files_upload_begin, files_upload_chunk and files_upload, and its interaction with files_get_content is spelled out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes when the tool is used (closing a session after chunks accumulate) and gives conditional routing: blobs over the single-call bound must be read via the streaming reader, not files_get_content. It stops short of explicitly stating prerequisites such as needing a prior files_upload_begin session or the required sha256 source.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

flag_entryA
Idempotent

Flag a posted journal entry as questioned (beanstandet) with a reason: review metadata only, the posted rows stay untouched. The entry shows as flagged in review_status until someone approves it; the books are corrected by reversal, never by edit.

NameRequiredDescriptionDefault
reasonYes
entryIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: mutation is metadata-only, posted rows are untouched, and the flag is visible in review_status until approval. It does not say whether a flag can be withdrawn or re-flagged (no unflag sibling exists), and it is silent on the idempotency/retry semantics that the idempotencyKey parameter implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and its scope, then the lifecycle and correction rule. No filler and nothing restated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and zero parameter descriptions, the description carries most of the burden and does well on effect and lifecycle. The remaining gap is the retry/idempotency contract for a required idempotencyKey on a write tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for four required parameters, so the description must compensate. It covers 'reason' ('with a reason') and implicitly entryId from 'a posted journal entry', but workspaceId and idempotencyKey are never explained, leaving half the inputs undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (flag) plus a precise resource and state ('a posted journal entry as questioned (beanstandet)'), and it immediately constrains the effect to review metadata. An agent can distinguish it from approve_entry and reverse_entry without reading any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes the review-flagging use case and explicitly rules out the correction path ('the books are corrected by reversal, never by edit'), which routes an agent toward reverse_entry for real fixes. It never names approve_entry as the counterpart that clears the flag, so the routing is clear but not fully enumerated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

folders_deleteA
Destructive

Delete a filing folder, and only when it holds nothing at all. A folder containing files or child folders is refused with folder_not_empty and both counts: deletion never cascades, because a cascade could erase a retained record nested inside it without ever consulting its retention lock.

NameRequiredDescriptionDefault
folderIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true; the description adds substantial context beyond that: the refusal error code, that both file and child-folder counts are returned, that deletion never cascades, and the retention-lock rationale for that design. That is exactly the behavior an agent needs before attempting an irreversible operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The action and its precondition are front-loaded in the first sentence, followed by failure behavior and rationale. It is slightly dense in the trailing clause but every sentence carries information an agent needs; nothing is repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 0% schema coverage, the description carries the behavioral burden and does it well for the delete semantics and error path. The remaining gap is idempotency/retry guidance and parameter scoping, which is meaningful but secondary for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema supplies only names and types, yet the description explains none of the three parameters. It never clarifies workspaceId scoping or, critically for a destructive retryable call, what idempotencyKey does and whether a retry after a folder_not_empty failure re-uses it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (delete a filing folder) plus the defining precondition (only when it holds nothing at all). An agent can distinguish it instantly from folders_upsert, folders_list and files_delete without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the when-not condition: a folder containing files or child folders is refused with folder_not_empty plus both counts. No sibling alternative is named (no force-delete exists), so the missing routing sentence is minor. Clear enough to decide whether to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

folders_listA
Read-only

The filing tree as a flat list in path order, which is already tree order: each folder carries its depth, its direct file count, its child count, and whether it is deletable, so a client renders the rail from one read and never re-derives the delete rule differently from the engine.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true covering the safety profile, the description adds substantial behavioral context: the result is a flat list ordered by path (already tree order), and each folder carries depth, direct file count, child count, and a deletable flag. It further discloses an invariant — the client never re-derives the delete rule differently from the engine — which is valuable for callers relying on consistent behavior. No contradiction with the annotation exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense but efficient sentence; every clause contributes (ordering, per-folder fields, client use case, delete-rule invariant). The rationale clause is slightly redundant with the field list but earns its place by explaining intent, and the core semantics are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read with no output schema, the description compensates well by spelling out the return shape, ordering, and computed fields. It omits edge-case behavior (empty tree, invalid workspaceId, potential large-result handling), but for a low-complexity tool these are acceptable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description was expected to compensate, but it never mentions workspaceId. However, the single parameter is well-named, required, and typed as a plain string, so its meaning is effectively self-evident; the gap is minor rather than harmful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific resource (the filing tree) and a specific output form ('flat list in path order'), so an agent understands this is the read/list operation for folders. It does not use an explicit imperative verb, but the semantics are unmistakable and the content clearly differentiates it from the mutation siblings folders_upsert and folders_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing clause ('so a client renders the rail from one read') implies when this tool is appropriate — when a client needs the whole folder tree for rendering — but this is framed as a design rationale rather than explicit usage guidance. No alternatives are named and no when-not-to-use conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

folders_upsertA
Destructive

Create a filing folder, or rename and re-parent an existing one by passing its folderId. The full path is materialised and re-materialised for every descendant in the same transaction, sibling names are unique, and a folder can never become a descendant of itself (folder_cycle).

NameRequiredDescriptionDefault
nameNo
folderIdNo
parentIdNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true, so the description carries most of the burden and delivers: same-transaction path re-materialisation for every descendant, unique sibling-name constraint, and folder_cycle prevention. It does not cover idempotencyKey behavior, but the disclosure of cascading side effects is strong and consistent with the destructive hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that leads with the create/update modes and then the consequential behaviors. Dense but every clause carries meaning; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no parameter descriptions, the description still communicates the key behavioral risks (transaction atomicity, cycle prevention, uniqueness). It stops short on idempotency semantics and return shape, but is otherwise sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains folderId and implies name (sibling names) and parentId (re-parent), but leaves parentId, idempotencyKey, and the required workspaceId unaddressed. Partial compensation for a 5-param tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource pair ('Create a filing folder, or rename and re-parent an existing one') and explains the create-vs-update distinction via folderId. The upsert semantics are unambiguous and clearly distinguish it from folders_list or folders_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent how to trigger each mode: pass folderId to rename/re-parent, omit it to create. This is clear usage context, though it does not name the sibling tools (folders_list, folders_delete) that handle other folder operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forecast_revenueA
Read-only

Die Umsatzprognose (revenue forecast) per month over a 1-24 month horizon, three labelled components with each expected Rappen in exactly ONE: weightedOpenMinor (open deals, probability-weighted, overdue or dateless closes in the first period), wonUninvoicedMinor (won deals with no A11 invoice reachable over the document source chain, at 100 percent), and openQuotesMinor (sent, unexpired C02 quotes with NO deal on either link side, at 100 percent of their base-currency total; a deal-linked quote is represented by its deal, so nothing double-counts). A foreign-currency quote has no stored CHF base and lands in excluded[] with needs_fx_rate instead of a silently wrong total. A projection (Prognose, keine Buchhaltungszahl): nothing here is posted revenue.

NameRequiredDescriptionDefault
workspaceIdYes
horizonMonthsYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds substantial behavioral detail: three mutually exclusive components, probability weighting, no double-counting, foreign-currency exclusion with needs_fx_rate, and the clear statement that output is not posted revenue. This is far more than annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and every clause adds non-redundant detail. However, the text is a dense run-on sentence with awkward phrasing like 'each expected Rappen in exactly ONE' and several unexplained abbreviations, so structure could be cleaner.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description covers the key behavioral context well: components, exclusions, FX handling, and double-counting prevention. It falls slightly short on explicitly defining the full return shape and the workspaceId parameter, but for a two-parameter forecast tool it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It clarifies horizonMonths as a 1-24 month horizon, but it never mentions workspaceId, and most of the description explains output behavior rather than parameter meaning. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (revenue forecast) and the computation (per month over a 1-24 month horizon), with specific output components. It does not explicitly differentiate from sibling forecasting tools such as forecast_sales_kpis or forecast_weighted_pipeline, but the level of detail makes the purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes an explicit when-not statement ('nothing here is posted revenue') and clarifies this is a projection rather than accounting data. However, it does not mention alternative forecasting tools or state selection criteria for when to use this tool instead of siblings, so usage guidance is mostly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forecast_sales_kpisA
Read-only

Verkaufskennzahlen (sales KPIs) over deals CLOSED in the from/to window: conversionRateBp = won over (won plus lost) in integer basis points, avgDealSizeMinor = round-once mean of won base values, avgCycleDays = whole-day mean from deal creation to the OP5 won-timestamp. Zero closed deals answers null KPIs with sample:0, never a fake 0 percent an agent could misread. Management figures over pipeline estimates, not accounting figures.

NameRequiredDescriptionDefault
toYes
fromYes
pipelineIdNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation by disclosing the zero-deals edge case (returns null KPIs with sample:0, never a fake 0 percent) and specifying calculation details (round-once mean, whole-day mean, OP5 won-timestamp). This is exactly the kind of behavioral context an agent needs, and it does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that packs purpose, formulas, edge case, and a caveat. It is front-loaded with the main purpose and contains no fluff, though the length and semicolon-heavy structure could be slightly more scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only KPI tool, it covers the essential output metrics, the zero-deals edge case, and the distinction from accounting figures. However, without an output schema, it does not describe the return envelope (e.g., JSON structure, units for avgCycleDays) or parameter formats like date strings, leaving some context incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters. It only clarifies the 'from/to window' and does not mention workspaceId or pipelineId, which remain undocumented. The KPI formulas are explained but not mapped to parameters, leaving a significant gap for a 4-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool computes sales KPIs over deals CLOSED in a time window, and explicitly names each metric (conversionRateBp, avgDealSizeMinor, avgCycleDays) with formulas. It also distinguishes itself from pipeline estimates via 'Management figures over pipeline estimates, not accounting figures.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use for closed-deal management KPIs, not accounting figures. It implicitly contrasts with pipeline estimates ('over pipeline estimates'), which suggests when this tool is appropriate vs. other forecast tools. However, it does not explicitly name sibling tools like forecast_weighted_pipeline or forecast_vs_actual.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forecast_vs_actualA
Read-only

Prognose vs. Ist (forecast vs actual) for one period (YYYY, YYYY-MM or YYYY-Qn): actualRevenueMinor is the A08 Erfolgsrechnung's Nettoerlöse subtotal (POSTED revenue, net of VAT, the only accounting figure in this capability) against wonInPeriodMinor (won-deal base value with the OP5 close date in the period), with the delta and the two named gap buckets: wonNotInvoicedMinor (revenue still to come) and invoicedWithoutDealMinor (posted invoices whose source chain reaches no deal, at their net subtotal). A period with neither answers zeros with sample:0. Stores no snapshot (P5): scheduled history belongs to F01.

NameRequiredDescriptionDefault
periodYes
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint, the description discloses meaningful behavior: what actualRevenueMinor and wonInPeriodMinor mean at source level, the zero/zero-blank period response behavior with sample:0, and the no-snapshot policy with F01 ownership. This is exactly the kind of context an agent needs and it contradicts no annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

There is no filler; every clause adds useful information, and the core comparison is front-loaded. The density and run-on style could be improved with structuring, but it remains efficient for the complexity it covers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description compensates by naming the returned concepts: delta, wonNotInvoicedMinor, invoicedWithoutDealMinor, and the sample:0 edge case. It does not describe the response envelope or error behavior, but given the read-only scope and detailed semantics, it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate, and it does for the period parameter by defining the accepted formats YYYY, YYYY-MM and YYYY-Qn and clarifying what period means. workspaceId remains implicit and self-evident from the parameter name, which prevents a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool computes: a forecast-vs-actual comparison for one period, comparing actualRevenueMinor against wonInPeriodMinor, the delta, and two named gap buckets. It names precise source definitions and the allowed period format, which makes it clearly distinguishable from the forecasting and reporting siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context on when this tool applies: a single period with specific formats, and it explicitly notes that no snapshot is stored and scheduled history belongs to F01, which routes agents away for historical needs. It does not explicitly name alternative forecast tools like forecast_revenue or forecast_weighted_pipeline, so it is not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forecast_weighted_pipelineB
Read-only

Die gewichtete Pipeline (weighted pipeline): every OPEN deal contributes round-once(valueBaseMinor times probability over 100), C01's own formula, grouped by 'stage' | 'month' | 'quarter' of expectedCloseOn or by any confirmed select/multiselect custom-field key on deal (rows re-bucket, totals never move: totalWeightedMinor is identical for every valid groupBy). Sums are integer Rappen over the stored CHF base (never re-converted); deals without a close date bucket under 'none', never dropped. An empty pipeline answers rows:[] and zero totals, not an error. This is a PROJECTION over estimates (Prognose, keine Buchhaltungszahl), not an accounting figure: revenue exists when A11 issues an invoice.

NameRequiredDescriptionDefault
groupByNo
pipelineIdNo
workspaceIdYes
horizonMonthsNo

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses several behaviors beyond the readOnlyHint annotation: the rounding formula, integer Rappen over CHF base, handling of deals without close dates, empty pipeline response, and the projection-vs-accounting distinction. It does not mention errors or rate limits but covers key edge cases well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph with many clauses. It front-loads the core formula but is somewhat unstructured, mixing multiple concepts (rounding, grouping, edge cases) without clear separation. It is informative but not optimally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the formula, grouping, edge cases, and output shape for empty results, but it omits details about the required workspaceId, pipelineId selection, and horizonMonths semantics. Without an output schema, it also does not describe the response structure beyond rows and totals. It is complete for the main use case but leaves gaps for parameters and response details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must explain all parameters. It explains groupBy (stage/month/quarter or custom field) but does not describe workspaceId, pipelineId, or horizonMonths. This leaves significant ambiguity for the required and other parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool computes a weighted pipeline forecast with a specific formula, grouping options, and edge cases. It is distinct from forecast_revenue and forecast_sales_kpis, though it does not explicitly name alternatives, so it is clear but not fully differentiated from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus other forecasting tools such as forecast_revenue or forecast_vs_actual. The description explains behavior but does not provide context on selection criteria or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fx_revaluationA
Read-only

Revalue every open foreign-currency monetary position (A19 FC bank balances, A16/A17 open FC debtor/creditor items) at the closing rate for periodEnd (OR Art. 960a: Bilanzstichtagskurs). Returns each position with its foreign-currency amount, book CHF, closing rate, revalued CHF and the UNREALISED diff, the per-currency subtotals, the net total, and any currency that still needs a rate. A read model: nothing is posted. Negative total is a net unrealised loss.

NameRequiredDescriptionDefault
periodEndYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'nothing is posted'. It adds useful behavioral detail beyond annotations: the full return structure, per-currency subtotals, the unrealised-diff interpretation, and the signal that some currencies may still need a rate. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause adds value: scope, valuation basis, return fields, safety, and sign interpretation. The return enumeration is long and slightly run-on, but it is justified because there is no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex financial tool with no output schema, the description covers the purpose, parameter semantics for periodEnd, the full read-model return, and the meaning of a negative total. The main missing context is an explicit pointer to post_fx_revaluation and whether rates must be recorded beforehand, but those are secondary for invoking a read-only preview.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry parameter meaning. It meaningfully explains `periodEnd` as the closing-rate date and legal basis, but it does not explain `workspaceId` at all. This is a partial compensation rather than full coverage of the required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Revalue'), names the exact scope (A19 FC bank balances, A16/A17 open debtor/creditor items), and specifies the valuation basis ('closing rate for periodEnd', Art. 960a). It also explicitly frames itself as a read model, which distinguishes it from siblings like post_fx_revaluation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use it: 'A read model: nothing is posted' signals this is for previewing rather than posting a revaluation. However, it does not name the alternative (post_fx_revaluation) or state explicit conditions such as 'use this before posting'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fx_revaluation_reverseA
DestructiveIdempotent

Revert a posted FX revaluation run (D129 Q2): books the mirror of the revaluation entry dated the period end (source fx) plus its own next-day reversal, atomically, so every position and account 6949 net to zero on both dates and nothing is edited. runId is the run post_fx_revaluation returned. Refuses not_posted for a run that posted nothing, already_reversed, later_run_exists naming the later period end whose run still stands (revert newest first), and period_locked for a locked period. Idempotent on idempotencyKey. CONSEQUENCE: Reverts the period-end currency revaluation with mirror entries, so every account nets to zero. The original entries stay visible beside them; this revert can't be reverted again.

NameRequiredDescriptionDefault
runIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: discloses the mirror-entry accounting mechanics, atomicity, the fact that original entries remain visible, refusal codes, and that the revert is terminal. Annotations say destructive but never explain what is written — the description does, consistently.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the operation, then behavior, then refusals, then consequence — logical and every clause carries information. Slightly dense with backticked codes and parentheticals, but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-reversible, no-output-schema mutation this covers safety profile, required inputs, refusal taxonomy, idempotency, and accounting consequence. An agent can decide and call it correctly without further lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry parameter meaning, and it does for runId (source run) and idempotencyKey (dedup key), plus defines the failure semantics tied to them. workspaceId is left implicit, which is the only gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Revert a posted FX revaluation run') and adds the document/category reference (D129 Q2) so the operation is unambiguous. It is clearly distinguishable from post_fx_revaluation, which it names as the producing sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly ties input to the sibling ('runId is the run post_fx_revaluation returned'), states the ordering rule ('revert newest first') via later_run_exists, and enumerates the exact refusal states that mean the agent should not call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

general_ledgerA
Read-only

Kontoblatt (general ledger) for ONE account: the opening carry, every posted line in the period in date order with its running balance, and the closing balance. Each line carries the entryId to drill into with get_entry and the entry's Belegnummer (number). Debit-positive like the Saldenbilanz, with naturalSide naming which way the account is expected to lean. Drafts never appear. groupBy accepts 'kmu' today and refuses anything else.

NameRequiredDescriptionDefault
groupByNo
accountIdYes
periodEndYes
periodStartYes
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, so the description carries real weight and delivers: drafts excluded, groupBy refuses anything but 'kmu', debit-positive sign convention, naturalSide orientation, and date-ordered lines with running balances. That is behavioral context an agent cannot get from the annotation or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, each earning its place: resource/scope first, return shape second, drill-down and sign convention third, exclusions and the groupBy constraint last. No filler or restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still defines the return structure (opening carry, per-line entryId and Belegnummer, running balance, closing balance, naturalSide) and documents the one non-obvious parameter constraint. An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and has no enums, yet the description supplies the critical constraint that groupBy only accepts 'kmu' and errors otherwise, plus the meaning of accountId (single account) and the period bounds. workspaceId is left unmentioned, so it is not fully exhaustive for 5 params.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific artifact (Kontoblatt/general ledger), scopes it precisely to ONE account, and enumerates exactly what is returned: opening carry, ordered posted lines with running balance, closing balance. An agent can distinguish it from list_journal, trial_balance or gl_archive_account_history without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'For ONE account' sets the scoping condition, and 'drill into with get_entry' names the natural follow-up tool, plus 'Drafts never appear' excludes unposted data. It does not explicitly contrast against sibling read tools like list_journal or trial_balance, so it stops short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_pain001A
Idempotent

Build (or rebuild) the batch's pain.001.001.09 XML, validate it, and flip the batch from draft to generated on first success; regenerating an already-generated batch reproduces byte-identical output (nothing about it changes after creation). Only a valid file is ever returned. NEVER transmits: always answers transmitted:false, with reason 'upload_in_ebanking' when an EBICS channel routes the batch's debtor account (the channel downloads statements only: the owner uploads the file in the bank's eBanking and releases it there, and the statement brings the debit) or 'no_channel' otherwise (the file-download path is then the floor). CONSEQUENCE: Builds the payment file for the run, ready to upload in your e-banking; TILL sends nothing to the bank. You can still discard the run, which makes its bills payable again.

NameRequiredDescriptionDefault
batchIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already indicating idempotency and non-destructiveness, the description adds substantial behavioral context: byte-identical regeneration, draft-to-generated status transition, validation guarantee, transmitted:false behavior, and two concrete reasons tied to EBICS channel routing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary action and validation outcome, then explains non-transmission and regeneration. It is somewhat dense and repeats the non-transmission point in a consequence block, but most sentences carry useful operational meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still covers the critical return behavior (transmitted:false with reason codes), state transitions, validation guarantee, and regeneration semantics. It is complete for an agent to understand the tool's contract and safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the three required parameters. It contextualizes the batch and debtor account conceptually, but gives no meaning for workspaceId, batchId, or idempotencyKey beyond what their names imply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: 'Build (or rebuild) the batch's pain.001.001.09 XML, validate it, and flip the batch from draft to generated'. It also distinguishes this tool from transmission-oriented siblings by emphasizing 'NEVER transmits' and naming the underlying reasons.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes when to use it: generating the payment file for a batch, including regeneration semantics. It also gives a strong when-not signal ('NEVER transmits') and explains that discarding the run restores bill payability, though it does not explicitly name a sibling such as payment_batch_transmit as the alternative for transmission.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_agent_dialA
Read-only

Read the raw approval-dial levels for every governed capability (post, issue, send, dun, pay, vat-file, customize, plugin-install, close-period, go-live). Each defaults to ask when never set. Owner-facing view of what the agent may auto-execute versus draft.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description aligns with that. It adds useful behavioral detail beyond the annotation: each dial defaults to 'ask' when never set, which informs the agent about unset values. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no fluff. The enumeration of capabilities is long but directly informative, and the primary action is front-loaded. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, default behavior, and audience. However, there is no output schema, and the description does not explain the return format, what 'raw' means, or the exact values of the dial levels. For a simple read tool it is acceptable, but it falls short of fully equipping the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required parameter (workspaceId) with 0% schema description coverage, yet the description never mentions or explains the parameter. The workspace scope is implied by context, but the description does nothing to compensate for the missing schema documentation, leaving the agent to infer the parameter's role.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') and a specific resource ('raw approval-dial levels'), lists the governed capabilities explicitly, and frames it as an owner-facing read view. This clearly distinguishes it from the mutating sibling set_agent_dial and from list_drafted_actions, even though siblings are not named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use the tool: 'Owner-facing view of what the agent may auto-execute versus draft' signals it is for inspecting permissions, not changing them. It does not explicitly name alternatives or exclusions, but the read/write contrast with set_agent_dial is strongly implied by the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_agent_sessionA
Read-only

Read one agent session in full: its turns in order, each with its recorded calls (verb, arguments, execute/draft/deny decision, dial capability, outcome, duration, and the created object where one exists). A foreign sessionId reads as not_found, never as another tenant’s transcript.

NameRequiredDescriptionDefault
sessionIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses a critical security behavior: 'A foreign sessionId reads as not_found, never as another tenant's transcript.' It also details the response structure (turns, calls, decisions, outcomes), providing behavioral context that annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. The primary purpose is front-loaded, and the detailed field list is compactly integrated into the first sentence. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with no output schema, the description covers the return contents and an important edge case. It does not mention potential large payloads, pagination, or explicitly contrast with sibling tools, but the provided information is sufficient for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning for sessionId by explaining the foreign-session behavior, but it does not explain workspaceId or the additionalProperties=true allowance. The parameter meanings are only partially clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read'), a resource ('one agent session'), and the full scope ('in full'), followed by an enumeration of the session contents. This clearly distinguishes it from list_agent_sessions (which lists sessions) and get_agent_dial (which retrieves a specific dial), so an agent can tell them apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a complete session transcript is needed, but it does not explicitly name alternatives or state when not to use this tool. The presence of siblings like get_agent_dial and list_agent_sessions makes the differentiation inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_aging_bucket_configA
Read-only

The day thresholds the aging buckets cut at, and whether this workspace chose them or is on the shipped default of 30/60/90 days. Also returns the bucket keys those boundaries produce. Reads only.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only, and the description consistently says 'Reads only' with no contradiction. It adds useful behavioral context by explaining what the returned thresholds represent, including the shipped default of 30/60/90 and whether the workspace chose custom values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, no filler, with the core output described first and the read-only caveat last. Efficient for what it covers, though 'Reads only' slightly duplicates the readOnlyHint annotation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with no output schema, the description gives enough about the returned content to invoke it correctly. It could add an explicit note about what workspaceId means, but the tool is simple enough that this is not a major gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required workspaceId parameter with no description, and the tool description never names it explicitly. 'This workspace' implies the result is scoped by workspaceId, which partially compensates for the 0% schema coverage, but the parameter itself is left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool returns: aging bucket day thresholds, default/custom origin, and bucket keys. The phrase 'Reads only' distinguishes it from the sibling set_aging_bucket_config without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the tool to read aging bucket configuration, and 'Reads only' hints it is not for changing it. However, it never explicitly says 'use set_aging_bucket_config to modify these settings', leaving the contrast with its sibling mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_api_catalogA
Read-only

Return an OpenAPI 3.x document of every MCP tool and its REST twin (route, input shape, read/write, required capability), generated from the live registry. Describes the software contract, not workspace data.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already indicates a safe read operation, and the description adds valuable context: it is generated from the live registry and explicitly notes it describes the software contract, not workspace data. This complements the annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no fluff. The primary action and object are front-loaded, and the clarifying statement about workspace data is efficient and useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only tool, the description fully explains what it returns and its scope. It does not need to describe output schema details since an OpenAPI document is self-describing, and the read-only nature is covered by annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the description does not need to explain parameter meaning. The schema coverage is trivially 100% and the baseline for zero parameters is 4, which is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Return') and a specific resource ('an OpenAPI 3.x document of every MCP tool and its REST twin'), and it clarifies that it describes the software contract rather than workspace data. This distinguishes it from data-retrieval tools and makes 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.

Usage Guidelines2/5

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, such as the sibling 'runtime_catalog' or other introspection tools. There are no explicit conditions, exclusions, or comparisons, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_audit_logC
Read-only

Read the tamper-evident audit trail and its chain-verification status.

NameRequiredDescriptionDefault
toNo
fromNo
entityKindNo
workspaceIdYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals safe read behavior, so the description is not burdened with basic safety disclosure. It adds useful context around the tamper-evident nature and chain-verification status, but it doesn't explain what chain verification entails, whether verification is computed on demand, or what the response contains. No contradiction with the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is tight, front-loaded and grammatically efficient, with no wasted words. It states the core action and the distinguishing resource in one readable line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four parameters, no output schema, and zero schema-level parameter descriptions, the description is too thin. It does not clarify date range semantics, allowed entityKind values, or what the chain-verification status returns, so the agent is left without enough context to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema description coverage is 0% and none of the four parameters (workspaceId, to, from, entityKind) are explained in the description. The description adds no meaning beyond the schema; the agent must guess the semantics of date-range and entityKind filters and why workspaceId is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (Read) and a well-defined resource (tamper-evident audit trail and chain-verification status), making the tool's domain clear. It doesn't explicitly contrast with siblings like get_diagnostics or review_status, but the resource is distinctive enough to separate it from peers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as review_status, runtime_status, or get_diagnostics. The description states what the tool does but leaves the selection criteria entirely to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_automation_ruleA
Read-only

Read one automation rule: its trigger, its condition, the verb it calls and the input template it calls it with, who authored it (and therefore whose capabilities its firings carry), and when it last fired.

NameRequiredDescriptionDefault
ruleIdYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description need not restate safety. It adds valuable context by specifying the returned data and its significance (e.g., author implies whose capabilities firings carry). It does not contradict annotations and provides useful behavioral detail beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that front-loads the core action 'Read one automation rule' and then lists specifics. It is appropriately sized, though slightly long; every clause adds value and there is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with no output schema, the description lists the returned fields comprehensively, including the author and last-fired timestamps. It does not cover potential error cases or null handling, but given the read-only annotation and straightforward nature, this is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the parameters. It does not mention workspaceId or ruleId at all, leaving their purpose implicit. While they are simple string IDs, the description fails to compensate for the missing schema documentation, making it inadequate for parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Read' and the resource 'one automation rule', and enumerates exactly what is returned (trigger, condition, verb, input template, author, last fired). This distinguishes it from sibling tools like list_automation_rules (which lists many) and get_automation_run (which reads runs), so an agent can select it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for reading a single rule via a ruleId, but it does not explicitly contrast with list_automation_rules or get_automation_run, nor mention when to prefer it. No exclusions or alternative conditions are given, leaving the 'when' to inference from the name and parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_automation_runA
Read-only

Read one firing in full, including the resolved action input that was really sent rather than the template it came from.

NameRequiredDescriptionDefault
runIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description aligns by saying 'Read,' so there is no contradiction. The description adds behavior beyond the annotation by explaining that the return includes the resolved action input actually sent (not the template), which shapes the agent's expectation of response content. It doesn't discuss pagination, permissions, or what 'in full' includes, but for a simple read operation the behavior is adequately disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, no filler, with the most valuable differentiator (resolved input vs template) placed up front. It earns its place and is immediately parsable by an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read operation with a readOnly annotation and no output schema, the description is mostly complete: it states the object (one firing), the level of detail ('in full'), and the key nuance (resolved action input vs template). The only small gaps are not explicitly naming what runId/workspaceId refer to and not mentioning any error conditions (e.g., run not found), but given the tool's low complexity, this is a minor shortfall.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, but it only explains the semantics of runId implicitly ('one firing') and workspaceId not at all. The schema provides only provides parameter names with no descriptions. The description adds meaningful context about the resource being read but doesn't explicitly map runId to a firing. Since the schema is sparse and the description adds some clarity about the object being fetched, a 4 is justified for adding value beyond the raw schema, though it could have explicitly defined both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') and resource ('one firing'), and includes a distinctive qualifier: 'in full, including the resolved action input that was really sent rather than the template it came from.' This clearly distinguishes it from sibling list/retry tools like list_automation_runs and retry_automation_run. Even without a title, the 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for reading a single execution record and highlights what makes it unique (resolved inputs vs templates), which tells the agent when this tool adds value over a list tool. However, it never explicitly states when to use this versus siblings like list_automation_runs or retry_automation_run, nor does it mention any preconditions (e.g., run must exist, requires workspace context).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bank_accountA
Read-only

Read one Bankkonto, including whether its IBAN is a QR-IBAN and therefore receive-only (a QR-IBAN may only be credited, never used as a debit account).

NameRequiredDescriptionDefault
workspaceIdYes
bankAccountIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already establishes that this is a safe read operation. The description adds meaningful behavioral context by explaining that a QR-IBAN is receive-only and may only be credited, never used as a debit account, which is useful for downstream decisions. It does not contradict the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the core purpose first and then adds the key QR-IBAN nuance without any fluff. Every phrase earns its place, and the structure makes the tool's behavior immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-two-IDs tool with a readOnly annotation, the description covers the essential purpose and the distinctive QR-IBAN implication. However, it provides no guidance on the required parameters and no indication of the return structure (other than the QR-IBAN flag), leaving some ambiguity for an agent that has no schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented workspaceId and bankAccountId parameters. It does not mention these parameters or explain what values they expect, leaving the agent to infer their purpose from the names alone. This is a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') and resource ('one Bankkonto') and adds a distinguishing detail: it returns whether the IBAN is a QR-IBAN and therefore receive-only. This clearly differentiates it from list_bank_accounts, create_bank_account, update_bank_account, and archive_bank_account.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Read one Bankkonto' implies this tool is for retrieving a single bank account rather than listing or mutating accounts, but it does not explicitly name alternatives or state when not to use it. The QR-IBAN context hints at downstream constraints, but there is no direct exclusion like 'for all accounts, use list_bank_accounts'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bank_csv_mappingA
Read-only

The saved CSV column mapping of one Bankkonto, with who saved it and when, or mapping: null when none is saved. Writes nothing.

NameRequiredDescriptionDefault
workspaceIdYes
bankAccountIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already covers the safety profile, and 'Writes nothing' merely echoes it, but the description goes further by disclosing the return payload (the mapping plus who saved it and when) and the null-when-absent behavior. With no output schema, this return-shape disclosure is genuinely valuable beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no filler, front-loading what is returned and closing with the null case and the read-only guarantee. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter it covers purpose, return shape, and the null case, which is most of what an agent needs. But with 0% parameter coverage the description should have explained workspaceId/bankAccountId, and the internal shape of the returned mapping remains unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for both parameters. 'One Bankkonto' loosely maps to bankAccountId, but workspaceId is never mentioned and neither parameter's format or relationship to the mapping is clarified, leaving undocumented inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (the saved CSV column mapping) scoped to one Bankkonto, so the agent knows exactly what is returned. It implicitly separates itself from set_bank_csv_mapping via 'saved' and 'Writes nothing', though it never names the sibling, so differentiation is inferential rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: the null-when-none clause signals a 'check whether a mapping exists' use case, and 'Writes nothing' steers away from the setter. However, no explicit when-to-use, prerequisites, or named alternative (set_bank_csv_mapping, bank_csv_preview) is given, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_captureB
Read-only

One capture with all its fields (live plus superseded history, each carrying its provenance and confidence, and qrPayloadId when a supplied QR payload wrote it), the supplied QR payloads as evidence (qrPayloads), and the E00 document reference to fetch the original via documents_get_content. A31 never serves bytes itself.

NameRequiredDescriptionDefault
captureIdYes
workspaceIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds substantive behavior beyond that: it discloses that superseded history is included alongside live values, that each field carries provenance and confidence, and critically that this tool never serves bytes and the original must be fetched via the documents endpoint. That last point is a non-obvious behavioral constraint an agent would otherwise get wrong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the most important information (what you get back) front-loaded, and no filler. The nested parentheticals and internal codes ('A31', 'E00 document reference') make it harder to parse than necessary, but every clause carries content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description sensibly takes on the burden of describing the return shape, and does so in reasonable detail including the QR-evidence and history aspects. However, it leaves both required identifier parameters entirely unexplained and uses unexplained domain codes (A31, E00), so an agent knows what it gets back but not how to construct the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and neither of the two required parameters (captureId, workspaceId) is mentioned anywhere in the description. The description does not say what a capture ID looks like, whether the workspace ID scopes lookup, or how the two interact. With zero schema coverage, the description needed to carry this and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states precisely what is returned: a single capture with all fields, live plus superseded history with provenance/confidence, associated qrPayloads, and the document reference. This is far more specific than the bare name and implicitly distinguishes it from the sibling list_captures ('one capture' vs a list). It never uses an explicit retrieval verb, and the sibling names docs_get_content/files_get_content are garbled ('documents_get_content'), but the resource and scope are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is one real piece of routing guidance: 'the E00 document reference to fetch the original via documents_get_content. A31 never serves bytes itself' tells the agent not to expect binary content here and where to go instead. Beyond that, there is no statement of when to call this versus list_captures, get_document, or get_entry, and no prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_profileB
Read-only

Read the workspace company & fiscal profile.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is consistent with the readOnlyHint annotation and adds that the tool covers both company and fiscal profile data. However, no extra behavioral context is provided, such as what happens if the workspace does not exist or whether partial profile data can be returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence, front-loaded with the action and resource. Every word earns its place, and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only tool this is minimally adequate, but it lacks details about the returned profile structure, any conditional behavior, or how it relates to the many workspace-related sibling tools. The absence of an output schema makes a little more description desirable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the workspaceId parameter beyond loosely implying scope through the word 'workspace'. It does not compensate for the missing schema documentation, though the single parameter is relatively self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Read' and names the resource: the workspace company and fiscal profile. This clearly distinguishes it from related sibling tools like update_company_profile or set_fiscal_config, which imply mutations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives such as get_workspace, update_company_profile, or set_fiscal_config. The read-only nature is implied by 'Read', but no explicit conditions or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_conceptA
Read-only

Read one Begriff in one locale: the authored body (THE WORDING OF RECORD for explaining this term: cite it rather than paraphrasing), its statutory citations as a structured list, related terms, and an explicit not-implemented flag where TILL does not cover the subject. Unknown keys return a structured not_found naming the nearest keys; nothing is ever generated. Workspace-free: the corpus is identical in every workspace.

NameRequiredDescriptionDefault
keyYes
localeNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, but the description goes further by stating 'nothing is ever generated' – a strong behavioral guarantee. It also discloses how unknown keys are handled (structured not_found with nearest keys) and that the tool is workspace-free (identical corpus across workspaces). These are significant behavioral details beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but every sentence adds value: it lists return components, explains unknown-key behavior, and notes workspace invariance. It is front-loaded with the core purpose and avoids fluff. It could be slightly more concise, but it is well-structured and not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description adequately explains what the tool returns (authored body, citations, related terms, flag) and handles edge cases (unknown keys). It also clarifies the workspace-free nature. It does not specify the exact structure of the response (e.g., field names) but that may be inferred. The main missing piece is parameter format guidance, which was already penalized in parameter semantics. Overall, it is reasonably complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the parameters 'key' and 'locale'. The description mentions 'one Begriff in one locale' and 'key' implicitly, but it does not explain what constitutes a key or the valid values/format for locale. The agent is left guessing about how to specify the locale or what a key looks like. This is a clear gap given zero schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Read one Begriff in one locale' and enumerates exactly what is returned (authored body, statutory citations, related terms, not-implemented flag). It also distinguishes itself from list_concepts by focusing on a single term, though not naming the sibling explicitly. The verb 'read' plus the resource 'Begriff' 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is for retrieving a single concept's details, and it explicitly advises citing the authored body rather than paraphrasing, which guides the agent's use of the result. It does not name alternative tools or provide exclusion criteria (e.g., when to use list_concepts instead), but the scope is clear enough that an agent can infer it is for single-lookup use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_contactC
Read-only

Read a contact.

NameRequiredDescriptionDefault
contactIdYes
workspaceIdYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes the read-only nature, and the description merely restates that without adding new behavioral details. There is no mention of what happens for missing contacts, response shape, or any side effects, but it does not contradict the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short and front-loaded, but it is under-specified rather than appropriately concise. It avoids fluff, yet it omits essential usage and parameter context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, no parameter descriptions, and no usage guidance, this description is incomplete. It gives the agent only the bare action, not enough to confidently invoke the tool in varied scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, and the description does not explain the purpose or format of workspaceId or contactId. An agent is left to infer that these are identifiers, with no guidance on their relationship or expected values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (read) and the resource (contact), and the required contactId and workspaceId parameters make it evident this is a single-record fetch rather than a list operation. It does not explicitly distinguish itself from list_contacts, but the 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as list_contacts, search_global, or contacts_timeline. It provides no context about typical use cases, prerequisites, or sibling tool routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_diagnosticsB
Read-only

Read the error-recording preference and every recorded entry: the whole of what TILL has kept about this person, readable at any time with no request to make.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description reinforces this with 'readable at any time with no request to make.' It adds context about the scope ('every recorded entry' and 'the whole of what TILL has kept about this person'), but doesn't disclose details like return format, pagination, or data volume. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the core action ('Read the error-recording preference and every recorded entry') and adds a clarifying scope phrase. It is efficient with no filler, though the phrasing 'the whole of what TILL has kept about this person' is slightly informal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with one parameter and readOnlyHint annotation, the description covers the basic purpose and scope. However, it leaves the workspaceId parameter unexplained and doesn't describe the output shape, which an agent would need to interpret the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the workspaceId parameter at all. The description mentions 'this person' but doesn't clarify how workspaceId relates to the person or what value to pass. With a single required parameter and zero schema coverage, the description should have compensated but didn't.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads the error-recording preference and all recorded entries, with a specific verb ('Read') and resource ('the whole of what TILL has kept about this person'). It distinguishes itself from set_diagnostics and clear_diagnostics by emphasizing read-only access, though it doesn't explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the read counterpart to set_diagnostics/clear_diagnostics and notes it is 'readable at any time with no request to make,' which gives some usage context. However, it doesn't explicitly state when to use this tool versus alternatives or mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_documentA
Read-only

Read a document with its positions and status trail. For an invoice, include 'qr' and/or 'pdf' to attach the Swiss QR-bill payload and the rendered PDF (A11, D14).

NameRequiredDescriptionDefault
includeNo
documentIdYes
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already covers the read-only nature. The description adds behavioral context by specifying the response includes positions and status trail, and the optional attachments for invoices (QR-bill payload and PDF). This goes beyond the annotation by describing the returned data and conditional behavior. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The primary purpose is front-loaded, and the conditional include information is clearly stated in a compact manner. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with three parameters and no output schema, the description is fairly complete. It explains the optional includes and hints at the response content (positions and status trail). It does not describe the full response structure or any pagination or error behavior, but given the read-only nature and the clarity of the parameters, this is acceptable. A small gap is the lack of description for the required IDs, but they are obvious.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the 'include' parameter well (values 'qr' and 'pdf' and their purpose). However, it does not describe 'workspaceId' and 'documentId', though these are self-explanatory from their names. The description adds value for one param but leaves the others undocumented; this partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read'), a specific resource ('a document'), and explicitly mentions what it returns ('positions and status trail'). It also differentiates from other get tools by highlighting the optional invoice-specific includes ('qr' and 'pdf'). This clearly distinguishes it from siblings like list_documents or get_document_template.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (to read a document with its positions and status trail) but does not explicitly state when not to use it or mention alternatives. It gives context for the include parameter for invoices, but there is no direct comparison to other document-related tools. This is adequate but not explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_document_templateB
Read-only

One template with its full configuration: footer text per locale, language mode, fixed locale, optional column order, default/archived flags, and the linked logo file id.

NameRequiredDescriptionDefault
templateIdYes
workspaceIdYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the read-only nature, and the description adds useful detail about what the returned configuration includes. However, it does not disclose any other behavioral aspects like what happens when the template does not exist, whether archived templates are included, or how linked logo details are resolved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence that front-loads the core purpose and uses a colon list to enumerate the configuration fields. It is efficient, though the list is slightly dense and could be structured more clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does help by listing the configuration fields that will be returned. However, it does not account for parameter semantics, error behavior, or the relationship to sibling template tools, leaving moderate gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides zero description coverage, leaving workspaceId and templateId with no explanation beyond their names. The description mentions template configuration but does not explain the parameters, their formats, or how they are used to identify the template.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's subject as a single template and enumerates the exact configuration fields it returns (footer text per locale, language mode, fixed locale, column order, flags, logo file id). This differentiates it from list_document_templates, but it does not state an explicit verb like 'retrieves' or explicitly name the sibling it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to call this tool versus alternatives such as list_document_templates, create_document_template, or update_document_template. The description implies it is for fetching one template's full configuration, but there are no explicit usage conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dunning_configA
Read-only

The Mahnwesen policy: the three escalation levels with their days-overdue thresholds, the Mahngebühr per level (amount and fee-income account; a positive fee always books, and its VAT follows the chased invoice's own rates automatically per D69), the Verzugszins note settings (Art. 104 OR: 5% p.a. is the statutory default, only a HIGHER contractual rate is configurable), and whether this workspace chose the policy or is on the shipped defaults (1./2./3. Mahnung at 10/20/30 days overdue, no fee, no interest note). Reads only.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses specific behaviors: positive fees always book, VAT follows the chased invoice's rates per D69, only higher-than-statutory interest rates are configurable, and default thresholds. This adds valuable context about what the tool returns and how policy behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph with many domain-specific clauses (Mahngebühr, Verzugszins, D69, Art. 104 OR) and enumerations. It is verbose and could be distilled to a clear summary like 'Returns the dunning policy configuration for the workspace.' Front-loading is weak; key purpose is buried in detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description does a good job of explaining the main components of the dunning policy: thresholds, fees, interest settings, and defaults. It covers essential aspects, though it might miss structural details like exact field types or currency units, but it is largely complete for understanding the tool's output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter workspaceId with 0% description coverage. The description does not explain what workspaceId represents or how it is used (e.g., to identify the workspace whose policy is fetched). It relies on the name being self-explanatory, which is insufficient given the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the Mahnwesen (dunning) policy, enumerating its components: escalation levels, thresholds, fees, interest note settings, and default vs. custom selection. The explicit 'Reads only' differentiates it from sibling set_dunning_config.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies read-only usage via 'Reads only' and the content focus, but does not explicitly mention alternatives like set_dunning_config for modifications or when to use this getter over other dunning-related tools. The guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dunning_pdfA
Read-only

Render one debtor's reminder letter from an issued Mahnlauf, base64-encoded: the creditor block, the overdue invoice list with days overdue (earlier Mahngebühren itemised separately from the invoice's own open amount), the Mahngebühr, the Verzugszins note, and one Swiss QR payment part PER INVOICE (amount = that invoice's open amount + the fee AS DEMANDED AT ISSUE, reference = the invoice's own QRR/SCOR, so the payment still matches the invoice). The demand FREEZES at issue (D73): every FIGURE renders from the issue-time snapshot, so a reprint states exactly the amounts that were mailed, and a fee recovered after a period lock joins the NEXT escalation letter, never this one; the creditor and debtor blocks and the QR payload's party data render CURRENT master data. Nothing is stored. A proposed run has no letter yet.

NameRequiredDescriptionDefault
runIdYes
debtorIdYes
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description details behavior thoroughly: base64-encoded output, issue-time snapshot freezing, current master data for creditor/debtor/QR party data, no persistence, and exclusion of later-recovered fees. Nothing 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause adds materially: output contents, snapshot semantics, payment-part behavior, storage behavior, and the proposed-run constraint. It is front-loaded with the core function before the detailed rules.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only render tool with no output schema, the description fully covers what the returned PDF contains and the temporal rules for fees and master data. It also flags the no-letter case for proposed runs, leaving little ambiguity for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description compensates by associating runId with an issued Mahnlauf and debtorId with the specific debtor whose letter is rendered. workspaceId remains only implicit in the surrounding domain language.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Render') and resource ('one debtor's reminder letter from an issued Mahnlauf') and enumerates the exact contents of the PDF. It clearly distinguishes the tool from siblings like get_dunning_run by clarifying it produces the rendered letter rather than metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the trigger condition explicit: an issued Mahnlauf, and explicitly excludes proposed runs with 'A proposed run has no letter yet.' It does not name alternative tools, but it gives clear context for when this render operation applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dunning_runA
Read-only

Read one Mahnlauf in full: every item (invoice, debtor, level, open amount, Mahngebühr, Verzugszins note, days overdue) and the per-debtor letter groups with their send outcomes. Reads only.

NameRequiredDescriptionDefault
runIdYes
workspaceIdYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the read-only safety profile, and the description adds 'Reads only.' along with a description of the returned content. It doesn't disclose potential large result sizes, pagination, or error behavior, but it does add useful content-level detail beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient and front-loaded with the core action, then lists the specific returned fields. The final sentence 'Reads only.' is somewhat redundant with the opening verb and the readOnlyHint annotation, but the overall length is appropriate and each part contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description gives a high-level summary of the returned items and letter groups but does not define the structure or types. It doesn't mention paging, size limits, or the meaning of German terms like Mahngebühr and Verzugszins, leaving an agent with only partial information about the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description gives no meaning to the two parameters. While runId and workspaceId are self-descriptive by name, the description does not explicitly map them to the dunning run or workspace, nor does it mention required formats or how to obtain a runId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific verb 'Read' and the resource 'one Mahnlauf' (dunning run), then enumerates exactly what is included: items with invoice, debtor, level, open amount, Mahngebühr, Verzugszins note, days overdue, plus per-debtor letter groups with send outcomes. This clearly distinguishes it from list_dunning_runs and get_dunning_pdf, which exist in the sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'in full' implies this is the detailed counterpart to listing tools, but no sibling tool is explicitly named. It provides clear context on when to use it—when a complete single-run detail is needed—but doesn't explicitly state when not to use it or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ebill_configA
Read-only

Read the workspace eBill configuration (the eBill-Biller-ID the owner received from a certified network partner at enrollment), or null when none is set. Enrollment happens with the partner, not in TILL.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint=true, so the description doesn't need to restate that. It adds useful context about the return value (null when none set) and the enrollment process, but doesn't disclose details like whether the ID is masked or if there are any side effects. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no waste. The core behavior and return value are front-loaded, and the enrollment clarification is a useful addition without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with one parameter and readOnlyHint annotation, the description covers the essential behavior, return value, and a key domain fact (enrollment happens externally). It doesn't describe error cases or response format, but the output schema is absent and the tool is simple enough that this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It explains the workspaceId parameter implicitly by referring to 'workspace eBill configuration', but doesn't explicitly describe the parameter format or constraints. The single parameter is simple enough that the description adds adequate meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads the workspace eBill configuration and returns the eBill-Biller-ID or null. It specifies the resource (workspace eBill configuration) and the exact return value, distinguishing it from set_ebill_config and other eBill tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is a read-only retrieval tool for checking the eBill configuration, and notes that enrollment happens with the partner, not in TILL. It doesn't explicitly name alternatives or exclusions, but the context makes it clear when to use it versus set_ebill_config.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_entryB
Read-only

Read a journal entry and its lines. The entry reports its Belegnummer (number, null on a draft). Each line reports the transaction amounts (debit, credit) under its currency, and the amounts the books hold (baseDebit, baseCredit) under baseCurrency, which is the workspace base currency.

NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety bar is lower. The description adds valuable behavioral context about the returned data: the entry's Belegnummer is null on a draft, and each line carries both transaction amounts and base-currency amounts. It does not cover error behavior or permissions, but the return-shape disclosure is genuinely useful given 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then explains returned fields efficiently. The third sentence is dense but each clause about Belegnummer and amount semantics earns its place by clarifying returned data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with readOnlyHint and no output schema, the description should at least clarify the two required parameters and return shape. It partially covers return fields but omits parameter meaning, making it only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0% for two required parameters, the description should explain entryId and workspaceId. It does not mention either parameter explicitly, only implicitly hinting at a workspace base currency and the concept of a journal entry, leaving the parameter semantics largely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('a journal entry and its lines'), which clearly identifies the operation. It does not explicitly differentiate from sibling reads such as list_journal or get_document, but the resource is specific enough that an agent can distinguish it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no indication of when to use this tool versus alternatives (e.g., list_journal for browsing, or get_recurring_schedule for scheduled entries). It offers only the bare purpose, leaving routing decisions to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_exchange_rateA
Read-only

Resolve which rate WOULD convert a currency into the workspace base currency on a date, and report the validity date, source and method of the rate that governs. Answers needs_fx_rate when none is admissible, rather than inventing one.

NameRequiredDescriptionDefault
dateNo
currencyYes
workspaceIdYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals no mutation, and the description adds valuable behavioral context: it reports the validity date, source, and method of the governing rate, and it explicitly answers needs_fx_rate rather than inventing a rate. This is meaningful beyond the annotation and contains 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the core behavior and the output context, and the second clearly communicates the fallback behavior. Every sentence earns its place without repeating schema field names.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description usefully indicates what the tool returns: the rate plus its validity date, source, and method, or needs_fx_rate. It could be slightly more explicit about whether the numeric rate value itself is returned, but overall it is largely sufficient for a small read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the semantic load and does clarify that currency is the source currency, workspaceId identifies the workspace base currency, and date is the relevant conversion date. However, it does not clarify date optionality/defaults or expected format details, leaving some ambiguity for invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific operation: resolving which rate would convert a currency into the workspace base currency on a date. It also distinguishes the tool from rate CRUD siblings like record_exchange_rate and list_exchange_rates by framing it as a resolution/calculation rather than a create/list operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is clearly stated: determine the governing rate for a currency conversion on a specified date, with a fallback of needs_fx_rate when no rate is admissible. It does not explicitly name alternative tools or exclusion conditions, but the context is strong enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fx_methodA
Read-only

Report which MWSTV Art. 45 conversion basis governs a Steuerperiode, whether that period is already settled by a posted foreign-currency entry, the earliest period whose basis may still be chosen, and the full election history. Ask by taxPeriod (YYYY) or by any date inside it.

NameRequiredDescriptionDefault
dateNo
taxPeriodNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already set readOnlyHint=true, so the description only needs to add context beyond that. It does, by disclosing what kind of report is returned: governing basis, settlement state, earliest electable period, and full election history. It does not contradict the annotations and adds meaningful behavioral context, though it does not discuss authorization or response semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The dense first sentence front-loads the full scope of the report, and the second sentence gives the query instructions in a scannable format with code-styled parameter names.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is strong for a read-only query: it lists all major outputs and the supported lookup modes, which is especially important given there is no output schema to describe returns. It does not specify exact response formatting or whether at least one of `taxPeriod`/`date` must be supplied, but for a read report tool the description is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates meaningfully: it defines `taxPeriod` as YYYY and explains that `date` can be any date inside the period. It leaves `workspaceId` undocumented, but that parameter is standard and the name is self-explanatory. The 'Ask by... or by...' phrasing also communicates the two query alternatives.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb ('Report') and a specific resource: the MWSTV Art. 45 conversion basis for a Steuerperiode. It then enumerates three additional facts (settlement status, earliest choosable period, election history), making the tool's purpose unmistakable and distinct from siblings like set_fx_method or describe_rate_feed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the caller how to query: 'Ask by `taxPeriod` (YYYY) or by any `date` inside it.' That is clear usage guidance. It does not name alternatives or state when not to use this tool, so it stops short of the explicit when/when-not standard.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_itemD
Read-only

Read an item.

NameRequiredDescriptionDefault
itemIdYes
workspaceIdYes

TDQS

D1.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The only behavioral signal is the readOnlyHint annotation, which the description implicitly repeats without adding extra context. It does not disclose return format, scoping constraints, or error behavior. Beyond the annotation, no new information 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.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

At three words, the description is minimal but under-specified. It fails to convey essential context beyond the name, so this is under-specification rather than concise effectiveness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, and the description does not explain what an 'item' is in this domain, how the response looks, or any special behavior. Given the array of sibling tools, this minimal description is insufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the meaning or format of workspaceId or itemId. With no descriptions in the schema and no compensation in the description, the agent must infer the semantics from parameter names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Read an item' restates the tool name with synonyms ('read' = 'get', 'item' = 'item') and does not specify what kind of item is being retrieved. It does not distinguish from sibling getters like get_document or get_contact. This is essentially a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternative getter tools. It does not mention contexts, prerequisites, or exclusions. An agent has no basis for choosing this over get_document or get_contact.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_move_stateA
Read-only

Read the move-checklist resume point for this workspace: the direction the books are moving (local_to_selfhost | local_to_managed | selfhost_to_managed | selfhost_to_local | managed_to_local | managed_to_selfhost), the five checklist steps each with the instant it was checked off (or null), startedAt and completedAt; or move:null when no move was started. Pure bookkeeping: nothing in the engine gates on this row. A COMPLETED move keeps its record, which is what the stale-writable notice (a moved but unarchived ledger) is derived from.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, consistent with the description's 'Read' and 'Pure bookkeeping.' The description adds valuable nuance beyond the annotation: nothing gates on this row, a completed move retains its record, and the stale-writable notice is derived from this data. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every clause earns its place: the action and resource are front-loaded, the returned fields are enumerated precisely, the null case is covered, and the two contextual notes (no gating, stale-writable derivation) are high-value. No filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read with readOnlyHint, the description is nearly complete: it specifies the return contents, the null case, and the lifecycle nuance of a completed move. It does not describe the JSON response envelope or error behavior, but with no output schema the field enumeration is especially useful. The only real gap is explicit routing among sibling move/checklist tools, already noted under usage guidelines.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for workspaceId, and the description only refers to 'this workspace,' which confirms the parameter identifies the workspace but adds no format, constraint, or additional context. For a single self-evident required parameter this is minimally adequate, though the description does not compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read') and resource ('move-checklist resume point'), then enumerates the exact data fields returned: direction enum, five checklist steps with timestamps, startedAt/completedAt, or move:null. The 'pure bookkeeping' note and the stale-writable derivation clearly separate it from mutation and migration siblings, so an agent can distinguish it from advance_move_step or checklist_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: it is the read-only inspection point for a move, and 'nothing in the engine gates on this row' implies it is safe for diagnostic use. It also explains that a completed move keeps its record and that the stale-writable notice is derived from it, which tells the agent when this tool is relevant. However, it does not explicitly name an alternative or state when-not-to-use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_onboarding_progressA
Read-only

Read the first-run wizard resume point for this workspace ({path, step, completedAt} or null when the wizard never ran), plus the workspace kind (demo|sandbox|live) so a client can show the demo banner off the same call. Pure bookkeeping: nothing in the engine gates on this row.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds 'Pure bookkeeping: nothing in the engine gates on this row' and clarifies the null return case, providing useful behavioral context. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler, front-loading the core function and return shape, then adding a purpose note. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one required parameter and no output schema, the description fully describes the return structure and the workspace kind. It omits error handling or permission notes, but these are not critical for a simple read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for workspaceId, and the description only refers to 'this workspace' without explicitly explaining that workspaceId identifies the target workspace. For a single parameter, the description provides minimal semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads the first-run wizard resume point and workspace kind, specifying the exact return shape ({path, step, completedAt} or null). It uses a specific verb (Read) with a concrete resource, and the added context about the demo banner distinguishes its purpose from other workspace-related reads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage for showing the demo banner and explicitly notes 'Pure bookkeeping' to signal it's a safe read. However, it does not name alternatives (e.g., get_workspace) or state when not to use it, 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.

get_opening_balancesA
Read-only

Read the opening position for a fiscal year: the seeded entry when there is one, or the balance sheet carried from the prior year's close (source=carried_forward, editable=false), or none. Returns each account with its number, name, type and side in Rappen, plus the totals and the reference (the Inventar or Beleg the position is traced to, null when none was given). A position that was reversed reads as source=none, because the ledger no longer holds it. A carried position is derived from the close and is not re-keyable: A03 owns the year-end result posting. If a carried position does not tie out it is REFUSED with carried_position_unbalanced rather than handed on, naming the signed difference and unclosedYears: an unclosed prior year leaves its result on Erfolgsrechnung accounts that a balance sheet does not carry, and every report above this one would be built on the gap.

NameRequiredDescriptionDefault
yearNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though readOnlyHint=true is already in the annotations, the description adds substantial behavioral context: carried positions are derived from the close and not re-keyable, A03 owns the year-end posting, reversed positions read as source=none, and unbalanced carried positions are refused with a specific error. It also explains the reasoning behind the refusal. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence adds meaningful detail about behavior, return values, and edge cases. It is front-loaded with the core purpose and progressively elaborates. While it is long, the complexity of the tool justifies the length; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully covers the return format (accounts with number, name, type, side in Rappen, totals, reference) and the various source states. It also explains the refusal scenario and its cause, which is critical for an agent to interpret errors. 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.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage (0%), so the description must compensate for parameter documentation. It mentions 'a fiscal year', implying the 'year' parameter, but it never explicitly describes 'workspaceId' or clarifies the expected format (e.g., YYYY, string). The description adds minimal parameter semantics beyond what the property names already suggest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and a precise resource ('the opening position for a fiscal year'), and distinguishes the three possible sources (seeded entry, carried forward, none). It clearly differentiates from write-oriented siblings like set_opening_balances, import_opening_balances, and preview_opening_import.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys that this is a read-only query for opening balances, and implicitly contrasts with the write tools (set_opening_balances, import_opening_balances) present in the sibling list. However, it does not explicitly name an alternative or state a 'when not to use' condition, so it stops short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_paymentA
Read-only

Read one payment: its allocations by document number, its Guthaben, its journal entry, and its reversal when it has one.

NameRequiredDescriptionDefault
paymentIdYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description's 'Read' verb is consistent with that, so no contradiction. The description adds useful context about what the call surfaces (allocations, Guthaben, journal entry, conditional reversal) beyond the annotation. With the read-only safety profile already covered by annotations, the bar is lower, and the description meets it without going further into auth or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the verb and resource and then lists the returned components with no filler. The conditional phrasing 'and its reversal when it has one' adds precision without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with two straightforward parameters and no output schema, the description covers the essential ground: what it reads, for which entity, and what comes back. The main gaps are the undefined domain term 'Guthaben', no mention of missing-payment behavior, and no sibling routing, but these are minor for the tool's modest complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it adds little: 'Read one payment' implicitly ties paymentId to the payment being fetched, and workspaceId is left entirely unexplained. The parameter names themselves are conventional and self-explanatory among sibling tools, which keeps this at a baseline 3 rather than lower.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Read one payment') and enumerates the response composition (allocations by document number, Guthaben, journal entry, reversal when present). The singular 'one payment' clearly distinguishes it from list_payments and preview_payment among the siblings, so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Read one payment' phrasing conveys an implied usage context: use this when you need a single payment's full details rather than a list. However, it never explicitly names alternatives like list_payments or preview_payment, nor does it state when not to use it, so the routing guidance is inferred rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_payment_batchA
Read-only

Read one payment batch in full: its debtor account, execution date, status, control sum and every item with its vendor, amount, full and masked creditor IBAN (the destination a pre-upload review verifies) and settlement.

NameRequiredDescriptionDefault
batchIdYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation declares readOnlyHint=true, which is consistent. The description adds that the batch is read 'in full' and clarifies the IBANs are the destination for pre-upload review, which is extra context. However, it doesn't disclose potential return size or that additionalProperties are allowed. With the annotation covering safety, the description adds some value but not exhaustive 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that front-loads the core action and then lists key returned fields. It is efficient with no fluff, but the parenthetical about pre-upload review inserts a purpose clause that, while useful, interrupts the flow. Still, it's concise and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema, the description lists the main fields returned, which is helpful. It does not mention pagination or the exact format of items, but the tool likely fits a standard batch structure. The sibling list includes related tools, and the description is sufficient for an agent to select and call it correctly, though it could note that it's read-only (already covered by annotation).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain parameters. It implies that workspaceId and batchId identify the batch, but doesn't explicitly state their types or formats. However, the description clarifies what the tool returns, which indirectly helps with expected inputs. Given 0% coverage, it partially compensates, but could add more explicit parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads one payment batch in full, enumerating specific fields (debtor account, execution date, status, control sum, items with vendor, amount, IBANs and settlement). This verb+resource combination distinguishes it from siblings like list_payment_batches, create_payment_batch, and mark_batch_paid.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While the read-only nature is implied and the scope is clear, there is no explicit statement of when to use this tool versus alternatives like list_payment_batches or generate_pain001. The description mentions a specific use case (pre-upload review), but does not say 'use this when...' or 'use list_payment_batches for summaries'. The usage is clear but not contrasted with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pluginA
Read-only

Lies eine Erweiterung (US-G02.2/3/4): one plugin manifest with its granted permission set and the precise list of capability registrations it currently holds (empty when disabled or incompatible).

NameRequiredDescriptionDefault
pluginIdYes
workspaceIdYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations provide readOnlyHint=true, so the description does not need to restate that. The description usefully adds that capability registrations are empty when disabled or incompatible, which explains a behavioral nuance. However, it doesn't disclose return format, required scopes, or what happens if pluginId does not exist. Overall, it adds meaningful context beyond annotations without contradicting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence with only relevant information, front-loading the verb and resource. It adds the business rule about empty capability registrations without waste. Every part is meaningful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With readOnlyHint annotation, no output schema, and 2 required parameters, the description covers the main purpose and edge case of disabled/incompatible plugins. It remains incomplete about response shape or error behavior, but for a simple read operation the essentials are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description names the resource and clarifies that it reads a specific plugin manifest, implying pluginId is the plugin identifier and workspaceId scopes the workspace. It does not, however, provide detailed meaning or format for either parameter, such as where to find workspaceId or pluginId. The baseline of 3 applies as the description adds limited meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Lies' (reads) with a specific resource 'Erweiterung' (plugin) and specifies exactly what is read: one plugin manifest, granted permission set, and capability registrations (empty when disabled or incompatible). This clearly distinguishes it from siblings like list_plugins, install_plugin, enable_plugin, disable_plugin, and search_plugin_registry.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies what the tool does but does not explicitly say when to use this over alternatives such as list_plugins or get_plugin_registry_entry. Its scope is implied by naming the resource and the details it returns, but there is no explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_plugin_registry_entryB
Read-only

Lies einen Verzeichnis-Eintrag (US-G02.5): resolve one registry reference to its full entry (its requested scopes drive the install-review dialog). needs_registry when no registry is configured, registry_unreachable when a configured one does not respond (P9).

NameRequiredDescriptionDefault
registryRefYes
workspaceIdYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds specific error conditions (needs_registry, registry_unreachable) which is useful behavioral context. It does not contradict the annotation and provides additional detail beyond the basic read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately concise but includes extraneous elements like 'US-G02.5' and 'P9' which are not self-explanatory and may confuse the agent. The core information is present but could be streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 0% parameter coverage, the description is incomplete. It does not describe the return value (the full entry structure) or clarify the meaning of the parameters. The error conditions are helpful but do not compensate for the lack of parameter and return value documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the parameters. It mentions 'registry reference' and 'workspaceId' but does not describe their meaning, format, or constraints. The description refers to a 'registry reference' without clarifying what that is, leaving the agent to infer from context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the core action: 'resolve one registry reference to its full entry' and mentions that requested scopes drive the install-review dialog. It is specific enough to distinguish from a search tool, though it does not name the sibling directly. The German opening adds context but is not strictly necessary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for resolving a single reference, and mentions error conditions (needs_registry, registry_unreachable) but does not explicitly state when to use this tool versus alternatives like search_plugin_registry. No when-not-to-use guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recurring_scheduleA
Read-only

Read one schedule in full: its snapshotted template, cadence and bounds, plus the run log (every generated period with its outcome and, where the document still exists, its number and status), which is where a generated invoice states its provenance.

NameRequiredDescriptionDefault
scheduleIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds meaningful behavioral context beyond that: it reveals that the schedule stores a 'snapshotted template' (not a live reference), that the run log includes every generated period with its outcome, and that document provenance is only included 'where the document still exists' – a conditional behavior an agent needs to know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, dense sentence that front-loads the core action ('Read one schedule in full') and then packs the return contents in a well-structured list. Every clause earns its place: the snapshotted template, cadence, bounds, run log, and the provenance condition. No filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only getter with two simple string parameters and no output schema, the description covers the essential return contents and the key conditional (document existence). It doesn't describe pagination or the shape of the run log entries, but for a single-schedule read with no output schema, the description is sufficiently complete for an agent to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining what the parameters mean. It does not explicitly explain workspaceId or scheduleId, but the tool name and the phrase 'one schedule' make it clear that scheduleId identifies the schedule and workspaceId scopes it. The description adds no format or constraint details beyond what the schema already shows (both are plain strings, both required). Baseline 3 is appropriate because the schema is minimal and the description doesn't compensate with extra parameter-level guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and a specific resource ('one schedule in full'), and enumerates exactly what is returned: the snapshotted template, cadence and bounds, and the run log with per-period outcomes and document provenance. This clearly distinguishes it from sibling tools like list_recurring_schedules (which lists schedules) and run_due_recurring (which executes them).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the read-only nature and full-detail scope explicit, which tells an agent when to use this tool: when it needs the complete schedule plus run log rather than a list entry. It does not explicitly name alternatives or state when not to use it, but the contrast with list_recurring_schedules is strongly implied by 'one schedule in full' and the run-log detail.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sync_contractA
Read-only

Describe the till-sync publish contract for this workspace: the contract majors this build speaks, whether publishing is on, the current stream head and epoch, and the §I sole-writer / one-file-per-tenant posture. Pass contractVersion to negotiate: an unknown major is refused (unsupported_contract) rather than best-effort parsed.

NameRequiredDescriptionDefault
workspaceIdYes
contractVersionNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds non-obvious behavioral context: an unknown major produces unsupported_contract rather than being leniently parsed. This is genuinely useful beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the return contract contents and ending with the negotiation caveat. No filler, no repetition of schema or annotation data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description does a decent job naming the high-level return fields and the main failure mode. Still, it leaves gaps: workspaceId semantics, contractVersion format, and representation of stream head/epoch are unspecified, so an agent may still need to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. contractVersion gets real semantics: it negotiates and can be refused. However, workspaceId is not described at all, and the expected format for contractVersion is not specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Describe') and a specific resource ('till-sync publish contract for this workspace'), and enumerates the fields returned: contract majors, publishing status, stream head/epoch, and sole-writer posture. It does not explicitly name sibling sync tools, so differentiation is clear by content but not by explicit contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives one usage instruction: pass contractVersion to negotiate, and warns that unknown majors are refused rather than best-effort parsed. However, it does not say when to choose this tool over sibling tools like sync_stream_status, sync_stream_read, or sync_publish_enable/disable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vendor_billA
Read-only

Read one vendor bill: its figures and stored input-VAT trace, the journal entry it posted (and the reversal when it has one), its derived settlement status and open amount, and every payment that touched it.

NameRequiredDescriptionDefault
workspaceIdYes
vendorBillIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description does not contradict this. It adds meaningful behavioral detail beyond the annotation by specifying exactly what data is returned (input-VAT trace, journal entry, reversal, settlement status, open amount, payments), which helps the agent predict the output without an 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is information-dense but not overly verbose. It leads with the core action and then enumerates the specific data items, which is efficient and well-structured. No fluff or redundancy is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema, the description compensates by listing all returned elements, making the tool's output predictable. It covers the essential aspects of a single-entity read operation. Minor gaps include no mention of error conditions or pagination, but these are not critical for a read of one bill by ID, and the annotations cover the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of clarifying parameters. Although it doesn't explicitly describe workspaceId or vendorBillId, the phrase 'one vendor bill' makes it clear that vendorBillId identifies the target bill, and workspaceId follows the common pattern seen in sibling tools. The description provides minimal added meaning beyond the schema's field names, but is sufficient given the tool's straightforward nature.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Read) and the resource (one vendor bill), then enumerates the specific data returned (figures, VAT trace, journal entry, reversal, settlement status, open amount, payments). This distinguishes it from related tools like list_vendor_bills and get_document, leaving no ambiguity about its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving a single vendor bill's full detail, but it does not explicitly mention when to prefer this over alternatives such as list_vendor_bills (for multiple bills) or get_document (for general documents). No exclusions or alternative conditions are provided, 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.

get_workspaceA
Read-only

Read one workspace roster entry for the switcher header: name, legal form, base currency, fiscal year start, archived flag and creation date. Lighter than get_company_profile, which returns the full fiscal and creditor configuration.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares this as a read operation, and the description adds value by listing the returned fields and comparing it to get_company_profile. No contradiction; it provides context beyond the annotation without over-explaining.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and field list, then a brief comparison. No wasted words; every clause contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read with one parameter and no output schema, the description covers the returned fields and the distinction from get_company_profile. It does not mention error conditions or edge cases, but these are not critical for a read-only roster lookup, and the annotation covers the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description should compensate by explaining the workspaceId parameter, but it only uses the parameter name without any guidance on format, source, or validation. The name is self-explanatory, but no additional semantic context is provided, leaving the agent to infer its meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Read'), the resource ('workspace roster entry'), and enumerates the specific fields returned (name, legal form, base currency, fiscal year start, archived flag, creation date). It also distinguishes itself from get_company_profile, making its scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names get_company_profile as an alternative and explains that this tool is lighter, implying when to use it (roster-level info) vs. the heavier alternative. However, it does not mention other relevant siblings like list_workspaces for listing multiple entries, so the guidance is good but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gl_archive_account_historyA
Read-only

Aggregate one account's archived history per month, quarter or year (debit, credit, running balance), by live target account id or by the source system's own account number. Aggregates only: at 300000 entries the archive answers with periods, not rows.

NameRequiredDescriptionDefault
groupByNo
accountIdNo
workspaceIdYes
sourceAccountNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, so the read-only nature is covered. The description adds useful behavioral context beyond that: it warns that this tool is aggregate-only and that at 300000 entries the archive responds with periods rather than rows, which is non-obvious and relevant for callers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with the core behavior stated in the first sentence. The second sentence is slightly cryptic but still informative, warning about the aggregate-only behavior at scale.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives enough context for selection and basic invocation, including grouping granularity, identifier modes, and output concepts like debit, credit, running balance, and periods. But it omits parameter-wise specifics such as required/optional dependencies, exact groupBy values, and any behavior when multiple identifiers are provided. With no output schema, those gaps matter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden for parameters. It does clarify that accountId is the 'live target account id' and sourceAccount is the 'source system's own account number', and that groupBy relates to month/quarter/year granularity. However, workspaceId is not mentioned and no exact allowed values or precedence rules are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Aggregate'), the resource ('one account's archived history'), the grouping options ('per month, quarter or year'), and the output fields ('debit, credit, running balance'). It also distinguishes itself from row-level archive queries by emphasizing 'Aggregates only'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when aggregate archived history for a single account is needed, rather than row-level details. However, it never explicitly names alternatives such as gl_archive_query or gl_archive_periods, nor does it state when those should be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gl_archive_importA
Idempotent

Import the prior system's journal into the read-only GL archive (GeBüV Art. 10: readable across the system change). Writes gl_archive rows ONLY, posts NOTHING to the live ledger, and never mixes with it: archive rows are outside the TILL Belegkette and say so. Unmapped accounts import with a null target; unbalanced source entries import flagged, never corrected. Idempotent: a re-run replaces the step's rows wholesale. CONSEQUENCE: Imports your old system's journal into the read-only archive; nothing is posted to your live books. Running the step again replaces its archive rows.

NameRequiredDescriptionDefault
planIdYes
stepIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it discloses that writes are confined to gl_archive rows, that rows sit outside the TILL Belegkette, that unmapped accounts import with a null target, that unbalanced entries are flagged but never corrected, and that a re-run wholesale replaces the step's rows. That is exactly the behavioral context an agent needs before invoking a migration write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core sentences are dense and front-loaded with the key constraints, but the trailing 'CONSEQUENCE:' block restates the first two sentences almost verbatim and adds nothing, which is dead weight in an otherwise tight definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is strong on isolation and idempotency but there is no output schema, no explanation of what is returned (row counts, unmapped-account report, errors), and no guidance on the plan/step pipeline that the four required parameters imply. For a migration mutation tool, that leaves real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and all four parameters (workspaceId, planId, stepId, idempotencyKey) are required but undocumented. The description only hints at step scoping via 'the step's rows'; it never explains what planId or stepId reference, nor how the idempotencyKey relates to the wholesale-replace semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Import the prior system's journal into the read-only GL archive') and immediately scopes it away from the live ledger, which distinguishes it from siblings such as import_opening_balances, post_entry, and gl_archive_query. An agent can tell exactly what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear the condition for use (importing a prior system's journal during system change) and an implicit when-not (nothing is posted to live books, so live posting goes elsewhere). It does not name a specific alternative tool for live-ledger posting or state prerequisites, so it falls short of the explicit-alternatives bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gl_archive_periodsB
Read-only

List the archived periods with their entry counts, their OR 958f retention dates, and any purge records (completed purges AND refusals on retention grounds, each citing the statute).

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the safe read-only nature. The description adds specifics about the returned data (entry counts, retention dates, purge records) but does not disclose any other behavioral traits like pagination, ordering, or permission requirements. This adds some value but not substantial beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the main action and lists the key data elements without unnecessary fluff. It is appropriately sized for a straightforward list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description partially explains the return content (entry counts, retention dates, purge records) but does not specify structure, ordering, or pagination. The workspaceId parameter is not explained, and no error or edge cases are mentioned. For a simple list tool with one parameter, this is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the single parameter workspaceId. However, the description does not mention the parameter or its meaning. The parameter name is self-explanatory to some degree, but the description adds no clarification, which is a significant gap given the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a clear resource ('archived periods'), and details the exact data returned (entry counts, OR 958f retention dates, and purge records). This distinguishes it from sibling tools like gl_archive_query and gl_archive_preview, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as gl_archive_query or gl_archive_preview. There is no mention of context, prerequisites, or exclusions, 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.

gl_archive_previewA
Read-only

Preview a gl_history step's archive import without writing anything: per-period entry and line counts, per-account totals, the unmapped source accounts (they would import flagged, never refused) and the internally unbalanced entry count.

NameRequiredDescriptionDefault
planIdYes
stepIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation already declares readOnlyHint=true, and the description reinforces this with 'without writing anything'. It adds valuable behavioral detail beyond the annotation: unmapped source accounts 'would import flagged, never refused' and it reports the internally unbalanced entry count.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence that immediately establishes the tool's purpose and non-writing nature. The subsequent list is dense but every item adds relevant information; there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly bears the burden of describing what the preview returns; it names per-period counts, per-account totals, unmapped source accounts, and unbalanced entry count. Parameter semantics remain unexplained, but that gap is separate and was already accounted for.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description does not compensate by explaining workspaceId, planId, or stepId. The parameter names are somewhat self-explanatory, but the description adds no meaning beyond what the bare schema already exposes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Preview'), a specific resource ('a gl_history step's archive import'), and explicitly says it writes nothing. It also enumerates the concrete outputs, so an agent can clearly distinguish it from mutating/import/query tools like gl_archive_import and gl_archive_query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is a non-writing preview of an archive import, which implies it should be used before committing an import. It does not explicitly name alternatives or state when-not-to-use it, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gl_archive_purgeA
DestructiveIdempotent

Purge archived periods whose OR 958f ten-year retention has expired, with a recorded reason. Deletes ARCHIVE data only (structurally incapable of touching a live journal row), keeps a purge record where the periods were, and refuses inside the retention window with the date, recording the refusal: that record is the answer a data subject receives. Requires confirmed:true. CONSEQUENCE: Deletes archived periods whose ten-year retention has run out, with your reason; a purge record stays in their place. The purged data cannot be restored.

NameRequiredDescriptionDefault
reasonYes
periodToYes
confirmedNo
periodFromYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond destructiveHint/idempotentHint by disclosing the structural guarantee that live journal rows cannot be touched, that a purge record is left in place, that refusal is itself recorded as a data-subject response, and that purged data is unrecoverable. Contradicts nothing 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and retention condition, and the CONSEQUENCE line is useful for a destructive op. It is somewhat repetitive, restating the deletion/retention facts a second time.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies enough behavioral context (record kept, refusal recorded, irreversibility) for safe invocation. The remaining gap is the date-range and idempotency parameter formats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning; it explains reason and confirmed:true but leaves periodFrom/periodTo formats, workspaceId, and idempotencyKey undocumented. Partial compensation for a 6-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (purge archived periods) with the governing condition (OR 958f ten-year retention expired) and explicitly bounds scope to ARCHIVE data only. Among siblings like gl_archive_query, gl_archive_periods, and gl_archive_import, this is unmistakably the destructive one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditions for use (retention expired, confirmed:true required) and for refusal (inside the retention window). It does not name a sibling alternative for the non-destructive cases, but the exclusion logic is spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gl_archive_queryA
Read-only

Query the prior-system archive by account (target or source), period, text and amount range, paginated. Returns ARCHIVE rows only, labelled with their provenance (source system, covered range): a live journal row can never appear here, and an archive row never appears in list_journal. savedViewId applies a saved view (G00).

NameRequiredDescriptionDefault
toNo
fromNo
pageNo
textNo
accountNo
savedViewIdNo
workspaceIdYes
balancedOnlyNo
sourceAccountNo
amountMaxMinorNo
amountMinMinorNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the readOnlyHint annotation: it returns only ARCHIVE rows, labels them with provenance (source system, covered range), and applies saved views. It also clarifies the mutual exclusivity with list_journal. These details are not present in the annotation and help the agent understand the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core query criteria and pagination, followed by behavioral context and saved view mention. Every sentence adds value, with no fluff or redundancy. It is efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 11 parameters, no output schema, and no parameter descriptions, the description covers the main filtering dimensions and clarifies the archive-vs-live distinction. It does not mention all parameters (balancedOnly, workspaceId), nor does it describe the return format in detail (though provenance is mentioned). However, it is sufficiently complete for an agent to understand how to invoke the tool for typical archive queries.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by listing the key filter dimensions: account (target or source), period (likely from/to), text, amount range (amountMin/Max), pagination (page), and savedViewId. It does not explain every parameter (e.g., balancedOnly, workspaceId), but it provides enough semantic meaning for the main filtering capabilities. The description partially bridges the schema's lack of parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (query), the resource (prior-system archive), and the filtering criteria (account, period, text, amount range). It explicitly contrasts with list_journal, stating that archive rows never appear there, which differentiates the tool from that sibling. The 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this tool for archive rows, and use list_journal for live journal rows, by stating the mutual exclusivity. It also mentions savedViewId usage (G00). However, it does not explicitly name list_journal as the alternative tool to use for live rows, nor does it provide conditions for other archive-related siblings like gl_archive_preview or gl_archive_import. The guidance is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_accept_linesA
Idempotent

Release HELD lines (inspectionStatus pending) into stock after a quality check: exactly what the post would have done for them, at the receipt own receivedAt and under the same live open-quantity and period-lock guards. Writes the J02 movement, the trail row and the po_line.received_qty increment per accepted line, and records an append-only acceptance event with the actor. A line that is not pending is invalid_transition. CONSEQUENCE: Releases the held lines into stock after their check, at the receipt's date. Until a bill is matched, you can reverse the receipt, and both stay on record.

NameRequiredDescriptionDefault
grIdYes
reasonNo
lineIdsYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say idempotent=true and destructive=false; the description goes well beyond that, disclosing the exact side effects (J02 movement, trail row, po_line.received_qty increment, append-only acceptance event with actor) and the guard conditions (live open-quantity and period-lock checks, receipt receivedAt). It also describes reversibility and record retention, which is exactly the mutation context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and scope in the first sentence, followed by a clearly labeled CONSEQUENCE. The first sentence is long and multi-clausal, but nearly every clause adds behavioral or safety context rather than repeating the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-mutating, no-output-schema tool, it covers the important ground: preconditions (pending status, period lock), effects, and reversal. The remaining gap is parameter meaning (especially 'reason' and the idempotency key) that no structured field documents, so an agent must guess their semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description must compensate and largely doesn't: grId, lineIds, workspaceId, reason, and idempotencyKey are never explained. It only indirectly hints at lineIds ('per accepted line'); the purpose of 'reason' and the idempotency key contract are undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — releasing HELD (inspectionStatus pending) lines into stock after a quality check — and directly frames the contrast with the posting path ('exactly what the post would have done for them'). This lets an agent separate it from goods_receipt_post, goods_receipt_reject_lines, and goods_receipt_reverse without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear selection context: only lines in pending inspection status, and 'a line that is not pending is invalid_transition' tells the agent when the call is invalid. It also notes the reversal window ('until a bill is matched, you can reverse the receipt'). It does not explicitly name the alternative tool (reject_lines) to use when the quality check fails, so it stops short of a full when/when-not/alternatives statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_cancelA
Idempotent

Abandon a DRAFT goods receipt (nothing physical has happened yet, so nothing has to be unwound). A posted receipt cannot be cancelled: use goods_receipt_reverse, which leaves the audit trail intact. Cancelling anything other than a draft is invalid_transition.

NameRequiredDescriptionDefault
grIdYes
reasonNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotency and non-destructiveness, and the description adds meaningful behavioral context: only drafts are eligible, nothing physical has happened, and non-draft attempts fail with invalid_transition. It does not describe what happens to draft lines or how the optional reason is handled, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences, front-loaded with the draft-only constraint and followed by the alternative and error case. Every sentence carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It covers the state transition and routing to the correct sibling tool, which is the core context for a cancellation operation. However, with no output schema and no parameter descriptions, an agent still lacks detail on required inputs and what the cancellation returns or leaves behind.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all four parameters, and the description says nothing about workspaceId, grId, idempotencyKey, or reason. Only the target receipt's required draft state is implied, leaving the actual parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action (abandon/cancel) and target (DRAFT goods receipt), and explicitly distinguishes it from goods_receipt_reverse for posted receipts. An agent can immediately tell what this tool does and what it does not do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the exact condition for use (DRAFT goods receipt), the condition against use (posted receipt), the alternative tool (goods_receipt_reverse), and the error behavior for invalid transitions. This is explicit when/when-not guidance with a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_createA
Idempotent

AGENT-FIRST. Open a DRAFT Wareneingang against an open purchase order, the first-class document that records what physically arrived. receivedAt (ISO date) is THE date: every stock movement this receipt ever writes is stamped with it and the period lock is checked against it here and again at post, so there is no way to back-charge a sealed year by moving a posting date. defaultLocationId is optional (a single-location workspace resolves the default warehouse location automatically). Nothing physical happens yet: no stock movement, no purchase-order quantity change. Refused when the order is not sent or received (invalid_transition), when no line has open quantity (nothing_open), or when receivedAt falls in a locked period (period_locked). Idempotent under idempotencyKey.

NameRequiredDescriptionDefault
noteNo
poIdYes
expectedAtNo
receivedAtYes
workspaceIdYes
idempotencyKeyYes
defaultLocationIdNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it discloses that receivedAt governs all downstream stock movement stamps and is re-checked against period locks at post, that no stock or PO quantity changes occur, and enumerates the exact refusal conditions (invalid_transition, nothing_open, period_locked). That is unusually rich behavioral context for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then constraints and failure modes in a tight sequence; nearly every clause carries information. Minor redundancy in the 'no way to back-charge a sealed year' elaboration and the 'AGENT-FIRST' prefix, which is stylistic rather than substantive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter draft-creation mutation with no output schema, the description covers preconditions, side effects, failure codes, and idempotency well. It does not indicate what the call returns (e.g. the receipt id needed for the subsequent upsert_lines/post calls), which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning; it meaningfully explains receivedAt (the authoritative stamping date and lock check), defaultLocationId (optional, auto-resolved in single-location workspaces), poId (must be an open/sent PO), and idempotencyKey. However note, expectedAt, and workspaceId receive no explanation, leaving roughly half of the 7 params undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: opens a DRAFT Wareneingang (goods receipt) against an open purchase order, and characterizes it as the first-class document recording physical arrival. This is clearly distinguishable from goods_receipt_post, goods_receipt_upsert_lines, and receipt_record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames when this applies (opening a draft against an open PO) and makes the boundary with posting clear via 'Nothing physical happens yet: no stock movement, no purchase-order quantity change.' It never names the follow-up sibling (goods_receipt_post) or the preview tool, so the alternative is inferable but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_getA
Read-only

One goods receipt with its header (including hasOverReceipt), its lines (quantity, unit-cost snapshot, location, lot/serial, inspection status, the over-delivered quantity, the stock movement each recognised line minted, and the reversal movement when it has been reversed) and its append-only decision trail. A foreign or unknown id is not_found, never cross-tenant data.

NameRequiredDescriptionDefault
grIdYes
workspaceIdYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, and the description adds meaningful behavioral context: exact response contents, not_found for foreign/unknown ids, no cross-tenant leakage, reversal movement handling, and an append-only decision trail. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with the primary resource, but it is one long parenthetical-heavy sentence that requires careful parsing. Every clause adds information, though better structuring would improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-resource getter with no output schema, the description is remarkably complete: it covers header fields, line-level fields, reversal behavior, decision trail, error semantics, and tenant isolation. Nothing essential for calling this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only indirectly clarifies params via 'foreign or unknown id' and 'never cross-tenant data'; it never explicitly names grId or workspaceId, but the implied mapping is reasonably inferable for a simple get-by-id tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-like resource ('One goods receipt') and enumerates what is returned: header, lines, decision trail. The phrase 'One goods receipt' and the id/not_found semantics distinguish it from sibling list/preview/cancel tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to choose this tool versus goods_receipt_list, goods_receipt_preview, or goods_receipt_get_config. The description implies a single-receipt fetch by id, but it never states an exclusion or names alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_get_configA
Read-only

Read the workspace over-receipt posture: allowOverReceipt (default true, meaning an over-delivery is accepted and flagged rather than refused) and overReceiptPct (null means no cap; a number is an integer percentage of the ordered quantity above which a receipt is refused instead of flagged).

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read.' It adds meaningful behavioral context beyond the annotation by explaining the two returned values: allowOverReceipt's default and effect, and overReceiptPct's null/number semantics. This is valuable because there is no output schema to document these fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence with no filler and the main verb front-loaded. The parenthetical explanations are necessary to explain the config semantics, though the sentence is slightly heavy with nested clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-config tool with one parameter and no output schema, the description covers the key return semantics and defaults, which is the main thing an agent needs to interpret the result. It is not exhaustive about error cases or response shape, but it is sufficient for correct invocation and basic interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explicitly define workspaceId. However, 'workspace' in the description maps clearly to the workspaceId parameter, and the single required string parameter is self-explanatory in this context. The description does not add details about format or constraints, so it only partially compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: "Read the workspace over-receipt posture." It also distinguishes itself from the sibling goods_receipt_set_config by framing this as a read operation, so an agent can tell the getter apart from the setter without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context that this is the read-only counterpart to configuration, and it is naturally used when inspecting over-receipt settings. It does not explicitly name alternatives or exclusions, but the verb 'Read' and the mention of workspace posture make the intended use obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_lines_for_matchA
Read-only

The receipt lines a three-way match may still bill for the given purchase-order lines: only recognised lines on a posted, non-reversed receipt whose billed quantity is below the received quantity. Each row carries the stable receipt-line id (the target I03 allocates landed cost to and I04 marks billed), the receipt number and date, the unit-cost snapshot and the open (unbilled) quantity.

NameRequiredDescriptionDefault
poLineIdsYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, so the agent knows this is a safe read. The description adds valuable behavioral context: it filters to posted, non-reversed receipts, only recognised lines, and open (unbilled) quantity. It also discloses that each row carries the stable receipt-line id, receipt number/date, unit-cost snapshot, and open quantity. This goes beyond the annotation and helps the agent understand what the result represents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that front-loads the core purpose and then adds precise filtering criteria and row contents. No wasted words; every clause adds meaning. It is long but information-dense, which is appropriate for a complex domain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (three-way match domain, multiple filtering conditions), the description is quite complete. It explains the row contents and the selection criteria. It doesn't mention pagination, sorting, or whether the result is grouped by PO line, but with no output schema and a read-only annotation, the description covers the essential semantics. A small gap: it doesn't state whether the result is per PO line or per receipt line, though 'each row' implies per receipt line.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the meaning of the result rows but does not explicitly explain the two parameters (workspaceId, poLineIds). However, the description's phrase 'for the given purchase-order lines' clearly implies poLineIds is the input, and workspaceId is a standard scoping parameter. This is adequate but not fully explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('list') and resource ('receipt lines for three-way match'), and precisely defines the scope: only recognised lines on a posted, non-reversed receipt whose billed quantity is below the received quantity. It also names the target I03/I04, which distinguishes it from sibling tools like match_three_way_list or goods_receipt_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use this tool: when you need the receipt lines that a three-way match may still bill for given purchase-order lines. It doesn't explicitly state when not to use it or name alternatives, but the precise scoping and the mention of I03/I04 targets provide strong context. A small gap: no explicit exclusion like 'use match_three_way_list for existing matches'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_listA
Read-only

List goods receipts with filters: status (one value or an array of draft | posted | reversed | cancelled), poId, supplierContactId, a receivedAt date range (fromDate / toDate), hasOverReceipt (the exception cut: only the deliveries that came in over what was ordered) and a free-text search q over the number and the note. Each row carries the order number, the supplier name, the line count, the receipt value in Rappen and the over-delivered quantity. Accepts a savedViewId (G00 saved-view seam). Newest received date first.

NameRequiredDescriptionDefault
qNo
poIdNo
statusNo
toDateNo
fromDateNo
savedViewIdNo
workspaceIdYes
hasOverReceiptNo
supplierContactIdNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool with readOnlyHint=true, so the description's main contribution is the output row structure (order number, supplier, line count, value in Rappen, over-delivered quantity) and the sort order (newest first). It adds useful behavior info without contradicting the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences cover the tool's purpose, all key filters, output row content, and sort order without redundancy. The most important information is front-loaded, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with nine parameters and no output schema, the description provides solid coverage of filters, output fields, and sorting. The only notable omission is the required workspaceId, though it is likely standard across workspace-scoped tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: it explains status values, poId, supplierContactId, date range, hasOverReceipt, q, and savedViewId. It omits workspaceId (the only required parameter), but the rest are well covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List goods receipts' – a specific verb and resource – then enumerates the actual filters, making it unmistakably clear what the tool does. It differentiates from siblings like goods_receipt_cancel and goods_receipt_create by being the listing variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving goods receipts, but it never explicitly states when to choose this over other list tools or when not to use it. No alternative tools or exclusion criteria are mentioned, so the agent is left to 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.

goods_receipt_postA
Idempotent

Post the goods receipt: in ONE transaction re-validate every line against the LIVE purchase order, write the J02 stock movements (movementType receipt, the order line CHF base cost as the snapshot, sourceDocumentType goods_receipt), append the shared received-quantity trail, raise po_line.received_qty, and freeze the document. There is deliberately NO date parameter: the movements carry the receipt own receivedAt and the period lock is asserted against that same date. An over-delivery is ACCEPTED at its full quantity by default and RECORDED as an exception (the excess lands on the line as overReceiptQty, the header carries hasOverReceipt, and an append-only over_receipt event names who took how many extra units); it is never silently clamped. A workspace that wants a hard ceiling gets one: with allowOverReceipt false anything above the open quantity is refused with qty_exceeds_open, and with an overReceiptPct set anything above the tolerance is refused with over_receipt, and above the ceiling the WHOLE receipt rolls back. A line whose item is not stock-tracked advances the ordered quantity and mints no movement. Any guard trip rolls the WHOLE receipt back: no movement, no trail row, no quantity change. A replay under the same idempotencyKey returns the posted document and writes nothing; a second post under a different key is invalid_transition. CONSEQUENCE: Completes the goods receipt: the goods enter stock and the order counts them as received; nothing goes to the ledger. Until a bill is matched to it, you can reverse it, and both stay on record.

NameRequiredDescriptionDefault
grIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (idempotentHint=true, destructiveHint=false), the description discloses atomic transaction behavior, full rollback on any guard trip, over-receipt exception handling, stock-tracked versus non-stock-tracked line behavior, idempotency replay semantics, and the fact that nothing goes to the ledger until bill matching.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and transaction guarantees, and the dense detail is mostly justified for a complex posting operation. It is still quite long and could be tightened, but it is not padded with irrelevant material.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema, the description covers the critical call-time behavior: overwrite/rollback rules, over-receipt configuration, idempotency, and reversibility before bill matching. It does not describe the normal success response shape or any permission/auth prerequisites, which leaves a modest completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains idempotencyKey well and even explains the deliberate absence of a date parameter, but it does not define grId or workspaceId beyond their names and string types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "Post the goods receipt." It then enumerates the exact effects—validate lines against the live PO, write J02 stock movements, append the received-quantity trail, raise received_qty, and freeze the document—so it is clearly distinguishable from receipt creation, line acceptance, reversal, or cancellation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong operational context, such as over-receipt behavior, idempotent replay, and invalid_transition on a second post under a different key. However, it never explicitly routes the agent among the many goods receipt siblings, e.g., when to use this after goods_receipt_create/upsert_lines/accept_lines versus goods_receipt_reverse or goods_receipt_cancel.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_previewA
Read-only

PURE impact preview of a draft goods receipt: per line the ordered, already-received, open and ceiling quantities (ceiling null means over-delivery is uncapped), the proposed and resulting received quantity, the unit-cost snapshot, whether the line moves stock, the over-delivered quantity it would record (overReceipt / overReceiptQty), and the exact rejection codes a post would refuse with: per line the quantity, reference, location and J01 lot/serial refusals (qty_exceeds_open, over_receipt, invalid_qty for a serial line of more than one unit, invalid_reference, location_required, lot_required, serial_required, lot_item_mismatch, serial_item_mismatch), and on the top-level document issues array the period_locked one, which is not a property of any single line. An over-delivery WITHIN the policy is reported but is NOT an issue, because it posts. Plus the total value in Rappen and a postable flag that is false when either array is non-empty. Writes nothing and is safe to call repeatedly.

NameRequiredDescriptionDefault
grIdYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the readOnlyHint annotation by detailing exact outputs, including rejection codes, edge cases (over-delivery within policy is not an issue), and explicitly states 'Writes nothing and is safe to call repeatedly.' This provides comprehensive behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense paragraph with many details, making it hard to parse. It is thorough but not concise or well-structured, lacking bullet points or clear separation of concerns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description exhaustively covers the output and edge cases, which is critical given the lack of an output schema. However, it omits parameter explanations, which reduces completeness for a tool with two required inputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, and the description never mentions workspaceId or grId, leaving their purpose unexplained. For a tool with only two parameters, this is a significant gap that the description does not compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it is a 'PURE impact preview of a draft goods receipt' and enumerates the exact data returned, including quantities, rejection codes, and postable flag. This clearly identifies the tool's function and distinguishes it from mutation siblings like goods_receipt_post or goods_receipt_reject_lines.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for previewing before posting by mentioning the postable flag and rejection codes, but it does not explicitly state when to use this tool instead of alternatives. No when/when-not guidance is provided, though the read-only nature is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_reject_linesA
Idempotent

Refuse HELD lines after a quality check. No stock movement and no order quantity: a rejected quantity never entered the warehouse, so the ordered quantity simply stays open and can be received again on a later delivery. reason is required and is recorded with the actor on an append-only rejection event. A line that is not pending is invalid_transition.

NameRequiredDescriptionDefault
grIdYes
reasonYes
lineIdsYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, it discloses the key business effects: no stock movement, no order-quantity reduction, the ordered quantity remains open for later receipt, and reason is recorded with the actor on an append-only rejection event. It also documents the invalid state transition for non-pending lines.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and dense with useful information, with no filler. Each sentence adds either business-effect clarification, audit behavior, or a state-transition rule.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and sparse annotations, the description covers the important business and audit consequences well. It still leaves parameter-level guidance thin, especially for idempotencyKey, but the operational semantics are largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for five required parameters, and the description explains only reason and, indirectly, the line-state precondition. It does not clarify workspaceId, grId, lineIds semantics, or idempotencyKey, so it does not compensate for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise operation: refusing HELD goods-receipt lines after a quality check. The verb 'refuse/reject' plus the line-state condition makes it clearly distinct from accepting lines or cancelling the receipt.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly frames when the tool applies: HELD lines after quality check, and it notes that non-pending lines fail with invalid_transition. It does not explicitly name the alternative accept/reverse/cancel tools, but the usage context is largely clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_reverseA
Idempotent

Storniere einen gebuchten Wareneingang: the ONE correction for a posted receipt. Nothing about the original document, its movements or its trail rows is edited or deleted. What is written is the compensation: a J02 return movement of equal magnitude and opposite sign per recognised line (same date, same source-document link, so the pair is findable together), a negative trail row so the received-quantity trail still sums to po_line.received_qty, the received_qty rollback, and the original marked reversed with who and when. Refused with line_already_billed when a three-way match has already billed a line, with period_locked when the receipt own period is sealed, and with insufficient_stock when the goods have since left the warehouse (in which case the honest correction is an inventory adjustment, not an un-receipt). reason is required. Idempotent under idempotencyKey. CONSEQUENCE: Reverses the goods receipt with opposite stock movements and lowers the received quantity; the original stays on record. Goods that did arrive are received again on a new goods receipt.

NameRequiredDescriptionDefault
grIdYes
reasonYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint=false; the description goes well beyond that, disclosing exactly what gets written (J02 return movement per recognised line, negative trail row, received_qty rollback, reversal marker with who/when), what stays untouched, and the refusal error codes. The CONSEQUENCE section makes the stock and quantity effects unambiguous.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then a refusal list and a labelled CONSEQUENCE block, so an agent can skim the essentials. It is dense and slightly long, and the German/English mix in the opening clause is a minor readability cost, but nearly every sentence carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a correction tool with no output schema, the description covers the full picture an agent needs: the compensation mechanics, the record-trail effects, the refusal modes, the required reason, idempotency, and what to do instead when stock has already left. Nothing material about calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It does clarify that reason is required and that idempotencyKey makes the call idempotent, but it says nothing about grId or workspaceId beyond what their names imply, leaving half the parameters unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Storniere einen gebuchten Wareneingang') and positions itself uniquely as 'the ONE correction for a posted receipt'. It also distinguishes the operation from adjacent concepts by explaining that nothing on the original is edited or deleted and that the correction is a compensating J02 movement, which separates it from goods_receipt_cancel and inventory_adjust.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names three refusal conditions (line_already_billed, period_locked, insufficient_stock) that tell the agent when not to call it, and routes the insufficient_stock case to the correct alternative ('the honest correction is an inventory adjustment, not an un-receipt'). This is explicit when/when-not guidance with a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_set_configA
DestructiveIdempotent

Set the workspace over-receipt posture. The DEFAULT (allowOverReceipt true, no overReceiptPct) accepts an over-delivery at its full quantity and flags it on the receipt, because blocking it at the loading dock does not un-deliver the goods, it only stops the ledger from saying they arrived. allowOverReceipt false is the hard ceiling: anything above the open order quantity is refused with qty_exceeds_open. OMIT overReceiptPct for no cap; set it (1..100, an integer percentage of the ORDERED quantity, rounded DOWN so a tolerance is never wider than granted) to refuse above that tolerance with over_receipt instead of flagging. Plain policy: posts no journal entry, moves no stock and never rewrites history, so changing it affects only what a future post will accept.

NameRequiredDescriptionDefault
workspaceIdYes
idempotencyKeyYes
overReceiptPctNo
allowOverReceiptYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond annotations: the specific error codes raised in each mode, the fact that the percentage is of the ORDERED quantity and rounded DOWN, and that the change posts no journal entry, moves no stock and is prospective-only ("affects only what a future post will accept"). That last clause sits in mild tension with destructiveHint=true, but is not a contradiction — the tool does mutate stored configuration; the description narrows the blast radius rather than denying it. Permission/auth requirements are the one missing item.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the imperative purpose, and the option semantics are stated in a usable order. Some prose is rhetorical rather than informational ("blocking it at the loading dock does not un-deliver the goods, it only stops the ledger from saying they arrived"), and the load-bearing "no journal entry, no stock movement, no history rewrite" assurance is buried in the final sentence instead of up front.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and minimal annotations, the description supplies the decision-critical content: what each configuration means, the exact refusal codes, and the absence of side effects. It is complete enough to call safely, with the gap being idempotency-key handling and how to read the policy back afterwards.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description carries allowOverReceipt and overReceiptPct thoroughly (range 1..100, integer, percentage of ordered qty, rounded down, omission meaning no cap). workspaceId and idempotencyKey — including what key reuse does — are never addressed, so half the parameters remain undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Set the workspace over-receipt posture" is a specific verb + resource, and the body immediately defines what the posture controls (whether an over-delivery is accepted, flagged, or refused). An agent can distinguish this from goods_receipt_get_config and from receipt-posting tools like goods_receipt_post without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete selection logic for the two settings: allowOverReceipt true = flag and accept, false = hard refusal with qty_exceeds_open, overReceiptPct set = refuse above tolerance with over_receipt, omitted = no cap. What it does not state is prerequisites (admin/role requirement) or a named alternative for reading the current policy back, so it falls short of explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

goods_receipt_upsert_linesA
DestructiveIdempotent

Add, change or remove lines on a DRAFT goods receipt. Each op is { op: add | change | remove, poLineId (add), lineId (change/remove), qty (> 0, whole units), locationId?, lotId?, serialId?, unitCostRappen? (defaults to the order line CHF base price), inspectionStatus? (none | pending), note? }. A line marked pending is HELD at post: no stock movement and no order quantity until goods_receipt_accept_lines releases it. accepted and rejected are decisions with an actor attached and are reachable only through the accept / reject verbs, never as a data field. Editing a posted receipt is refused (invalid_transition): the correction for a posted mistake is goods_receipt_reverse, never an edit.

NameRequiredDescriptionDefault
opsYes
grIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructive and idempotent annotations, the description discloses important state behavior: pending lines are held at post with no stock movement or order quantity, posted receipts cannot be edited, and accepted/rejected are actor-attached decisions rather than data fields. These details materially help the agent avoid incorrect mutations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well front-loaded: it states the operation, then the op schema, then the critical state rules and alternatives. Every sentence carries operational meaning, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation tool with no output schema and sparse annotations, the description covers the critical invocation and state-transition behavior very well. It is slightly incomplete on response/error shape and idempotencyKey usage, but those gaps are minor relative to the core guidance provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description compensates strongly for the complex ops parameter by defining each op type and its relevant fields, including qty constraints, optional location/lot/serial fields, unitCostRappen defaulting, and allowed inspectionStatus values. It does not explain workspaceId, grId, or idempotencyKey semantics, which keeps it below a full 5 for a tool with four required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a precise verb set (add, change, remove) and resource scope (lines on a DRAFT goods receipt). It clearly distinguishes this mutation tool from accept/reject and reversal workflows, so an agent can identify its role without inspecting siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states the tool works only on DRAFT goods receipts, that posted edits are refused with invalid_transition, and that corrections must use goods_receipt_reverse. It also names goods_receipt_accept_lines as the release path for pending lines and says accepted/rejected decisions are only reachable through accept/reject verbs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

go_productiveA
DestructiveIdempotent

Promote a verified Testmandant to real books, in place, with NO re-import: the workspace simply stops being a Testmandant (kind = live), every id and timestamp stable, the A03 audit chain continuous (OR Art. 957a). The least-reversible act in the product and irreversible: it re-runs the WHOLE Eröffnungsprüfung one final time and refuses unless every control passes and none diverges (check_not_clean), no row traces to a demo seed (sandbox_contains_demo_rows), the company profile is real (needs_company_profile), and no live workspace already holds the UID (live_workspace_exists). Only the plan whose books created the Testmandant promotes it: a copy of the books whose plan still points at the original's Testmandant is refused (testmandant_not_owned) and nothing is written. Requires promote_workspace AND commit_migration. confirmedName is a type-to-confirm against the company legal name, checked engine-side so the agent face cannot skip it; an agent caller is draft-staged until a human confirms. Promoting an already-live workspace is a no-op, never a double-promote. CONSEQUENCE: Turns the trial workspace into your real books, in place. This switch is final; a mistake found later is corrected with a correcting entry.

NameRequiredDescriptionDefault
planIdYes
workspaceIdYes
confirmedNameYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description strongly supplements the destructive and idempotent annotations by disclosing that this is the least-reversible act, that it is irreversible, that it re-runs the entire Eröffnungsprüfung, and that it refuses with named codes when controls fail. It also explains the human confirmation gate, draft staging for agent callers, and that promoting an already-live workspace is a safe no-op. This is unusually rich behavioral context for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the description is organized around behavior, refusals, permissions, and consequences. It is long, but the length is largely justified by the irreversible high-risk action and the number of refusal conditions. The final CONSEQUENCE paragraph repeats some earlier points, making it slightly less tight than it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, destructive nature, missing output schema, and undocumented parameters, the description covers the critical decision and safety context well: ownership, controls, permissions, confirmation, idempotency, and irreversibility. It could still say more about the success response and clarify all four parameters, but the major behavioral gaps are addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero parameter descriptions, so the description must carry parameter meaning. It explains confirmedName as a type-to-confirm against the legal company name and gives planId behavioral meaning by tying it to the plan that originally created the Testmandant. It does not explain workspaceId or idempotencyKey semantics, leaving two of four required parameters underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: promote a verified Testmandant workspace into real live books in place. It clearly distinguishes this action from testmandant creation, discarding, and migration preview by explaining that the workspace changes kind to live with stable IDs and audit chain. An agent can identify exactly what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage conditions are explicit: only a verified Testmandant should be promoted, the plan must own the Testmandant, all final controls must pass, and the caller needs promote_workspace and commit_migration. It also states refusal and no-op cases. However, it does not explicitly name sibling tools to use instead for previewing, discarding, or diffing a Testmandant, so it falls short of full when/when-not/alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hr_absence_cancelA
Idempotent

Cancel an absence by flipping its status to cancelled (append-only spirit: the row stays, it is never deleted). Requires hr.manage.

NameRequiredDescriptionDefault
absenceIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful context beyond the annotations: it explains that cancellation is append-only and the row is never deleted, clarifying the non-destructive nature despite the 'cancel' label, and it states the required permission (hr.manage). It does not document error cases or return behavior, but the annotations already cover idempotency and destructiveness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It communicates the core action, the non-destructive implementation detail, and the permission requirement efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple cancellation tool with no output schema and annotations covering idempotency and destructiveness, the description covers the key behavior and authorization requirement. The main gap is the lack of any parameter guidance, particularly for idempotencyKey and workspaceId, which the empty schema leaves fully unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for three required parameters (workspaceId, absenceId, idempotencyKey), and the description does not mention any of them. Only 'absenceId' is indirectly implied by the word 'absence', leaving workspace scoping and idempotency key semantics entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Cancel') and resource ('an absence'), so an agent can tell it is a cancellation tool distinct from hr_absence_record or hr_absence_list. It does not explicitly name the sibling or differentiate further, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (cancelling an existing absence), but does not state when not to use it, nor does it mention alternatives such as recording or listing absences. The 'Requires hr.manage' clause is a prerequisite, not usage guidance relative to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hr_absence_listA
Read-only

List absences, SELF-SCOPED: without hr.manage the caller receives only their own linked employees rows, because sick leave is health data (revDSG Art. 5 lit. c Ziff. 2). employeeId, from and to narrow within scope; they can never widen it to a colleagues records.

NameRequiredDescriptionDefault
toNo
fromNo
employeeIdNo
savedViewIdNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint=true, so the description adds meaningful behavioral context: role-based self-scoping, the legal privacy basis, and the guarantee that parameters cannot widen access to other employees' records.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences front-load the action and the most important behavioral constraint. The legal citation is relevant and not padding; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, permission boundary, and filter behavior well, but the five-parameter schema includes workspaceId (required) and savedViewId that receive no explanation, and there is no output schema or return-shape description. Adequate for simple listing but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It explains employeeId, from, and to as scope-narrowing filters, but it does not explain the required workspaceId or savedViewId, nor does it specify expected formats or value constraints. This is only partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List absences') and resource, and the 'SELF-SCOPED' qualifier immediately distinguishes it from other absence-related tools. The health-data and employee-rows explanation reinforces what kind of data this returns and who can see it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: callers without hr.manage see only their own linked employee's absences, and employeeId/from/to can only narrow results. It does not explicitly name alternative sibling tools, but the scope rule is enough to guide correct use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hr_absence_recordA
Idempotent

Record an absence (ArG Art. 46 record-keeping): kind is vacation|sick|other, plus from_date and to_date (YYYY-MM-DD). Requires hr.manage. An overlapping absence for the same employee is ACCEPTED with overlap:true in the result (a half-day sick during vacation), never merged. Sick leave is health data (revDSG Art. 5 lit. c Ziff. 2).

NameRequiredDescriptionDefault
kindYes
notesNo
toDateYes
fromDateYes
employeeIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint, and the description adds real context beyond them: the hr.manage authorization requirement, the fact that overlaps are ACCEPTED rather than rejected or merged, the resulting overlap:true flag, and the health-data sensitivity under revDSG. It stops short of describing full return contents or failure modes, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph, front-loaded with the action and the required fields, with the surprising overlap behavior and the privacy note placed after. The statutory citations are terse and add compliance value rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation with no output schema, the description covers permissions, the key edge case, enum values and date format. Gaps remain around idempotencyKey usage and the workspace/employee identifiers, but nothing an agent needs to avoid a wrong call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load; it does explain kind's three allowed values and the YYYY-MM-DD format for the dates. But workspaceId, employeeId, idempotencyKey and notes are entirely undocumented, and it uses from_date/to_date while the schema names them fromDate/toDate, a small mismatch.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Record an absence") and scopes it with the ArG Art. 46 record-keeping purpose, which separates it from hr_absence_list and hr_absence_cancel. It does not explicitly name those siblings, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies creation and supplies a hard prerequisite ("Requires hr.manage"), plus guidance on the overlapping-absence edge case. It never says when to use this versus hr_absence_cancel or hr_absence_list, leaving the create-vs-cancel-vs-query choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hr_employee_getA
Read-only

Read one employee. The AHV number is returned only when includeSensitive is true AND the caller holds hr.sensitive; otherwise it is masked (756-...) and ahvRestricted is true.

NameRequiredDescriptionDefault
employeeIdYes
workspaceIdYes
includeSensitiveNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint=true, and the description adds valuable conditional behavior details: AHV masking logic with includeSensitive flag and hr.sensitive permission, plus the ahvRestricted field. This goes beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, highly efficient: first states core purpose, second conveys the sensitive-data behavior. No fluff, information dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-one resource with no output schema and clear params, the description is nearly complete. It covers the main behavioral nuance (AHV masking) and the permission required. Missing return format/error conditions are minor for a simple read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains the effect of includeSensitive on the response (AHV masking) and the permission requirement. It does not elaborate on workspaceId or employeeId, but their meaning is clear from names and required status.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it reads one employee, distinguishing from hr_employee_list (list) and hr_employee_upsert (write). The conditional masking behavior is specific and descriptive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for reading a single employee but provides no explicit when-to-use guidance or comparison with hr_employee_list. It does not state alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hr_employee_listA
Read-only

List employees (the roster). AHV numbers are masked unless includeSensitive is true and the caller holds hr.sensitive. includeArchived includes ended/archived people.

NameRequiredDescriptionDefault
savedViewIdNo
workspaceIdYes
includeArchivedNo
includeSensitiveNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description adds meaningful behavioral detail: AHV numbers are masked unless includeSensitive is true AND the caller holds hr.sensitive; includeArchived includes ended/archived people. This tells the agent about permission requirements and data visibility that annotations alone don't convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences; first is a crisp definition, second packs the two key behavioral modifiers. No redundant words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list operation with readOnlyHint and no output schema, the description covers the core behavior and the sensitive/archived edge cases. It is somewhat incomplete regarding savedViewId semantics and does not mention pagination or response shape, but these are minor for a simple roster listing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, so the description carries the burden for parameter meaning. It explains includeSensitive (requires hr.sensitive for unmasked AHV) and includeArchived (includes ended/archived people), which is valuable. However, the required workspaceId and especially savedViewId are left unexplained, so an agent may not know what savedViewId controls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List employees (the roster)'. The parenthetical 'the roster' clarifies that this returns the full set of employees rather than a single employee, distinguishing it from sibling hr_employee_get and hr_employee_upsert.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies using this tool to read the employee roster, but it does not explicitly contrast with alternatives such as hr_employee_get for a single employee or hr_employee_upsert for changes, nor does it say when not to use it. It gives context via includeArchived/includeSensitive but no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hr_employee_upsertA
Idempotent

Add or edit an employee (Mitarbeitende): first/last name, employment_pct (integer 1-100), starts_on and optional ends_on, an optional linked contact (the counterparty a reimbursement pays), and an optional actor_ref (the member whose calls self-scope to this person). Requires hr.manage. ahv_nr is OPTIONAL and captured only for the external payroll hand-off (revDSG Art. 6 minimisation); writing it additionally requires hr.sensitive, and it is masked on every read that does not hold hr.sensitive. Pass employee.id to edit an existing row.

NameRequiredDescriptionDefault
employeeYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it discloses the hr.manage authorization gate, a second hr.sensitive gate for ahv_nr, and that ahv_nr is masked on any read lacking hr.sensitive. It even cites the minimisation rationale (revDSG Art. 6), which tells the agent why the field is optional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph that front-loads the action and field list, then layers permissions and masking at the end. Parentheticals each carry information (the contact definition, the actor_ref semantics, the minimisation reason) rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the risky parts of a create-or-update tool well: permissions, sensitive-field handling, and create-vs-edit dispatch. It omits what the call returns (no output schema exists) and does not describe idempotencyKey behavior despite a preset idempotentHint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the employee parameter is a free-form nested object, so the description must compensate, and it largely does: it names the key nested fields including types/range (employment_pct integer 1-100) and which are optional. It says nothing about workspaceId or idempotencyKey, which remain undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (add or edit) and resource (employee/Mitarbeitende), and immediately enumerates the fields it governs. An agent can distinguish it from hr_employee_get and hr_employee_list without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent that passing employee.id switches from create to edit, which is the key usage fork. It also names the required permission (hr.manage) and a conditional extra permission (hr.sensitive) for ahv_nr, though it does not name sibling alternatives like hr_employee_get for verification.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ignore_bank_lineA
DestructiveIdempotent

Take ONE open bank line out of the inbox without booking it, with a reason: booked_elsewhere | clearing_account | before_start | duplicate | other (note optional). standardId names the "Nicht buchen" Buchungsregel whose proposal (reason rule_ignore) the line follows: it must be a live bank rule with outcome ignore for the counterparty and direction (else rule_not_found, wrong_scope, wrong_outcome, rule_not_applicable), and it is kept on the decision so the next step of the rule is offered. Posts nothing and works in any period. Its money must reach the books elsewhere; the balance line shows whether it did. An imported credit leaves the QR queue with it. An already ignored line answers ok with alreadyIgnored. Undo with reopen_bank_line. CONSEQUENCE: Takes the bank line out of the inbox with your reason and books nothing. Its money still has to reach the books elsewhere; you can reopen the line at any time.

NameRequiredDescriptionDefault
noteNo
reasonYes
bankTxnIdYes
standardIdNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: discloses that nothing is posted, that it works in any period, that a re-ignore returns ok with alreadyIgnored (corroborating idempotentHint), that an imported credit leaves the QR queue, and the standardId failure modes (rule_not_found, wrong_scope, wrong_outcome, rule_not_applicable). Reversibility via reopen_bank_line is stated, which is the key nuance against destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core is front-loaded and dense with real information, but the trailing 'CONSEQUENCE:' block largely restates sentence one and the reopen note, and the standardId clause packs four error codes into one run-on sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema mutation tool with 6 params, it covers side effects, reversibility, idempotent re-call behavior and rule-resolution failures. What an agent still cannot infer is the success payload shape beyond ok/alreadyIgnored and any permission requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema declares no enums, yet the description supplies the full reason vocabulary (booked_elsewhere | clearing_account | before_start | duplicate | other) and a detailed contract for standardId including its required shape and error codes. workspaceId, bankTxnId and idempotencyKey are left implicit, keeping it short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Take ONE open bank line out of the inbox without booking it.' The 'without booking it' clause and the named undo sibling (reopen_bank_line) separate it cleanly from book_bank_line and review_bank_txn.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the operative precondition ('its money must reach the books elsewhere; the balance line shows whether it did') and names the reversal path (reopen_bank_line), plus the reason taxonomy that must be chosen. It stops short of explicitly contrasting with book_bank_line as the primary alternative, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

implementation_decision_recordB
Idempotent

Record one decision in the append-only implementation decision log (OR 957a Nachprüfbarkeit applied to the implementation itself): title, context and the decision. There is no update path. Gates on manage_implementation.

NameRequiredDescriptionDefault
titleYes
contextNo
decisionYes
projectIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false; the description adds important behavior beyond that: the log is append-only, there is no update path, and the operation is gated by manage_implementation. It does not explain duplicate handling or failure modes, but it materially improves transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core action and constraints. The parenthetical legal reference is somewhat opaque, but it does not add much length, and every sentence contributes behavior or scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with six parameters and no schema descriptions or output schema, the description covers purpose and key behavioral constraints but leaves parameter semantics incomplete. It is adequate for understanding the tool's role, not fully adequate for invoking it correctly without schema inspection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It mentions title, context, and decision, but omits any explanation of the required workspaceId, projectId, and idempotencyKey, leaving critical inputs undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: record one decision in the append-only implementation decision log. It also states the append-only semantics and the fields title/context/decision, making the operation identifiable. However, it does not explicitly distinguish this tool from sibling implementation tools such as implementation_signoff_record or implementation_task_set, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a permission prerequisite ('Gates on manage_implementation') and implies append-only usage by stating there is no update path. It does not explicitly say when to use this instead of related implementation or signoff tools, so guidance is inferred 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.

implementation_parallel_checkB
Idempotent

Compute TILL’s own figures for a period from the OWNING read models (A08 trial balance, A07 return per Ziffer, A16/A17 open items) and compare, per figure, to the declared figures: { kind, ref, declaredRappen, computedRappen, differenceRappen, status }. ZERO tolerance, no dial: a 0-Rappen difference passes, ANY nonzero fails. A figure with no declaration is not_asserted, never green. Re-running with changed evidence voids any bound tieout / parallel_run_close sign-off. Gates on manage_implementation.

NameRequiredDescriptionDefault
periodYes
projectIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the idempotent/non-destructive annotations: zero-tolerance comparison policy, not_asserted handling for undeclared figures, and voiding of bound tieout/parallel_run_close sign-off on changed evidence. The sign-off voiding is a meaningful side effect not captured by annotations, though it reads as workflow-state invalidation rather than data destruction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the core compute-and-compare action is stated first, followed by tolerance rules, declaration semantics, and gating. It is jargon-heavy but each sentence contributes domain rules rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description usefully lists the comparison fields ({kind, ref, declaredRappen, computedRappen, differenceRappen, status}) and explains the pass/fail semantics. However, for a tool with four required but undocumented parameters, it leaves parameter meaning and idempotency-key usage unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four required parameters have zero schema description coverage, and the description only implicitly covers 'period' via 'for a period'. workspaceId, projectId, and idempotencyKey are not explained anywhere, so the description does not compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: compute TILL's own figures from named read models and compare them per figure against declared figures. It implicitly distinguishes itself from the declaration sibling by referencing 'declared figures', but it does not name any sibling tool explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a permission prerequisite ('Gates on manage_implementation') and a re-run caveat about voiding sign-offs. However, it does not explicitly say when to use this versus implementation_parallel_declare or implementation_parallel_status, leaving alternatives implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

implementation_parallel_declareA
Idempotent

Declare the prior system’s figures for one filing period (entered exactly like G11 control totals: declared, hashed, never edited in place; a correction is a new declaration superseding the old, both retained). figures is an array of { kind (trial_balance|vat_return|open_items_ar|open_items_ap), ref, declaredRappen (integer) }. The period must align to the method boundary (effektiv quarter YYYY-Qn, saldo semester YYYY-Hn) or refuses (period_outside_window). A cutover combined with a method change refuses without a recorded mwst_method sign-off (method_change_needs_signoff). Gates on manage_implementation.

NameRequiredDescriptionDefault
periodYes
figuresYes
projectIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description explains the append-only declaration model: figures are hashed, never edited in place, and corrections supersede old declarations while retaining both. It also names concrete refusal conditions (period_outside_window, method_change_needs_signoff) and the manage_implementation gate, which are exactly the behavioral details an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then supplies the important constraints and refusal codes. It is dense with parenthetical detail but every sentence carries relevant information, with little obvious waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a gated write operation with no output schema, the description covers the main behavioral contract and error cases well. It still omits success behavior and idempotencyKey semantics, which matter for a tool that is annotated idempotent and requires an idempotency key.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the period format and the figures array shape, including kind enum values and declaredRappen integer semantics, but it leaves workspaceId, projectId, idempotencyKey, and the meaning of ref undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: declare the prior system’s figures for one filing period. It clearly distinguishes this from status/check siblings in the implementation family by focusing on declaration of figures. An agent can understand the core action without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear context of use: parallel implementation declarations for a filing period, with period-boundary and sign-off constraints. It does not explicitly name alternatives such as implementation_parallel_check or implementation_parallel_status, so it stops short of full when-to-use/when-not-to-use routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

implementation_parallel_statusA
Read-only

Read the parallel-run status: per declared period the latest check’s roll-up (passed | failed | not_asserted) and an overall status that is never green while a declaration or a passing check is missing (G11 three-status honesty). Gates on manage_implementation.

NameRequiredDescriptionDefault
projectIdYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, and the description's 'Read' is consistent with that (no contradiction). The description adds genuine behavioral value beyond the annotation: the overall status is 'never green while a declaration or a passing check is missing', the three-status honesty rule (G11), and the permission gate on manage_implementation. This meaningfully clarifies what the status actually means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and return shape, with the gating detail at the end. Every clause earns its place. Minor deduction for dense domain jargon ('G11 three-status honesty', 'declared period') that goes unexplained and could confuse an agent unfamiliar with the implementation domain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only status tool with two standard params and no output schema, the description covers the return semantics (both the per-period roll-up and the overall status rule) and the auth gate. It does not define what a 'declared period' is or state the output shape explicitly, but a status-read tool of this simplicity is nearly fully specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does nothing to explain workspaceId/projectId or how they relate to 'per declared period'. However, both parameter names are highly conventional across this API and self-explanatory in context, so the compensation gap is low-risk. The names carry the meaning rather than the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb-resource pair ('Read the parallel-run status') and then enumerates exactly what is returned: per-period latest check roll-up (passed | failed | not_asserted) and an overall status. The read semantics and the two status layers clearly distinguish it from siblings like implementation_parallel_declare and implementation_parallel_check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides context that this tool 'gates on manage_implementation', which implies it is a permissioned status read within an implementation flow. However, it never explicitly contrasts itself with the closely related siblings implementation_parallel_check, implementation_parallel_declare, or implementation_project_get, nor states when to prefer this over them. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

implementation_project_closeA
DestructiveIdempotent

Close the implementation project (confirm-gated). Legal only from the live (Stabilisierung) phase, with the Stabilisierung and parallel-run tasks terminal, and the parallel_run_close and source_cancellation sign-offs recorded (or their canon tasks not_applicable with a reason). Each open leg refuses in isolation, naming what is open. Denylisted from automation (a rule engine must not close). Gates on manage_implementation. CONSEQUENCE: Closes the implementation project as finished, once its closing tasks and sign-offs are done. A closed project cannot be reopened; its record stays.

NameRequiredDescriptionDefault
confirmedYes
projectIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it discloses the confirm gate, the manage_implementation permission gate, per-leg refusal semantics that name what is open, denylisting from automation, and irreversibility ('a closed project cannot be reopened; its record stays'). That is exactly the operational and consequence detail an agent needs before invoking a destructive, non-reversible mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and gate, then layered preconditions, refusal behavior, permissions, and consequence. Every sentence adds a distinct constraint, though the parenthetical precondition run is dense and slightly hard to parse on first read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, irreversible, permission-gated mutation with no output schema, the description supplies the preconditions, the failure mode, the permission requirement, and the post-state. The only gap is parameter-level documentation, which is scored separately; behaviorally the definition is complete enough to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four required parameters, so the description must carry the burden. 'Confirm-gated' implicitly maps to the `confirmed` boolean, but projectId, workspaceId, and especially idempotencyKey are never explained, and the interaction between the idempotentHint annotation and idempotencyKey is left unstated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (close the implementation project) and immediately distinguishes it from adjacent tools like implementation_signoff_record, implementation_parallel_check, and migration_close_plan by making clear this is the terminal close action. The confirm-gated qualifier and the phase precondition further pin down the exact operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-it-is-legal conditions (live/Stabilisierung phase, terminal Stabilisierung and parallel-run tasks, parallel_run_close and source_cancellation sign-offs or not_applicable canon tasks) and explicit when-not behavior (each open leg refuses in isolation). It also states the automation exclusion. It stops short of naming an alternative tool for the case where preconditions are unmet, but the conditional guidance itself is unusually complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

implementation_project_createA
DestructiveIdempotent

Create the implementation project for this workspace: the cutover as a first-class object above the migration plan(s). Takes the source system, the target cutover date (the fixed anchor every reconciliation figure is declared against), an optional freeze window, the MWST method (effektiv | saldo) and methodChange:true when the cutover is combined with a method change (which then needs an mwst_method sign-off before any parallel figure). Refuses a cutover date in the past (cutover_in_past), an inverted freeze window, and a second open project on the workspace (project_already_open). Gates on manage_implementation.

NameRequiredDescriptionDefault
freezeEndNo
mwstMethodYes
cutoverDateYes
freezeStartNo
workspaceIdYes
methodChangeNo
sourceSystemYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the three named refusal modes (cutover_in_past, inverted freeze window, project_already_open), the permission gate, and the downstream consequence of methodChange:true (an mwst_method sign-off is required before any parallel figure). It does not describe what is returned or what happens to existing plans on success, and leaves the destructiveHint/implicit idempotency behaviour to the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then parameters, then refusal modes in a logical order with no filler sentences. It is one long run-on sentence, however, which makes the validation clauses harder to scan than a short bulleted structure would.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation with no output schema and no schema descriptions, the description supplies domain model, anchoring semantics, failure modes and the permission gate. The remaining gap is idempotency-key handling and what the caller receives on success, which matters for a retry-safe create.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description carries the load and mostly does: it explains sourceSystem, cutoverDate (the anchor every reconciliation figure is declared against), the freeze window pair, mwstMethod with its two enum values (effektiv | saldo), and the conditional meaning of methodChange. workspaceId and especially the required idempotencyKey are left unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Create the implementation project for this workspace') with a conceptual scoping clause ('the cutover as a first-class object above the migration plan(s)') that separates it from migration_create_plan and implementation_project_get/list. An agent knows exactly what object is produced and where it sits in the hierarchy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete preconditions that govern whether the call can succeed: 'Gates on manage_implementation', no second open project on the workspace, no past cutover date, no inverted freeze window. It does not name alternative tools (e.g. migration_create_plan for the plans underneath) or say when a project should not be created at all, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

implementation_project_getA
Read-only

Read the implementation project end to end: the evidence-derived phase (discovery -> extraction -> mapping -> rehearsal -> cutover -> parallel_run -> live -> closed; live is the Stabilisierung), the one next action, the blocked-first task list, the sign-off (Freigabe) rows, the decision log, the parallel-run status, and the load-bearing computed statuses tieout.passed / parallel.passed, each true ONLY when the deterministic checks are clean AND the bound human sign-off stands. Gates on manage_implementation.

NameRequiredDescriptionDefault
projectIdYes
savedViewIdNo
workspaceIdYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the agent knows it's safe. The description adds useful behavioral context: the computed statuses (tieout.passed / parallel.passed) are 'true ONLY when the deterministic checks are clean AND the bound human sign-off stands' – this is a non-obvious semantic that helps the agent interpret results. No contradiction, but it doesn't disclose return format or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense with information but well-structured. It front-loads the core purpose ('Read the implementation project end to end') and then enumerates components. It's a long sentence, but every element adds value. The final 'Gates on manage_implementation' is slightly cryptic but concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (many components and derived statuses) and no output schema, the description covers the major features thoroughly. It explains the phase lifecycle, the status logic, and highlights important nuances (live is Stabilisierung). It omits details about response format but for a read tool, that's acceptable. WorkspaceId/projectId are enough to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% – the schema has projectId, savedViewId, workspaceId but no descriptions. The tool description doesn't explain parameters either. However, the parameters are self-explanatory (workspaceId, projectId are obvious identifiers, savedViewId is optional). With only 3 params and this clarity, a 3 is fair – the description adds no param details, but none are critically needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: 'Read the implementation project end to end' and lists the specific components it retrieves (phases, next action, task list, sign-off rows, decision log, parallel-run status, and computed statuses). It distinguishes itself from sibling tools like implementation_project_list (lists projects) and implementation_project_create (creates).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Gates on manage_implementation', which implies a prerequisite or dependency but is cryptic. It doesn't explicitly state when to use vs alternatives, but the tool is self-evidently a read endpoint for a specific project, distinct from the list sibling. A clearer 'use this to fetch a single project's full state' would push it to 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

implementation_project_listA
Read-only

List this workspace’s implementation projects as roster metadata (phase, first blocker + owner kind, days to cutover), blocked-first then by cutover proximity. Workspace-scoped: the cross-client roster composes N of these over A23 list_workspaces client-side. §H-TENANT: never reads across workspaces. Gates on read_master_data so a mandate member can compose the roster.

NameRequiredDescriptionDefault
statusNo
savedViewIdNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation by disclosing workspace isolation, the read_master_data permission gate, and the ordering/sorting behavior. This gives an agent a clear model of side effects and authorization requirements with no contradiction against annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence carries the action, resource, output fields, and ordering; subsequent sentences add scope, auth, and permission context. It uses domain jargon (§H-TENANT, A23, mandate) that may cost clarity for unfamiliar agents, so it is not a perfect 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no output schema, the description covers the returned fields, ordering, workspace scope, cross-client composition, and permission gate. The main gaps are the undocumented status and savedViewId parameters and the lack of any pagination or return-envelope details. Overall strong, but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 0% of parameters in descriptions, and the description only implies workspaceId through 'this workspace's' and 'Workspace-scoped'. The optional status and savedViewId parameters are never explained, so an agent cannot know how to filter the list or apply a saved view. Since schema coverage is low, the description needed to compensate and did not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb ('List'), names the exact resource ('this workspace's implementation projects'), and states the concrete shape of the result ('roster metadata: phase, first blocker + owner kind, days to cutover') plus the ordering ('blocked-first then by cutover proximity'). This makes it immediately distinguishable from implementation_project_get and the many other list tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit scoping guidance: it is workspace-scoped, 'never reads across workspaces', and explains that the cross-client roster is composed client-side over A23 list_workspaces. It does not explicitly contrast with implementation_project_get or other implementation siblings, but the workspace-isolation rule and composition pattern tell an agent 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.

implementation_runbook_instantiateB
Idempotent

Instantiate a shipped runbook template into owned, dated, evidenced tasks: each task carries an owner kind (human|agent|system), a due date offset from the cutover date, a prerequisite, the evidence it requires and a contingency. The go/no-go and rollback tasks are undeletable (only not_applicable with a reason). The 180-day Umsatzabstimmung, the 240-day Berichtigung (Art. 72 MWSTG) and the prior-year Umsatzabstimmung land with computed statutory dates. Gates on manage_implementation.

NameRequiredDescriptionDefault
projectIdYes
templateIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover idempotency and non-destructiveness, but the description adds substantial behavioral detail: undeletable go/no-go and rollback tasks that can only be marked not_applicable with a reason, and computed statutory dates for three specific tasks. This is meaningful context the agent cannot get from structured fields, though the exact effect of re-running on the idempotency key is not spelled out.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then layered with behavior detail; each sentence adds informational value. It is dense and slightly run-on, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It richly describes the nature and constraints of the generated tasks and statutory dates, but with all four parameters undocumented and no output schema, the agent still cannot learn what the call returns or how the parameters drive behavior. For a tool of this complexity that is a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for four required parameters, so the description must compensate and largely does not. It never explains workspaceId, projectId, templateId, or idempotencyKey semantics, leaving the agent to guess their meaning from names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb 'Instantiate' plus concrete resource ('shipped runbook template into owned, dated, evidenced tasks') makes the action unmistakable. It stops short of naming how it differs from nearby siblings like checklist_start or implementation_task_set, relying on the reader to infer the runbook-template distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never states when to choose this over alternatives (checklist_start, implementation_task_set, implementation_project_create) or any preconditions beyond the vague 'Gates on manage_implementation'. The 'Gates on manage_implementation' clause is a permission note rather than usage routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

implementation_signoff_recordA
DestructiveIdempotent

Record one human sign-off (append-only). kind is the FIXED enum: conversion_date, mwst_method, mapping_approval, tieout, contact_merge, go_nogo, rollback_trigger, parallel_run_close, source_cancellation. EVERY kind is a human act: an agent (or the system seat) is REFUSED (signoff_needs_human), never staged (P8). The tieout and parallel_run_close kinds bind the current reconciliation evidence hash, so a later check that changes the evidence voids the sign-off. Gates on commit_migration (signing is the human half of committing).

NameRequiredDescriptionDefault
kindYes
projectIdYes
evidenceRefYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the idempotentHint/destructiveHint annotations: append-only semantics, refusal of agent callers, tieout/parallel_run_close binding the current reconciliation evidence hash, and that later evidence changes void the sign-off. None of this contradicts destructiveHint=true or idempotentHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and the enum, then layers constraints; the long enum list is earned because the schema has no enum. Some internal jargon (P8, signoff_needs_human) adds density without adding much for a caller.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, 5-required-param mutation with 0% schema coverage and no output schema, the description covers purpose, the human-only constraint, evidence-hash binding, and the commit gate. It still leaves idempotency-key behavior and return shape unstated, a minor gap given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It spells out kind's fixed enum and implies evidenceRef via 'bind the current reconciliation evidence hash', but workspaceId, projectId, and especially idempotencyKey are left unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb (Record) and resource (one human sign-off, append-only) make the operation unique among hundreds of siblings. The inline kind enum tells the agent exactly what the record represents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains that every kind is a human act and that agents/system seats are refused (signoff_needs_human), and that the action gates on commit_migration. It doesn't explicitly route to a sibling alternative, but the human-seat constraint is clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

implementation_task_setA
Idempotent

Create or update one implementation task (pass taskId to update). fields carries phase, title, ownerKind, ownerRef, due, status, evidenceKind, evidenceRef, contingency and reason. Completing a task whose prerequisite is still open refuses (prerequisite_open, naming it); completing one that requires evidence without it refuses (evidence_required, naming the kind); marking a task not_applicable needs a recorded reason (not_applicable_needs_reason). Gates on manage_implementation.

NameRequiredDescriptionDefault
fieldsNo
taskIdNo
projectIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotency and non-destructiveness, but the description adds the real behavioural payload: three named refusal conditions with their error codes (prerequisite_open, evidence_required, not_applicable_needs_reason) and the manage_implementation permission gate. That is precisely the kind of pre-call knowledge an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The create/update distinction is front-loaded in the first clause, followed by field inventory and then failure modes, with no filler. Dense but every clause carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers permissions, refusal paths and the field contract, which is most of what an agent needs. It stops short of describing the success response or what the task record looks like after a state change, which with no output schema would have closed the loop.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden, and it does enumerate all ten nested 'fields' members (phase, title, ownerKind, ownerRef, due, status, evidenceKind, evidenceRef, contingency, reason) plus the taskId update toggle. It leaves workspaceId, projectId and idempotencyKey unexplained and gives no allowed values for status/ownerKind, so it compensates well but not completely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create or update one implementation task') and immediately distinguishes the two modes by the taskId signal. That lets an agent separate create from update without inspecting the schema, which is exactly what a set/upsert tool needs to convey.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(pass taskId to update)' gives a clear selection rule between the create and update behaviours, and the prerequisite/evidence gates describe the conditions under which the call will fail. It does not point at any sibling (e.g. implementation_project_create, checklist_item_complete, implementation_decision_record), so the agent gets context but no explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_bank_statementA
DestructiveIdempotent

Import ONE bank statement file onto a registered Bankkonto, whatever its format: a camt.053 XML, an MT940 (.sta/.mt940/.txt), or a bank CSV export. Send the file as content (text) or contentBase64 (its bytes; a CSV's encoding is detected from them: UTF-8 with or without BOM, else Windows-1252). format (auto, camt, mt940, csv) defaults to auto-detection. A camt goes through import_camt's own door, statement by statement in number order (the EBICS successor rule, the camt.054 refusal and every import_camt rule apply). An MT940 is read field by field (:25: must be this Bankkonto's IBAN, else the statement refuses account_mismatch; an account number that is not an IBAN imports with the warning account_unverified, unless the same file verifies another statement as this Bankkonto's, which refuses every statement naming a different account account_mismatch, and a file naming several accounts none of which verifies refuses mt940_several_accounts naming them; EC/ED expected entries are skipped as pending). A CSV is read through the Bankkonto's saved column mapping or the mapping you pass (see bank_csv_preview; saveMapping, default true, saves a passed mapping for next time); with neither it refuses csv_mapping_required with a guessedMapping, and a mapping that lacks the booking date or the amount, or names a column the file does not carry, refuses csv_mapping_invalid naming it. Duplicates are decided per Bankkonto, COVERAGE FIRST (D178 point 19, A20 §11.4). A delivery that EXTENDS the balance chain (its opening is the stored closing at the chain's end AND it starts later, or carries the next sequence number the same day) brings new lines; only a bank reference already in the books (camt AcctSvcrRef, MT940 //) drops a line (skipped duplicate_entry). A delivery that does not extend is an OVERLAP on the days stored statements already cover (their periods minus the known gaps; a CSV covers its first booking date to the day before its last, as does a camt or MT940 without a balance chain): each of its lines there is matched one to one on its movement (booking date, else value date; direction; amount; currency; occurrence) and imported FLAGGED same_movement naming the stored line (warning overlap_same_movement), or, matching nothing on a fully covered day, FLAGGED covered_period_new_line (warning covered_period_new_line); outside the covered span coverage flags nothing. Across formats the owner's rule applies as well: a stored line of ANOTHER format with the same direction, amount and currency, a counterparty that does not contradict (equal IBANs, else a shared name word, else money and date alone) and a booking or value date within three days is a candidate, and the line is imported FLAGGED with every candidate (warning possible_cross_format_duplicate). Flags show on list_bank_inbox (possibleDuplicates, possibleDuplicateOf, needsDuplicateDecision) and in nearDuplicates. A flagged line is never sure and no booking path takes it (duplicate_decision_pending) until resolve_possible_duplicate answers duplicate or distinct, one line at a time or every one-to-one match of the delivery at once. The setting bank.cross_format_duplicates = auto_strong (default ask) drops only a line whose bank reference another format's line carries with the same money on the same booking date (skipped cross_format_duplicate naming existingBankTxnId); two different bank references never drop, and a CSV never drops across formats. The same statement again is already_imported, the same statement identity with changed content refuses statement_amended; statement number, page and file are delivery identity only, never part of a line's key. allowDuplicateEntries admits a line whose bank reference is already in the books as a genuine second movement; it never silences a flag. Each line keeps its facts (bank code with the SIX label, the bank texts, references, the instructed foreign amount, the bank's and the effective rate, the charges and the fee), shown on list_bank_inbox. The answer: format, statements[] (outcome imported | already_imported | refused with code and reason, txnCount, duplicates, warnings), and the totals imported, duplicates (already in the books) and refused (lines not read: unreadable date or amount, zero, another currency, a total row), with skipped[] giving each line's reason and a sentence. An account fed over EBICS takes camt only: MT940 or CSV refuses bank_feed_account. An agent seat's import is validated at draft time with these same refusals, and an agent's CSV import must carry its mapping in the payload (a CSV without one refuses csv_mapping_required with the saved mapping attached as savedMapping: pass it as mapping), so the approval runs exactly the mapping the person saw. Books nothing: every new line waits in the bank inbox. Idempotent per key and file. CONSEQUENCE: Imports the statement file (camt, MT940 or CSV): new lines wait in the bank inbox, nothing is booked, lines already in the books are skipped and a CSV mapping is saved. Imported statements cannot be removed.

NameRequiredDescriptionDefault
formatNo
contentNo
mappingNo
fileNameNo
saveMappingNo
workspaceIdYes
bankAccountIdYes
contentBase64No
idempotencyKeyYes
allowDuplicateEntriesNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations, explaining that nothing is booked, lines wait in the bank inbox, duplicates are flagged rather than silently dropped, and imported statements cannot be removed. It details refusals, warnings, cross-format duplicate handling and the effect of allowDuplicateEntries. These are exactly the behavioral traits an agent needs for a destructive, idempotent import operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded, but the description is extremely dense and runs to many sentences covering edge-case duplicate logic and error codes. Most details are relevant for such a complex financial import, but the length and semicolon-heavy structure make it harder to scan than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the response shape with format, statements[], totals, skipped[] and warnings, and it covers the main import outcomes and refusal codes. Combined with the annotations and the detailed duplicate/flagging rules, an agent has enough context to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description compensates well for the most important parameters: content versus contentBase64, format auto-detection, mapping and saveMapping behavior, and allowDuplicateEntries semantics. It also notes idempotency per key and file, though it does not directly explain fileName or the required workspaceId and bankAccountId parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Import ONE bank statement file onto a registered Bankkonto, whatever its format'. It immediately distinguishes the tool from camt-only import paths by naming camt.053, MT940 and CSV support. An agent can tell this is the general single-statement import tool rather than a preview or batch tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful context for when the tool applies: one file, any of the three formats, with a note that camt imports are handled through import_camt's rules and CSV mappings reference bank_csv_preview. It also states the EBICS restriction clearly. It stops short of explicitly routing the agent between import_bank_statement, import_camt and import_camt_files in all cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_camtA
DestructiveIdempotent

Import a day-end camt.053 statement onto a registered Bankkonto (A19): parses the XML, checks the file's IBAN against the account, and persists every booked entry, each keyed on its AcctSvcrRef, else its NtryRef, else its content. Duplicates are decided coverage first (D178 point 19, see import_bank_statement): only an AcctSvcrRef already in the books drops a line (skipped duplicate_entry); a statement that does not extend the balance chain imports its lines on days the books already cover FLAGGED (same_movement or covered_period_new_line), waiting for resolve_possible_duplicate, never counted twice silently. A byte-identical re-import of the same statement (Stmt/Id + ElctrncSeqNb + page number) is a safe no-op (duplicate:true); a same-identity statement whose content has genuinely changed refuses with statement_amended, naming what changed. allowDuplicateEntries:true admits a line whose AcctSvcrRef is already in the books as a genuine second movement; it never silences a flag. A batch entry (several TxDtls in one booking) fans out into one line per TxDtls; a repeated AcctSvcrRef inside one booking is kept apart (asr:#), and a batch whose details are in another currency or do not sum to the booking is ONE line of the booking amount. A camt.054 refuses camt054_refused (a detail notification, not a statement). A camt.053 without ElctrncSeqNb or closing balance imports with the warning not_day_end_statement in warnings[]: import that day's day-end statement too. On an account fed over EBICS (A36) the successor rule decides first, at this door as at bank_sync: a statement imports only as the successor of the newest statement in the books (feed.rule, and with the warning statement_number_jump plus feed.jump naming the skipped numbers when its number skips some but its balances chain) or as the filler of a hole; a copy of one already there is a no-op (duplicate:true); otherwise it refuses gap_refused, overlap_refused, before_feed_start, unsupported_multipage_statement, or not_day_end_statement (refused there, not a warning), each naming the statements it compared, and a retry never helps: import the missing statement first. A booked, non-reversal CREDIT is also registered in A21's QR queue, whose row follows the line. Every new line then waits in the bank inbox (list_bank_inbox / book_bank_line); nothing is booked by the import. An archived Bankkonto refuses bank_account_archived; a file whose IBAN belongs to another registered account refuses iban_mismatch naming both IBANs and that account; an IBAN registered nowhere answers needs_bank_account with the file IBAN. Any entry this parser could not read, or an entry it skipped as a duplicate, is named in the skipped[] list, never silently dropped. CONSEQUENCE: Imports the bank statement: each new bank line waits in the bank inbox, and nothing is booked yet. An imported statement cannot be taken out again; a line booked wrongly is reopened and corrected.

NameRequiredDescriptionDefault
xmlYes
workspaceIdYes
bankAccountIdYes
idempotencyKeyYes
allowDuplicateEntriesNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give idempotentHint and destructiveHint; the description adds the whole behavioral model: lines land in the bank inbox and nothing is booked, an imported statement cannot be removed, byte-identical re-imports are no-ops while amended statements refuse with statement_amended, and duplicate decisions are coverage-first with FLAGGED rather than silent drops. This is consistent with both annotations, so 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and consequence are correctly front-loaded, and the CONSEQUENCE summary at the end aids scanning. However, the body is a ~450-word dense paragraph enumerating error codes and edge cases (batch fan-out, asr suffixes, currency mismatch summing) that would read far better as a list, and several clauses repeat the duplicate/no-op idea.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still describes the return surface: duplicate:true, skipped[], warnings[], feed.rule, and named error codes (iban_mismatch, gap_refused, statement_amended, camt054_refused). For a destructive, idempotent import tool, an agent has everything needed to call it correctly and interpret refusals.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load. It fully explains allowDuplicateEntries ('admits a line whose AcctSvcrRef is already in the books... never silences a flag') and implies xml and bankAccountId through 'parses the XML' and 'registered Bankkonto', but idempotencyKey and workspaceId are never mentioned, leaving the most operationally important parameter undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Import a day-end camt.053 statement onto a registered Bankkonto'), and immediately scopes it against siblings: it defers duplicate semantics to import_bank_statement, refuses camt.054 as a different artifact, and positions itself against bank_sync for EBICS feeds. An agent can tell it apart from import_camt_files and import_bank_statement without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use and when-not: import the missing statement first rather than retrying, use allowDuplicateEntries only for a genuine second movement, resolve_possible_duplicate handles flagged lines, and a camt.054 must go elsewhere. Preconditions (registered account, not archived, IBAN must match) and the EBICS successor ordering rule are all spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_camt_filesA
DestructiveIdempotent

Import several day-end camt.053 files onto one registered Bankkonto at once, in statement-number order: the hand repair of a statement gap (A36 §4.7, D150), for the days fetched from eBanking. Each file is split into single statements when it holds several (the envelope kept; a file whose statements disagree on IBAN or currency, or lack ElctrncSeqNb, is refused camt_split_refused rather than guessed), every statement is sorted by its position (year of FrDtTm, ElctrncSeqNb), and ONE ordered pass imports each through import_camt's own door, so on an EBICS-fed account the successor rule decides exactly as for one file (a hole filler lands in number order) and nothing counts twice. The answer is one outcome per statement in pass order: imported (statementId, txnCount, warnings), already_imported (the same statement is in the books; dropping the same files again imports nothing) or refused with the code and reason import_camt gives (gap_refused names the differenceMinor that does not chain, overlap_refused, iban_mismatch, camt054_refused, ...), plus imported/alreadyImported/refused totals. At most 100 files. Each call needs a fresh idempotencyKey; a replay returns the first report. Books nothing: every new line waits in the bank inbox. CONSEQUENCE: Imports several bank statements in number order to close a gap; each new bank line waits in the bank inbox, and nothing is booked yet. Imported statements cannot be taken out again.

NameRequiredDescriptionDefault
filesYes
workspaceIdYes
bankAccountIdYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the idempotentHint/destructiveHint annotations: discloses splitting on multiple <Stmt>, the camt_split_refused refusal for IBAN/currency mismatch or missing ElctrncSeqNb, per-statement ordering, one-outcome-per-statement reporting with codes, idempotency-key replay semantics, and that it books nothing (lines wait in the bank inbox). Aligns with destructiveHint by warning imported statements cannot be taken out again.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core verb and scenario, but the body is one dense run-on paragraph laden with German-accounting jargon, and the trailing CONSEQUENCE sentence largely restates behavior already given. Structure is workable but wasteful at this length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, no-output-schema import tool this covers outcomes, refusal codes, ordering, the 100-file cap, idempotency, and the not-booked consequence. An agent has everything needed to call it and interpret the per-statement report.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry semantics; it explains the files array's splitting/refusal behavior thoroughly and spells out idempotencyKey (fresh key per call, replay returns first report). workspaceId and bankAccountId are left undocumented but are self-evident identifiers, so the compensation is strong but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (import several camt.053 files onto one Bankkonto), the ordering semantics (statement-number order), and the exact sibling it rides on (import_camt's own door). An agent can distinguish this bulk gap-repair tool from the single-file import_camt without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the use case as the hand repair of a statement gap for eBanking-fetched days and contrasts it with the single-file path. It names the 100-file limit but never states a hard when-not-to-use (e.g. when a plain bank_sync suffices); context is clear but exclusions are implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_exchange_ratesA
Idempotent

Import a published BAZG rate payload into the rate store as source='rate_api'. payload is the response body from the endpoint describe_rate_feed names, verbatim. The payload identifies its own series; pass series to have a mis-paired payload refused rather than mis-dated. Daily rates are stored on each date in the payload's validity window (not on the determination date), monthly averages once on the first of their month, and per-unit quotations (100, 1000, 10000) are scaled. A published rate TILL cannot hold exactly at twelve decimal places is reported rather than rounded; the whole BAZG daily series is within that (its deepest is nine places). CONSEQUENCE: Imports the published BAZG exchange rates into your rate list, each on the dates it is valid for. Imported rates stay unchanged; an entry one priced wrongly is fixed with a correcting entry.

NameRequiredDescriptionDefault
seriesNo
payloadYes
currenciesNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint=false; the description adds substantial context beyond them: the source tag applied, that imported rates are immutable and corrected only by a correcting entry, that daily rates land on each validity date rather than the determination date, and that a rate needing more than twelve decimals is rejected rather than rounded. It does not explain the role of the required idempotencyKey or what a refused payload looks like on return.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the source tag, then the payload/series contract, then the date-placement rules. Slightly padded by the 'CONSEQUENCE:' line, which largely restates the opening sentence, but the rest of the detail earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter import with no output schema, the description covers the semantics that matter most: payload provenance, series pairing, date placement, unit scaling, and precision refusal. The gaps — idempotencyKey behaviour and the unused `currencies` filter — are real but secondary, and idempotentHint partially covers the former.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden. It does this well for `payload` (verbatim response body, self-identifying series) and `series` (refuses mis-paired payloads), but `workspaceId`, `idempotencyKey`, and `currencies` receive no explanation at all — three of five parameters remain undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Import a published BAZG rate payload into the rate store as source='rate_api'') and immediately names the upstream sibling (describe_rate_feed) that produces the payload. An agent can distinguish it from record_exchange_rate and list_exchange_rates without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context for use: the payload must be the verbatim response body from the endpoint describe_rate_feed names, and passing `series` guards against a mis-paired payload. It never explicitly contrasts with the manual path (record_exchange_rate) or states when not to import, so the alternative-routing is implied 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.

import_opening_balancesA
Idempotent

Import already-parsed migration rows as the opening position, posting exactly what preview_opening_import showed. Takes rows as an array of column-value objects, NOT a CSV string: this verb parses no file, and turning an export into rows is the caller's step. Refuses with unmapped_account when any row names an account the chart does not have, because importing the rest would post a position that balances only because a row was dropped. A row with no account at all (what a subtotal or Total line looks like) is refused as invalid_row naming that row, rather than blamed on the mapping. format accepts csv or bexio, which select default column names; mapping overrides them field by field for an export with different headers. Retrying the same idempotencyKey returns the existing entry and never a second opening position. CONSEQUENCE: Books the imported opening position as one balanced entry. If it is wrong, you correct it with a correcting entry; both stay visible.

NameRequiredDescriptionDefault
asOfNo
rowsYes
dryRunNo
formatNo
mappingNo
referenceNo
workspaceIdYes
idempotencyKeyYes
differenceAccountNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply idempotentHint and destructiveHint=false; the description goes well beyond them by naming the exact refusal codes (unmapped_account, invalid_row) and explaining why partial import is refused, and by spelling out idempotency semantics (retry returns the existing entry, never a second position). The CONSEQUENCE block states that the result is a single balanced entry corrected only by a compensating entry, with both staying visible — exactly the irreversibility context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but dense and front-loaded: purpose first, then the rows-shape constraint, then error contracts, then the consequence. Each sentence adds a distinct fact (input shape, error codes, mapping precedence, retry behaviour) rather than restating the name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter booking mutation with no output schema, the description covers the input-shape trap, failure modes and post-import consequences, which is most of what an agent needs. Remaining gaps are the undocumented dryRun and differenceAccount parameters and any expectation about the returned entry, which are left unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage across 9 parameters, the description carries real weight: it specifies rows as column-value objects (not CSV), enumerates format values (csv, bexio), explains that mapping overrides default column names field by field, and defines idempotencyKey semantics. However, asOf, dryRun, reference, differenceAccount and workspaceId receive no explanation, and dryRun/differenceAccount are behaviourally significant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Import already-parsed migration rows as the opening position') and immediately ties its behaviour to a named sibling, preview_opening_import. The agent can tell this apart from set_opening_balances or import_open_items by the 'rows, not a file' scope statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'posting exactly what preview_opening_import showed' phrasing makes the intended workflow (preview first, then import) clear, and the refusal semantics tell the agent the chart must be mapped beforehand. It stops short of naming explicit alternatives or saying when NOT to use this over set_opening_balances or import_open_items.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_open_itemsA
DestructiveIdempotent

Import open items (ar or ap) for a migration plan: each already-mapped row becomes an origin=migrated document (AR, at issued) or vendor bill (AP, at posted) that posts NOTHING of its own (posted_entry_id/entry_id NULL). Its only ledger effect is A04 opening 1100/2000 line; the migrated open total must tie to that line to the Rappen (a nonzero difference is a red control, never a plug posting). Atomic and idempotent: a single refused row imports nothing, and a re-run with the same idempotencyKey replays the original outcome (no duplicate rows). Rides commit_migration; denylisted from automation. priorYearDetail live carries an already-settled prior-year row as a settled migrated item that nets to zero open; archive (default) refuses it toward the G13 archive. CONSEQUENCE: Brings the open customer invoices and vendor bills from your old system into the live books, tied to the opening balance. The batch has no undo; you correct a wrong item on its own.

NameRequiredDescriptionDefault
rowsYes
sideYes
planIdYes
workspaceIdYes
idempotencyKeyYes
priorYearDetailNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say idempotent and destructive; the description adds substantial context beyond them: the imported rows post nothing of their own (posted_entry_id/entry_id NULL), the sole ledger effect is the A04 opening line, the open total must tie to the Rappen with a nonzero difference being a red control rather than a plug, and the batch is atomic with no undo (corrections are per-item). That is exactly the behavioral detail an agent needs before a destructive migration write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and its ledger effect, and every sentence adds distinct information (atomicity, idempotency, tie-out rule, prior-year fork, no-undo). It is dense and jargon-heavy ('to the Rappen', 'G13 archive', 'A04'), which slows parsing, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-output-schema migration write, it covers the essentials: atomicity, idempotency replay, ledger effect, control-total tie-out, and failure semantics. Missing are the shape of the 'original outcome' returned on replay and any permission or row-count limits, which an agent would want before committing a batch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load, and it does for most fields: 'side' (ar or ap), 'rows' (already-mapped rows becoming migrated documents/bills), 'idempotencyKey' (re-run replays the original outcome, no duplicates), and 'priorYearDetail' (live vs archive default). workspaceId and planId are left to inference, which is the only real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Import open items (ar or ap) for a migration plan') and immediately specifies the resulting object type on each side (origin=migrated AR document at issued / vendor bill at posted). It is clearly separable from siblings such as preview_open_items, import_opening_balances, and the migration_* step tools, because it names the exact ledger footprint (A04 opening 1100/2000).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real routing context: it 'rides commit_migration' and is 'denylisted from automation', and it explains the priorYearDetail fork (archive default refuses settled prior-year rows toward the G13 archive versus live carrying them as settled migrated items). It stops short of saying when to reach for preview_open_items first or how it relates to import_opening_balances ordering.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

income_statementA
Read-only

Erfolgsrechnung (income statement) for a period, in the OR Art. 959b Abs. 2 Gesamtkostenverfahren layout: the ten account-backed positions in their prescribed order, each under its statutory wording, plus reingewinnMinor, which is position 11, Jahresgewinn oder Jahresverlust. Unlike the Bilanz this Absatz is a flat list with no sub-level, so all eleven positions are present and in the prescribed order. Two things to say about the eleventh rather than claim: it is the COMPUTED result and not a section of its own, so no account falls into it, and the exported Erfolgsrechnung heads it with the ENACTED wording resolved by sign, Jahresgewinn above zero and Jahresverlust below it, keeping the full Jahresgewinn oder Jahresverlust verbatim at exactly zero. Each single word is the enacted wording with the branch the book did not take dropped, because the oder enumerates the two outcomes a result can have rather than naming one heading. The conventional Treuhand wording Reingewinn oder Reinverlust is not printed. The Bilanz carries the same figure under the same enacted wording as an Eigenkapital position, so the two statements of one Jahresrechnung give one number one name. A RESIDUAL section, uebrige_positionen, follows the ten and holds anything that fits none of them, so no account is dropped. It is the "weitere Positionen" of OR Art. 959b Abs. 5, which is a different Absatz and not one of the eleven: it is neither position 11 nor a twelfth prescribed position. Every position is signed as its CONTRIBUTION TO PROFIT (revenue positive, expense negative, and the three positions the statute writes as Aufwand AND Ertrag shown net), so a loss is a negative figure and never an absolute value. This is the verb that answers "wie war der Gewinn in Q2?". Pass compareTo={periodStart,periodEnd} for the prior-period column. The Absatzerfolgsrechnung of OR Art. 959b Abs. 3 is not built, and this is the filed statement, so it accepts no alternate grouping.

NameRequiredDescriptionDefault
compareToNo
periodEndYes
periodStartYes
workspaceIdYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint:true. The description adds substantial behavioral context beyond that: the exact layout, the eleven positions in prescribed order, that reingewinnMinor is a computed result and not an account section, sign convention (contribution to profit, negative for losses), the handling of the zero case with the full enacted wording, and that no account is dropped due to the residual section. It also explains why one wording is dropped under the oder enumeration. This is rich behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place for a complex statutory reporting tool. It is front-loaded with the core purpose and layout, then explains the computed eleventh position, sign convention, and residual section. It could be tightened slightly — some statutory nuance about the weniger/oder wording is repeated across a couple of sentences — but it is structured and not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool — a statutory Swiss income statement with an output schema absent and schema parameter coverage at 0% — the description is remarkably complete. It covers the positions, order, sign convention, result handling, residual section, comparison parameter, and exclusions. An agent could invoke it correctly and interpret its output without needing additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for parameter semantics. It explains the meaning of periodStart/periodEnd by saying it answers 'wie war der Gewinn in Q2?' and explains that compareTo={periodStart,periodEnd} selects the prior-period column. However, it does not describe workspaceId, though that is likely obvious from context. It compensates well for the schema gap on the temporal and comparison parameters but leaves workspaceId implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb+resource — the income statement (Erfolgsrechnung) for a period — and goes well beyond the title by naming the exact statutory layout (OR Art. 959b Abs. 2 Gesamtkostenverfahren), the eleven positions, and the residual section. It also distinguishes itself from sibling tools: it says this is the filed statement and that the Absatzerfolgsrechnung of OR Art. 959b Abs. 3 is not built, and contrasts with Bilanz. An agent can select it confidently.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use it — to answer "wie war der Gewinn in Q2?" — and how to request the prior-period column via compareTo={periodStart,periodEnd}. It also names what it is not: the Absatzerfolgsrechnung is not built, it accepts no alternate grouping, and the Treuhand wording is not printed. Siblings like balance_sheet, trial_balance, general_ledger are implicitly distinguished by the explicit scope and layout.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

install_pluginA
Idempotent

Installiere eine Erweiterung (US-G02.1): check the pinned sha256 against the bundle (manifest_checksum_failed on a mismatch, nothing persisted), REJECT any capability naming a reserved money-path tool (capability_forbidden, no_second_posting_path, the WHOLE install fails, P3) or colliding with an existing tool/screen/source name (capability_name_conflict), store permissions.granted as the INTERSECTION of grantedScopes and the manifest`s requested scopes (never a superset), resolve compat_range against the core version, and persist a plugin_manifests row (status installed, or incompatible when the range fails). A newer version of an already-installed plugin supersedes the row in place and writes an audit_log entry before it changes. CONSEQUENCE: Installs third-party code that runs with the rights you grant. A wrong install is undone by disabling or uninstalling it; what it already did stays done.

NameRequiredDescriptionDefault
sourceYes
packageRefYes
workspaceIdYes
grantedScopesNo
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the annotations: it discloses exactly what fails and what is persisted (nothing on checksum mismatch, whole install aborts on reserved capability, permissions.granted is the intersection and never a superset), the incompatible-status path, in-place supersede with audit_log written beforehand, and an explicit consequence paragraph about third-party code running with granted rights and irreversibility of effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, and most sentences carry real information about failure modes and persistence. But the core is a single dense run-on sentence stuffing internal error codes (manifest_checksum_failed, no_second_posting_path, P3) and mixed German/English into one block, which hurts scanability at selection time.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and zero schema description coverage, the description supplies a genuinely complete picture of side effects, atomicity, and irreversibility. Only the return shape and the four unexplained parameters keep it from full marks.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across five parameters (including a nested packageRef), so the description carries the full burden; it meaningfully explains grantedScopes as the intersection with the manifest's requested scopes (never a superset), which is the security-critical parameter. However, source, packageRef, idempotencyKey, and workspaceId receive no semantic treatment at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb+resource ("Installiere eine Erweiterung") and then elaborates the exact mechanics: checksum pin verification, capability rejection, permission intersection, compat resolution, and manifest persistence. An agent knows precisely what the operation does, but it never names or distinguishes itself from close siblings such as preview_plugin_install, enable_plugin, or get_plugin_registry_entry.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied through the described preconditions (pinned sha256 in the bundle, manifest scopes, compat_range) and the failure codes; there is no explicit "use this instead of preview_plugin_install" or "call X first" routing. An agent can infer that install is the terminal step after previewing, but must guess that from sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_adjustA
Idempotent

Post a single reason-coded quantity adjustment. Supply itemId, locationId, qtyDelta (signed integer thousandths; positive raises on-hand, negative lowers it), reasonCodeId (mandatory, must be active), optional note (required when the reason has requiresNote), optional lotId / serialId, optional unitCostMinor (a Rappen snapshot for the J03 valuation layer), optional effectiveDate (ISO date, default today). It validates the reason and note, asserts the period is open, then mints ONE J02 inventory_move (movement_type adjustment) and records an inventory_adjustment row linking the movement to the reason. Rejections mint nothing: reason_inactive / not_found / no_active_reasons (bad or missing reason), note_required, invalid_qty (qtyDelta 0), insufficient_stock (would overdraw with allow_negative_stock off), period_locked. Idempotent under idempotencyKey (a replay returns the original, posting no second movement). CONSEQUENCE: Adjusts the item's stock by the quantity, with your reason; nothing is booked to the ledger. A wrong adjustment is reversed with an opposite one, and both stay on record.

NameRequiredDescriptionDefault
noteNo
lotIdNo
itemIdYes
qtyDeltaYes
serialIdNo
locationIdYes
workspaceIdYes
reasonCodeIdYes
effectiveDateNo
unitCostMinorNo
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the annotations by disclosing the exact side effects: minting one J02 inventory_move plus an inventory_adjustment row, validating the reason and note, asserting the period is open, and listing all rejection codes including insufficient_stock and period_locked. It also explains idempotencyKey replay behavior and the CONSEQUENCE that no ledger entry is booked and corrections require an opposite adjustment.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with the action and parameter meanings, then behavior, then a clearly labeled CONSEQUENCE. It is long for a tool description, but nearly every sentence carries necessary information given the 11 parameters and complex posting semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and only minimal annotations, the description supplies validation rules, rejection codes, idempotency semantics, side effects, and reversal guidance. An agent has enough information to invoke it correctly and understand the consequences without opening other documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the full burden and does so well: it defines qtyDelta as signed integer thousandths, reasonCodeId as mandatory and active, note as conditionally required when the reason has requiresNote, unitCostMinor as a Rappen snapshot for the J03 valuation layer, and effectiveDate as an ISO date defaulting to today. Only workspaceId lacks explicit semantic treatment, which is minor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Post a single reason-coded quantity adjustment.' The word 'single' distinguishes it from the batch sibling inventory_adjust_batch, and the detailed posting behavior makes clear it is not a read or generic move tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (one adjustment, not a batch) and lists prerequisites like an active reason and open period, but never explicitly names alternatives such as inventory_adjust_batch, inventory_move, or stock_move or states when not to use it. Usage is inferable but not explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_adjust_analysisA
Read-only

Aggregate adjustment quantity and value impact over a date window, grouped by any of reason, category, item, location (default reason). Returns per-group adjustmentCount, net qtyDelta and valueImpactMinor (SUM(qtyDelta * unitCostMinor) in Rappen). Reversal rows are included so a reversed adjustment nets to zero, giving an honest shrinkage / write-down figure for Swiss Inventar review.

NameRequiredDescriptionDefault
toDateNo
groupByNo
fromDateNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses important behavior: reversal rows are included and net to zero, valueImpactMinor uses Rappen, and the default grouping is reason. It also reveals that the metric is 'honest shrinkage / write-down,' which helps the agent reason about what the numbers mean.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three dense sentences with no filler. Each clause adds unique value: aggregation scope, grouping options, return fields, formula, unit, and reversal behavior. It is efficiently front-loaded and stays appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description appropriately explains return metrics and the reversal semantics, which is the core context an agent needs. It is slightly incomplete because it does not clarify date-range bounds, the required workspaceId role, or groupBy array syntax, but the main behavioral contract is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain the groupBy values (reason, category, item, location) and mentions a date window implicitly mapping to toDate/fromDate, but it never names workspaceId or describes expected formats, date inclusivity, or how the groupBy array should be structured. Partial compensation, not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb ('Aggregate') and clearly names the resource and output: adjustment quantity and value impact over a date window, grouped by reason/category/item/location. It also defines the return metrics and even the exact formula, making the tool's purpose unambiguous and distinguishable from raw adjustment-list and adjustment-write siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: it is the tool for an aggregate, per-group summary of adjustment impact and is framed for 'Swiss Inventar review,' which implies when a summarized figure is needed. It does not explicitly name alternatives or state when not to use it, but the aggregate-vs-list distinction is clear enough from the wording.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_adjust_batchA
Idempotent

Post a multi-line adjustment atomically under one generated batchId. lines[] each carry itemId, locationId, qtyDelta, reasonCodeId (may differ per line) and optional lotId / serialId / note / unitCostMinor. Every line is validated (reason active, note policy) BEFORE any mint and the period is asserted once; all lines mint in ONE transaction. If any line fails (inactive reason, missing required note, insufficient stock, invalid qty), the WHOLE batch rolls back and nothing is written. effectiveDate defaults to today. Idempotent under idempotencyKey. CONSEQUENCE: Adjusts stock for every line in one go, each with its reason; nothing is booked to the ledger. A wrong batch is reversed with opposite adjustments, and both stay on record.

NameRequiredDescriptionDefault
linesYes
descriptionNo
workspaceIdYes
effectiveDateNo
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses validation-before-mint behavior, one-transaction atomicity, whole-batch rollback on any line failure, default effectiveDate, idempotency, and that nothing is booked to the ledger. It also explains reversal behavior and that both original and reversal remain on record.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core atomic-batch purpose and structured around inputs, validation/rollback, defaults, and consequences. It is somewhat repetitive about atomicity and rollback, but every sentence adds useful operational context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation tool with no output schema, the description covers the critical behavior an agent needs: atomicity, validation, rollback, idempotency, ledger impact, and reversal. It could be more complete by describing the response shape and all top-level parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by naming line fields and optional fields such as lotId, serialId, note, and unitCostMinor, and by explaining effectiveDate and idempotencyKey. It still omits workspaceId and the top-level description parameter, so it does not fully document every parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Post a multi-line adjustment atomically under one generated batchId.' It clearly distinguishes this batch tool from single-line adjustment and reversal siblings through the atomic multi-line scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this is for multi-line atomic adjustments and explains that a wrong batch is reversed with opposite adjustments, which gives strong context for when to use it. However, it does not explicitly name `inventory_adjust` or `inventory_adjust_reverse` as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_adjust_listA
Read-only

List manual adjustments (newest first) with reason code + name + category, item and location names, the minted movement id, note, signed qtyDelta and any reversal back-link. Filterable by fromDate / toDate (effective date), itemId, locationId, reasonCodeId, category and batchId. Reversal rows are excluded unless includeReversals. Paginated by limit (default 100, max 500) and offset.

NameRequiredDescriptionDefault
limitNo
itemIdNo
offsetNo
toDateNo
batchIdNo
categoryNo
fromDateNo
locationIdNo
workspaceIdYes
reasonCodeIdNo
includeReversalsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, which is consistent. The description adds behavioral details beyond annotations: reversal rows are excluded unless includeReversals is set, and pagination with default limit 100 and max 500. It also mentions sorting (newest first). These are valuable behavioral disclosures that help an agent anticipate results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph that front-loads the purpose, then lists returned fields, filters, and pagination. It is informative without being overly verbose, though it could be slightly more structured (e.g., bullet points). Overall, it earns its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 11 parameters, 1 required, and no output schema, the description is remarkably complete. It specifies return fields, filters, sorting, pagination limits, and the reversal exclusion behavior. An agent has enough information to call it correctly and interpret results. The only minor omission is the exact response structure, but the listed fields suffice.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It does so by listing most parameters and their meanings: fromDate/toDate as effective date, itemId, locationId, reasonCodeId, category, batchId, and pagination params with defaults. It does not detail workspaceId but that is required and obvious. The description adds semantic meaning beyond the bare schema, though not exhaustive for every parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action: listing manual adjustments, sorted newest first, with explicit fields returned (reason code, item/location names, movement id, qtyDelta, etc.). It differentiates from siblings like inventory_adjust (which likely creates) by specifying 'manual adjustments' and listing fields, 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.

Usage Guidelines4/5

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 its filtering capabilities, including date range, item, location, reason, category, and batchId. It does not explicitly name alternatives or state when not to use it, but the purpose is evident and the filtering options give a good sense of use cases. It also notes reversal exclusion, adding usage nuance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_adjust_reverseA
Idempotent

Reverse a single adjustment (adjustmentId) or a whole batch (batchId). Each reversal mints an opposite-sign J02 movement carrying its OWN reasonCodeId (mandatory, active) and records a new inventory_adjustment row with reverses_adjustment_id set; the original row and movement are never touched. Reversing a single adjustmentId that belongs to a batch reverses just that line; reversing by batchId reverses every not-yet-reversed line. Already reversed is already_reversed. Batch reversal is atomic. effectiveDate defaults to today (a reversal posts a correction in the current open period). Idempotent under idempotencyKey. CONSEQUENCE: Reverses the adjustment with an opposite movement; the original stays on record. If the reversal was wrong, you adjust the stock again.

NameRequiredDescriptionDefault
noteNo
batchIdNo
workspaceIdYes
adjustmentIdNo
reasonCodeIdYes
effectiveDateNo
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the idempotentHint/destructiveHint annotations: discloses that each reversal mints an opposite-sign J02 movement with its own mandatory reasonCodeId, writes a new inventory_adjustment row with reverses_adjustment_id, and never touches the original row/movement. Also states batch atomicity, effectiveDate defaulting to the current open period, and the consequence of an incorrect reversal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded, leading with the primary verb and the two addressing modes before behavioral detail. Every sentence adds information; the trailing CONSEQUENCE restatement is slightly redundant but useful for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so the description must carry behavior—and it does comprehensively for a mutation tool. Minor gaps remain around the note/workspaceId parameters and error/return shape, but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden and does so for the key params: adjustmentId vs batchId, mandatory active reasonCodeId, effectiveDate defaulting to today, and idempotencyKey idempotence. note and workspaceId remain unexplained, keeping it short of full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (reverse an inventory adjustment) with precise scope: single adjustmentId or whole batchId. An agent can distinguish this from inventory_adjust and inventory_adjust_batch without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly explains the single-vs-batch selection logic, that a single line in a batch reverses just that line, that already-reversed lines return already_reversed, and the 'if the reversal was wrong, adjust the stock again' guidance. It does not name sibling tools as alternatives, but the when-to-use conditions are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_alertsA
Read-only

Der einheitliche Alarm-Feed (unified alerts, US-J07.9): one tool an agent can poll for everything that currently needs attention. It merges low-stock, anomalies, overdue stocktakes, valuation drift and near-expiry lots into a single de-duplicated, severity-prioritised list, each alert carrying a stable alert_key (for optional future acknowledgement), type, severity, title, summary, entity refs, detected_at and a suggested_action hint (create_requisition, run_valuation, complete_stocktake, ...). Optional severity / types / limit filters. Pure computation; no persistent alert store in Phase 1. Empty is an ok empty list. Posts nothing.

NameRequiredDescriptionDefault
limitNo
typesNo
severityNo
thresholdsNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is exceptionally transparent: 'Pure computation; no persistent alert store in Phase 1. Empty is an ok empty list. Posts nothing.' This discloses the read-only, stateless nature beyond the readOnlyHint annotation. It also notes the optional future acknowledgement feature (stable alert_key), setting expectations about current behavior. This fully aligns with the annotation, adding context about persistence and side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then details the output structure, filters, and behavioral notes. Each sentence adds value, but it is somewhat long and could be tightened. For example, the list of alert types could be shortened, and the parenthetical spec reference '(US-J07.9)' is non-essential. Overall, it is well-organized but slightly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema and parameter descriptions, the description carries a heavy burden. It covers the return structure (alert fields), filter options, and behavioral guarantees (read-only, no persistence, empty list). It does not explain the 'thresholds' parameter, which is a notable omission for a tool that aggregates alerts. It also doesn't provide examples or enumerate valid severity/type values, but these might be inferred from context. Overall, it is comprehensive but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% coverage for parameter descriptions, so the description must compensate. It mentions 'Optional severity / types / limit filters', which covers three of the five parameters (limit, types, severity), but omits 'thresholds' and the required 'workspaceId'. While it implies these filters exist, it does not explain their values or formats. The description adds some meaning but leaves gaps, especially for thresholds, which could be crucial for tuning alerts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: a unified alert feed that merges multiple alert types into a single, de-duplicated, severity-prioritized list. It names the specific alert categories (low-stock, anomalies, overdue stocktakes, valuation drift, near-expiry lots) and lists the output fields. This distinguishes it from sibling tools like detect_anomalies or inventory_anomalies, which are more specialized. The verb 'poll' and resource 'everything that currently needs attention' make it unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says it is 'one tool an agent can poll for everything that currently needs attention', which is a clear when-to-use statement. It also mentions optional filters (severity, types, limit) to refine results. However, it does not explicitly name alternative tools or conditions when NOT to use it, such as when a specific anomaly detection is needed instead. The guidance is implicit rather than comparative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_anomaliesA
Read-only

Die Anomalieliste (anomalies, US-J07.5): a prioritised list of DERIVED inventory exception events since a look-back date (default 30 days), each with type, severity (info | warning | critical), title, summary, entity refs, detected_at and a structured payload. Detected types (Phase 1, all derived, no extra table): negative_stock (a live on-hand below zero), large_issue / large_adjustment (absolute qty or value above threshold), unlinked_high_value_issue (a high-value issue with no source document), valuation_drift (cross-ref valuation status), open_stocktake_overdue (a J04 session open past its window) and lot_near_expiry (an open lot inside the J01 expiry window). Thresholds are built-in defaults, overridable per call, never persisted. Empty is an ok empty list. Deterministic for a given snapshot; posts nothing.

NameRequiredDescriptionDefault
limitNo
sinceNo
typesNo
severityNo
thresholdsNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses determinism for a given snapshot, absence of side effects ('posts nothing'), non-persistence of thresholds ('never persisted'), and that an empty result is valid. It also explains that thresholds are built-in defaults overridable per call, adding useful behavioral context not available from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and information-dense with no filler, front-loading the core 'prioritised list of DERIVED inventory exception events. It is somewhat long and opens with a German phrase that adds little for a non-German agent, but every subsequent clause contributes meaningful detail about types, behavior, and output shape.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description covers the result fields, the full type catalogue, threshold behavior, determinism, and side-effect safety. It leaves limit and workspaceId semantics implicit, but the six parameters are simple enough that an agent can invoke the tool correctly with the provided detail and schema names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the parameter-documentation burden and mostly meets it: it explains the since look-back default, enumerates the types filter values, names severity values, and clarifies thresholds are per-call overrides. It does not document limit or workspaceId semantics explicitly, but their purpose is inferable from their names, so the gap is minor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns a prioritized list of DERIVED inventory exception events since a look-back date, and enumerates the exact detected anomaly types with their meanings. It differentiates from likely siblings like detect_anomalies by asserting 'Phase 1, all derived, no extra table' and 'posts nothing', making its role as a read-only anomaly list unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives such as detect_anomalies, procurement_anomalies, inventory_alerts, or attention_summary. The description implies it is for reading derived inventory exceptions, but it never states why this list should be chosen over a sibling, which is a significant gap in a sibling set of this size.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_available_serialsA
Read-only

The serials whose current derived status is available (or a supplied status list), optionally filtered by itemId, current locationId or lotId. A pure read, side-effect free: the allocation/reservation query an agent runs before picking units.

NameRequiredDescriptionDefault
lotIdNo
itemIdNo
statusNo
locationIdNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals safety; the description adds value by stating 'a pure read, side-effect free' and by explaining that the status is a 'current derived status' rather than a raw stored field. It also discloses its intended place in the picking workflow. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences: the first states the resource, default, and filters; the second establishes safety and use case. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is nearly complete for a read-only filtered list tool: it covers purpose, filters, default vs supplied status, and workflow context. Minor gaps remain because there is no output schema and no mention of return shape, pagination, or ordering, but these are not critical for an agent deciding whether to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% property description coverage, so the description carries the burden. It compensates by explaining status as a supplied status list, and identifying itemId, current locationId, and lotId as optional filters, including the important 'current' nuance for locationId. It does not detail status values or workspaceId, but most parameter meaning is conveyed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the precise resource (serials), their status condition (current derived status available or one of a supplied list), and the optional filters (itemId, current locationId, lotId). It is immediately distinguishable from sibling serial and inventory tools by framing it as the allocation/reservation read query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use context: 'the allocation/reservation query an agent runs before picking units.' It also clarifies optional filtering dimensions. It does not explicitly list sibling alternatives or say when not to use it, but the context is strong enough for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_balanceA
Read-only

On-hand quantity as the pure SUM of matching movements (never a cached column). Filter by any subset of itemId, locationId, lotId, serialId, and an inclusive asOf date (effective_date <= asOf); omit asOf for now. Returns qtyOnHand for the whole filter plus a per item x location breakdown. A guessed foreign workspace id returns zero / empty, never data.

NameRequiredDescriptionDefault
asOfNo
lotIdNo
itemIdNo
serialIdNo
locationIdNo
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already present, the description adds genuine value: exact computation semantics (SUM of matching movements, never cached) and a specific failure behavior ('A guessed foreign workspace id returns zero / empty, never data'). Minor gaps remain (no note on output size, units, or pagination), but annotations reduce the burden and the added context is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, each carrying load-bearing information: the computation semantics are front-loaded, filter rules are compressed into one clause, and the return shape plus workspace failure mode round it out. Zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query tool with no output schema, the description nicely compensates by stating the return shape (whole-filter qty plus breakdown). Filtering, asOf inclusivity, and workspace scoping are all covered. The only gaps are minor (numeric format/units of qtyOnHand) and no explicit sibling routing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it covers every parameter: the four filter dims (itemId, locationId, lotId, serialId), asOf (inclusive with effective_date <= asOf, omittable), and workspaceId (foreign id yields empty). Only value formats/examples are missing, which is minor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('On-hand quantity as the pure SUM of matching movements') and clearly scopes what is returned (qtyOnHand for the filter plus an item x location breakdown). It differentiates from cached-report siblings by explicitly declaring 'never a cached column'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Filter semantics are well explained ('any subset... inclusive asOf (effective_date <= asOf); omit asOf for now'), and 'never a cached column' implies when to prefer it over cached alternatives. However, no sibling tool is named and no when-not-to-use guidance is given, which matters given several similar inventory-balance siblings (stock_on_hand, inventory_balance_by_location, inventory_stock_position).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_balance_by_locationA
Read-only

On-hand quantity broken down by location, plus a warehouse roll-up. A pure read model over the OP2 stock_movement ledger (SUM of signed qty per item x location), never a cached column. Filter by itemId, warehouseId or locationId; includeZero returns pairs that net to zero. Quantities are integer units.

NameRequiredDescriptionDefault
itemIdNo
locationIdNo
includeZeroNo
warehouseIdNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses that this is a pure read model over the OP2 stock_movement ledger, that it is never a cached column, that quantities are integer units, and that includeZero returns net-zero pairs. This gives an agent meaningful behavioral expectations beyond the basic read-only signal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: every sentence adds distinct value—purpose, computational provenance, filters, special case behavior, and units. It is front-loaded with the primary purpose and contains no filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential semantic details for a read-only inventory query: result granularity, filtering options, zero-balance handling, and integer units. It stops slightly short of explaining filter combination logic or the exact response shape, but for a read tool with no output schema it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates partially: it explains includeZero and names itemId, warehouseId, and locationId as filters. However, it does not mention the required workspaceId, how filters interact (e.g., AND/OR), or any value formats, leaving some parameter semantics to be inferred.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear resource—on-hand quantity by location—and adds a warehouse roll-up, distinguishing it from related inventory read tools like stock_on_hand or inventory_balance. It also specifies the data source and computational nature, which further clarifies exactly what this tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use this tool: when a location-level inventory balance is needed, optionally filtered by item, warehouse, or location. It does not explicitly name alternatives or state when not to use it, but the context is strong and self-contained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_cycle_count_statusA
Read-only

Der Status der Inventuren (cycle-count / stocktake status, US-J07.6): the open and recently committed J04 sessions with session_id, status, freeze_at, warehouse scope, line_count / counted_count / uncounted_count / review_required_count, committed_at, inventar_document_id, days_open and an overdue flag (open past the configured window). Optional status / warehouse_ids / overdue_only filters. Reuses the J04 inventory_stocktake_list read model. Variance qty / value are left null in Phase 1 (they need the per-session report). Useful for operational follow-up and the close-pack checklist. Reads only.

NameRequiredDescriptionDefault
statusNo
thresholdsNo
workspaceIdYes
overdue_onlyNo
warehouse_idsNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is consistent with the readOnlyHint annotation and explicitly states 'Reads only.' It adds useful non-obvious context: reuse of the J04 read model, the Phase 1 limitation that variance values are null, and the overdue flag behavior. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is dense and information-rich but runs together as a mixed-language paragraph with slash-separated field lists. It front-loads the purpose and avoids fluff, but internal codes like 'US-J07.6' and 'J04' add jargon without much structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It partially compensates for the missing output schema by enumerating returned fields and filters. Still, with no output schema and no parameter descriptions, it should clarify the thresholds object, valid status filter values, and the meaning of 'recently committed' to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description names three of the five parameters (status, warehouse_ids, overdue_only) and gives some sense of their purpose, which matters because schema coverage is 0%. However, it does not explain the required workspaceId or the nested thresholds object, leaving a meaningful gap in parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource—inventory/cycle-count status of J04 sessions—and lists the fields returned, so its purpose is concrete. It lacks an explicit action verb like 'list' or 'get' and does not explicitly distinguish itself from sibling inventory tools, though its status-focused scope is evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says the tool is useful for operational follow-up and the close-pack checklist, which gives a clear intended context. It does not name alternative tools or state when not to use it; the hint that variance reporting needs the per-session report is the closest it comes to exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_ensure_default_locationA
Idempotent

Return the workspace default warehouse + location, creating the MAIN / DEFAULT pair if none exists yet. Idempotent and race-safe: concurrent calls produce exactly one pair. This is how a legacy D01 single-location workspace gains a default with no migration.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint=false, so the safety profile is partly covered; the description still adds real value by promising race-safety under concurrency ("concurrent calls produce exactly one pair") and by disclosing the write side effect, i.e. that a MAIN/DEFAULT pair is created when absent. It does not say what happens under permission failure or what the created records' identifiers look like, so it is good but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action and its conditional creation, followed by the concurrency guarantee and then the motivating scenario. No sentence is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool this is nearly sufficient: it explains the returned pair, the creation fallback, concurrency behavior, and the migration-avoidance rationale. Only failure modes and authorization prerequisites are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one required parameter, workspaceId, with 0% schema description coverage, so the description carries the burden but only implicitly scopes itself to a workspace. The parameter is self-evident from its name, which limits the damage, but no format, identifier kind, or example is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb+resource: return (or lazily create) the workspace default warehouse and location pair, with the conditional creation spelled out. It is fully intelligible on its own, but it never contrasts itself with the closely related siblings warehouse_set_default, location_set_default, warehouse_create and location_create, so the agent must infer which tool owns the default-setting responsibility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"This is how a legacy D01 single-location workspace gains a default with no migration" gives a concrete scenario that selects this tool, and the "creating ... if none exists" clause implies read-mostly safe repeated use. There is no explicit when-not clause or named alternative (e.g. use location_set_default for an existing location), which keeps it below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_get_configA
Read-only

Read the workspace inventory policy: allowNegativeStock (default false). When false, an issue or transfer that would drive a balance below zero is refused with insufficient_stock.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true provided by annotations, the description adds value by explaining the default value of allowNegativeStock and the consequence when it is false (refusal with insufficient_stock). No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The action and key detail are front-loaded, and the behavioral consequence is explained in a compact way.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one self-explanatory parameter and annotations already conveying safety, the description fully enables correct invocation. It explains the policy meaning sufficiently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the single parameter workspaceId is self-explanatory from its name and context. The description focuses on the returned policy rather than the parameter, which is acceptable for such a simple parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads the workspace inventory policy and specifies the exact field (allowNegativeStock) with its default. The verb 'Read' differentiates it from the sibling inventory_set_config.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to check the inventory policy, but it does not explicitly state when to use it versus alternatives. It provides useful context about the setting's behavior but no direct guidance or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_lot_traceA
Read-only

Die Chargen- / Seriennummern-Verfolgung (lot / serial trace, US-J07.7): given a lot_code or a serial_number (optionally disambiguated by item_id), return the current position(s) (location and remaining qty for a lot, current location and status for a serial) and the full chronological J02 movement history for that lot / serial. Supports the OR 957a duty to keep orderly, verifiable inventory records. A lot / serial that does not exist in this workspace answers a soft found:false (not a hard error, and never a cross-tenant leak). Reads only, posts nothing.

NameRequiredDescriptionDefault
item_idNo
lot_codeNo
workspaceIdYes
serial_numberNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'Reads only, posts nothing.' It adds valuable behavioral context beyond the annotation: the soft found:false response for non-existent lots/serials, the explicit 'never a cross-tenant leak' guarantee, and the scope of the returned history (chronological J02 movements). It does not detail pagination or output shape, but with no output schema and readOnlyHint present, the description carries a reasonable burden and covers 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph that front-loads the core purpose and then adds the regulatory context, error behavior, and read-only guarantee. Every sentence earns its place, though the regulatory citation (OR 957a) and the cross-tenant leak note add length without directly affecting invocation. It is appropriately sized for a tool with 4 parameters and no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (two alternative lookup keys, optional disambiguation, required workspaceId, no output schema), the description covers the essential invocation context: what inputs are accepted, what is returned, the soft-failure mode, and the read-only safety profile. It does not specify pagination, sorting, or the exact structure of the movement history, but those are reasonable gaps for a description of this length and are partially covered by the 'full chronological J02 movement history' phrasing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does: it explains that lot_code or serial_number are the primary lookup keys, that item_id optionally disambiguates, and that workspaceId is the required scope. It does not explain the exact format of lot_code/serial_number or whether both can be provided together, but it adds meaning beyond the bare schema property names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('return'), a specific resource ('current position(s) and full chronological J02 movement history'), and the input keys (lot_code or serial_number, optionally disambiguated by item_id). It also names the regulatory purpose (OR 957a) and explicitly distinguishes itself from a hard error or cross-tenant leak. This clearly differentiates it from siblings like lot_search, serial_get, inventory_movement_history, and stock_on_hand.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use it: when you need current position plus full movement history for a lot or serial. It also gives an exclusion: a non-existent lot/serial returns found:false rather than a hard error. However, it does not explicitly name alternative tools for simpler lookups (e.g., lot_get, serial_get, inventory_movement_list) or state when NOT to use it in favor of those, so it misses the explicit when-not/alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_low_stockA
Read-only

Die Liste tiefer Bestaende (low stock, US-J07.2): every stock-tracked item whose on-hand has fallen to or below its D00 reorder point, ordered by severity (deepest shortfall, then lowest days-of-cover, first). Each row carries current_qty, reorder_point, shortfall_qty, last_movement_at, a simple average daily usage derived from recent outbound movements and an estimated days-of-cover; when there is not enough usage history the cover is null with warning usage_history_insufficient. Optional location_ids / warehouse_ids narrow the on-hand, min_shortfall filters, include_zero keeps zero-reorder items. safety_stock / suggested_reorder_qty are null until a later item-master extension adds the columns. Empty is an ok empty list. Pure derivation over the ledger; posts nothing.

NameRequiredDescriptionDefault
thresholdsNo
workspaceIdYes
include_zeroNo
location_idsNo
min_shortfallNo
warehouse_idsNo

TDQS

A3.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation: it states 'Pure derivation over the ledger; posts nothing,' clarifies that insufficient history yields null days-of-cover with a 'usage_history_insufficient' warning, notes that empty is an acceptable empty list, and flags safety_stock/suggested_reorder_qty as null until a future extension. These are concrete behavioral disclosures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense, front-loading the core definition, then ordering, row fields, filters, and edge cases. The cryptic 'US-J07.2' and German phrase add little, but overall structure is reasonable for a tool with six parameters and no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because there is no output schema, the description compensates by listing row fields (current_qty, reorder_point, shortfall_qty, etc.), ordering, null behavior, and empty-list semantics. The unexplained 'thresholds' parameter prevents a perfect score, but the rest of the behavior is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate, and it does explain location_ids, warehouse_ids, min_shortfall, and include_zero. However, the 'thresholds' object parameter is entirely unexplained, and workspaceId is mentioned only as a required schema field, leaving a clear gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource and result set: 'every stock-tracked item whose on-hand has fallen to or below its D00 reorder point' with a defined ordering. However, it does not differentiate itself from the near-identically named sibling 'stock_low_stock', so an agent may struggle to choose between them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives such as inventory_reorder_candidates, stock_on_hand, or the similarly named stock_low_stock. The description only explains optional filter parameters, not the selection context that distinguishes this tool from siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_moveA
Idempotent

Record ONE append-only inventory movement, the only way on-hand ever changes (on-hand is always the live SUM of movements, never a stored column). movementType is one of opening|receipt|issue|transfer_out|transfer_in|adjustment|return|scrap; qty is signed integer units (opening/receipt/transfer_in must be positive, issue/transfer_out/scrap negative, adjustment/return carry the caller's sign) and must be non-zero (invalid_qty). unitCostMinor is the integer-Rappen cost snapshot for later valuation. The item must be stockable (item_not_stockable) and, when its tracking_mode demands it, carry a lotId (lot_required) and/or serialId (serial_required); a serial movement is a unit of one, so an INBOUND movement for a serial the workspace already holds is refused with serial_already_in_stock before any row is written (issue, return or scrap it first; use inventory_transfer to relocate it). When allow_negative_stock is false (default) an issue that would drive the balance below zero is refused with insufficient_stock before any row is written. Rows are immutable; a correction is another movement, never an edit. CONSEQUENCE: Records one stock movement for the item, with its date and cost; nothing is booked to the ledger. Movements are never edited; a wrong one is corrected with another movement.

NameRequiredDescriptionDefault
qtyYes
lotIdNo
itemIdYes
serialIdNo
locationIdYes
descriptionNo
workspaceIdYes
movementTypeYes
effectiveDateYes
unitCostMinorNo
idempotencyKeyYes
sourceDocumentIdNo
sourceDocumentTypeNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far beyond the annotations: discloses append-only immutability, that validation failures (invalid_qty, lot_required, serial_required, serial_already_in_stock, insufficient_stock) abort before any row is written, and that nothing is booked to the ledger. Idempotency is declared by annotation but the description adds the substantive behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and dense with useful rules, but it is a long run-on that repeats itself: immutability appears both as "Rows are immutable; a correction is another movement, never an edit" and again in the closing sentence, and the CONSEQUENCE block restates earlier content. Tightening would make the critical refusal conditions easier to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter mutation with no output schema, the description covers the domain model, all business-rule refusals, sign conventions, tracking requirements and the no-ledger consequence. An agent can call this correctly and predict its failure modes without further documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load, and it does for the hardest parameters: signed qty rules per movementType, unitCostMinor as an integer-Rappen snapshot, and lotId/serialId conditions. It leaves idempotencyKey, effectiveDate, workspaceId, locationId and sourceDocument* undocumented, so some required parameters remain unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ("Record ONE append-only inventory movement") and immediately frames the domain model (on-hand is the live SUM of movements). It is clearly distinguishable from siblings like inventory_transfer, inventory_adjust and stock_move because it names itself as the sole mutation path for on-hand.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing for the transfer case ("use inventory_transfer to relocate it") and states preconditions (stockable item, lot/serial requirements, allow_negative_stock default). It does not explicitly contrast with inventory_adjust or stock_move, so an agent must infer when to prefer this tool over those, which keeps it below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_movement_getA
Read-only

Read one movement by id, with its full cost snapshot, type, effective date, location, lot/serial, source document link, description and actor. A foreign or unknown id is not_found, never cross-tenant data.

NameRequiredDescriptionDefault
movementIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds valuable behavioral context: a foreign or unknown id returns not_found, and data never crosses tenant boundaries. This goes beyond annotations to clarify error handling and security guarantees.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the core action ('Read one movement by id') followed by a succinct list of returned fields and an error/tenant note. Every clause adds value without unnecessary filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-id tool with no output schema, the description lists the key return fields and error behavior. It does not describe the exact response envelope or mention authentication, but given the low complexity and the explicit field list, it is sufficiently complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters. It only hints at 'by id' without specifying that movementId is the id or explaining the role of workspaceId. It does not mention that workspaceId is required for tenant scoping, leaving parameter semantics largely unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('one movement by id'), and enumerates the exact fields returned (cost snapshot, type, effective date, location, lot/serial, source document link, description, actor). It also clarifies error behavior (not_found) and tenant isolation, distinguishing it from list/history siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when you have a specific movement id, but does not explicitly state when to use this versus alternatives like inventory_movement_list or inventory_movement_history. No exclusions or alternative names are mentioned, but the purpose is clear enough to infer the primary use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_movement_historyA
Read-only

Die Bewegungshistorie (movement history, US-J07.4): the ordered, filterable J02 movement rows for one item (required), optionally narrowed by location, lot_code, serial_number and a from_date / to_date range, with a server-computed running on-hand balance that closes to the live inventory_stock_position qty for the same filter (spec tripwire). Reuses the J02 inventory_movement_list read model, so history never becomes a second projection. Supports limit / offset pagination; an item / location / lot / serial that does not exist is not_found; from_date after to_date is invalid_date_range. Empty history is an ok empty list. Reads only, posts nothing.

NameRequiredDescriptionDefault
limitNo
offsetNo
item_idYes
to_dateNo
lot_codeNo
from_dateNo
location_idNo
workspaceIdYes
serial_numberNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, but the description adds substantial behavioral detail: it is 'Reads only, posts nothing' (reinforcing the annotation), spells out exact error conditions ('not_found' for nonexistent item/location/lot/serial, 'invalid_date_range' when from_date after to_date), describes the empty response as 'ok empty list', and documents pagination with limit/offset. It also explains a guarantee that the running balance 'closes to the live inventory_stock_position qty' (a spec tripwire), which is valuable behavioral context an agent would need. This goes beyond the annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph but packed with information. It front-loads the purpose and then details filters, pagination, errors, and read-only nature. Each sentence earns its place; there is little fluff. The inclusion of internal codes like 'US-J07.4' and 'spec tripwire' adds a minor overhead but does not detract from the overall structure. It is longer than a simple sentence but justified by the complexity of the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 parameters, filters, pagination) and the absence of an output schema, the description covers a lot: filter semantics, pagination, error conditions, and the running balance guarantee. However, it fails to describe the structure of the returned data. An agent cannot know what fields the movement rows contain or how the running balance is represented in the response. Additionally, specifics like date format and pagination defaults are missing. These gaps would hinder correct invocation and interpretation of results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 9 parameters with 0% description coverage, so the description must bear the burden of explaining them. It does mention the core filters ('optionally narrowed by location, lot_code, serial_number and a from_date / to_date range') and states that item_id is required. However, it uses 'location' while the schema property is 'location_id', which could cause confusion. It does not explain workspaceId at all, nor the format of date strings, nor any defaults for limit/offset. The description gives high-level semantics but lacks precise mapping to each parameter and their formats, a significant gap given zero schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a clear statement of the tool's function: 'the ordered, filterable J02 movement rows for one item (required)' and explicitly lists the filter dimensions (location, lot_code, serial_number, date range). It also distinguishes itself by adding a 'server-computed running on-hand balance' that closes to inventory_stock_position, which is a unique capability not present in sibling tools like inventory_movement_list. The read-only nature is stated, and the phrase 'Reuses the J02 inventory_movement_list read model' positions it relative to an existing sibling without confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on what the tool does and when it might be used (filtered history with running balance), but it does not explicitly state when to use this tool instead of others. It mentions 'Reuses the J02 inventory_movement_list read model' but does not elaborate on the difference or when to choose one over the other. There is no mention of an alternative tool or exclusions. Thus, while the intended usage is implied, explicit guidance is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_movement_listA
Read-only

The chronological movement history (newest first), filterable by itemId, locationId, lotId, serialId, a movementType list, a fromDate/toDate range, sourceDocumentType/sourceDocumentId and transferGroupId, with limit/offset pagination. When a single itemId is filtered each row also carries a server-computed runningBalance (oldest to newest). History is never purged.

NameRequiredDescriptionDefault
limitNo
lotIdNo
itemIdNo
offsetNo
toDateNo
fromDateNo
serialIdNo
locationIdNo
workspaceIdYes
movementTypeNo
transferGroupIdNo
sourceDocumentIdNo
sourceDocumentTypeNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds valuable behavioral context: newest-first ordering, a conditional runningBalance when a single itemId is filtered, and a never-purged history guarantee. These details meaningfully shape expectations without contradicting the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler. The core behavior is front-loaded, filters are consolidated into one list, and the special conditional behavior and retention guarantee each earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no output schema, the description covers ordering, filtering, pagination, a conditional computed field, and retention. It does not mention how filters combine (AND vs OR) or the response field structure, but these are minor given the strong overall coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It lists nearly all filterable parameters (itemId, locationId, lotId, serialId, movementType list, fromDate/toDate, sourceDocumentType/sourceDocumentId, transferGroupId, limit/offset) and explains the special runningBalance condition. It does not define value formats or enums, but it adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as chronological movement history and implies the 'list' verb. It is specific about ordering and the core resource, but it does not differentiate from the sibling tool inventory_movement_history, which could plausibly overlap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance about when to choose this tool over alternatives. With siblings like inventory_movement_history and inventory_stock_position present, the agent is left to infer the appropriate use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_on_hand_by_lotA
Read-only

On-hand quantity broken down by lot x location: a pure read model over the OP2 stock_movement ledger (SUM of signed qty per lot x location, joined to the lot master), never a cached column. Filter by itemId, locationId, lotId, a status list and an expiryBefore cutoff; includeZero returns pairs that net to zero. Empty until J02 movements carry a lot_id.

NameRequiredDescriptionDefault
lotIdNo
itemIdNo
statusNo
locationIdNo
includeZeroNo
workspaceIdYes
expiryBeforeNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains the computation method (SUM of signed qty from the ledger), that it is never cached, the includeZero parameter causes zero-net pairs to be returned, and the data caveat about J02 movements. This adds significant behavioral context beyond the readOnlyHint annotation, making it transparent about how results are computed and when data may be empty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, two sentences, with the core purpose and filtering capabilities front-loaded, and the caveat as an afterthought. No wasted words, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is a read-only report with seven parameters, the description covers the computation logic, filters, and a critical data caveat. There is no output schema to explain return shape, but the description's detail on what is returned (lot x location pairs, includeZero behavior) is sufficient for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains the purpose of includeZero (returns pairs that net to zero) and lists filter dimensions (itemId, locationId, lotId, status list, expiryBefore), which adds meaning to the parameters. It does not detail formats for status or expiryBefore, but the coverage is reasonable given the schema has no descriptions, so the description compensates well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is a read-only report of on-hand quantity grouped by lot and location, derived from the OP2 stock_movement ledger. It distinguishes itself from other inventory tools like stock_on_hand and inventory_balance_by_location by specifying the lot x location granularity and the ledger source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions it is a pure read model and notes a caveat about J02 movements to guide on data availability, but it does not explicitly state when to use this tool over alternatives like stock_on_hand or inventory_balance_by_location. The sibling list suggests these exist, so explicit guidance would improve it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_reason_archiveA
DestructiveIdempotent

Soft-archive a reason code (isActive = 0): it disappears from pickers but stays queryable for historical joins, and new adjustments can no longer cite it. Never a destructive delete. A foreign or unknown id is not_found. Idempotent under idempotencyKey.

NameRequiredDescriptionDefault
idYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavior beyond the annotations: what becomes invisible (pickers), what stays queryable (historical joins), what is blocked (new citations), and not_found for foreign/unknown ids. However, it does not reconcile the tension with destructiveHint=true — the 'Never a destructive delete' phrasing could read as contradicting the annotation, and the agent is left to infer which framing governs. Return-shape/audit-trail behavior is not described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph, front-loaded with the verb and the state change. Every clause (pickers, historical joins, no new citations, not_found, idempotency) carries distinct information with no repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a small 3-parameter mutation with no output schema, the description covers effect, reversibility, edge-case error and retry semantics — enough to call it correctly. Minor gaps: workspaceId scoping and what the response contains after archiving.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It partly does: 'id' is tied to a reason code with a not_found rule for foreign/unknown ids, and idempotencyKey semantics are stated. workspaceId is never mentioned, and no format examples are given for the three required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Soft-archive a reason code') plus the concrete mechanism ('isActive = 0'), so the effect is unambiguous. It is clearly distinguishable from siblings like inventory_reason_update, inventory_reason_list and inventory_reason_get without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the consequences that drive the archive-vs-delete decision ('disappears from pickers', 'new adjustments can no longer cite it') and explicitly rules out hard deletion, which tells an agent when to pick this over inventory_reason_update. It stops short of naming sibling alternatives or stating preconditions (e.g. already-archived, permissions).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_reason_createA
Idempotent

Create a workspace-scoped adjustment reason code. code is upper-normalised and unique per workspace, case-insensitively (duplicate_code on collision). category is one of shrinkage, damage, found, count_variance, obsolescence, theft, quality, correction, reversal, system, other. requiresNote forces a non-empty note on any adjustment citing this code; defaultForStocktake marks it selectable by a stocktake commit. Idempotent under idempotencyKey.

NameRequiredDescriptionDefault
codeYes
nameYes
categoryYes
descriptionNo
workspaceIdYes
requiresNoteNo
idempotencyKeyYes
defaultForStocktakeNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint, yet the description adds real behavioral context: case-insensitive upper-normalisation of code, per-workspace uniqueness, the specific duplicate_code failure, and which parameter makes the call idempotent. It stops short of stating permission requirements or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with the create action and followed by constraints in a sensible order; nothing is padding. Some sentences pack multiple rules (normalisation + uniqueness + error code) into one clause chain, which costs a little readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an eight-parameter mutation tool with no output schema and thin annotations, the description covers most of what an agent needs: field semantics, the enum, uniqueness/duplicate handling, and idempotency. Missing only what a successful call returns and any permission preconditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the schema declares category as a bare string with no enum, so the description's enumeration of the eleven allowed category values is essential value-add, as are the semantics of requiresNote, defaultForStocktake and idempotencyKey. It leaves name, description and the workspaceId scope implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opening clause states a specific verb and resource ('Create a ... adjustment reason code') plus scope ('workspace-scoped'), which cleanly separates it from inventory_reason_update, inventory_reason_archive, inventory_reason_get and inventory_reason_list in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb 'Create'; the description never says when to create a new reason versus updating an existing one via inventory_reason_update, nor what prerequisites (role, workspace setup) are needed. An agent can infer intent but gets no explicit routing or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_reason_getA
Read-only

Read one reason code by id. A foreign or unknown id is not_found.

NameRequiredDescriptionDefault
idYes
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds valuable behavioral context by specifying that a foreign or unknown id results in not_found, which helps the agent anticipate error behavior without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences deliver the essential meaning and error behavior with no redundant wording. The core action is front-loaded, and the not_found clarification earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-by-id tool with readOnlyHint and no output schema, the description is nearly complete: it names the action, the target resource, the key parameter, and a notable failure mode. It only lacks a minimal note on workspaceId semantics, but the overall guidance is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It meaningfully clarifies that 'id' selects a single reason code and that unrecognized ids yield not_found. However, it does not explain the role of workspaceId, leaving one of the two required parameters semantically unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Read one reason code by id.' This clearly identifies the tool as a single-entity fetch, distinguishing it from sibling tools like inventory_reason_list, inventory_reason_create, and inventory_reason_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'by id' phrasing implies this tool is for retrieving a single reason code rather than listing multiple ones, but it does not explicitly state when to use this tool versus alternatives or mention any exclusions. The usage context is implied, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_reason_listA
Read-only

List reason codes ordered by code, filterable by activeOnly and category. Returns each code with its category, requiresNote / defaultForStocktake flags and active lifecycle.

NameRequiredDescriptionDefault
categoryNo
activeOnlyNo
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, and the description adds useful behavioral detail beyond that: results are sorted by code, filterable by activeOnly and category, and each returned code includes category, flags, and lifecycle state. No contradiction with the read-only annotation is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence that front-loads the core action and packs in ordering, filtering, and return content. The phrase 'active lifecycle' is slightly vague, but the overall structure is tight and informative without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with simple parameters and no output schema, the description covers the essential context: what is listed, how it is ordered, what filters exist, and what each result contains. It lacks only minor details such as pagination or explicit default behavior for activeOnly, but nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does clarify the meaning of 'activeOnly' and 'category' as filters and 'ordered by code' as ordering context, but it does not mention the required 'workspaceId' or provide any format/enum detail. The compensation is partial but adequate for these self-explanatory parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') with a clear resource ('reason codes') and adds distinctive detail: ordering by code, available filters, and returned fields. This clearly differentiates it from sibling tools like inventory_reason_get, inventory_reason_create, and inventory_reason_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the tool's purpose clear but does not explicitly state when to prefer it over alternatives or mention any exclusions. Usage is implied by the tool's name and the list/filter framing, but no direct sibling comparison or when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_reason_updateA
DestructiveIdempotent

Update a reason code. The code itself is immutable (it is the classifier historical rows join on); name, description, requiresNote, defaultForStocktake and isActive may change. Setting isActive false is the same soft-archive inventory_reason_archive performs. A foreign or unknown id is not_found. Idempotent under idempotencyKey.

NameRequiredDescriptionDefault
idYes
nameNo
isActiveNo
descriptionNo
workspaceIdYes
requiresNoteNo
idempotencyKeyYes
defaultForStocktakeNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint/destructiveHint annotations, it discloses which fields are mutable vs immutable, why (historical row joins), the error semantics for unknown ids, and the idempotency contract. It does not cover permission requirements or what a partial payload does to omitted fields, but the destructive/soft-archive behavior is made explicit and is consistent with destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, each carrying distinct information (mutability rule, sibling equivalence, error case, idempotency) with the core verb/resource front-loaded. No repetition of schema fields or boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with annotations and no output schema, it covers the important unknowns: mutability, soft-archive semantics, failure mode, and idempotency. Missing is whether omitted fields are left unchanged (a real ambiguity for a partial-update tool) and any note on required permissions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it does add meaning for seven of eight parameters: id as immutable, the five mutable fields, and idempotencyKey as the dedupe key. workspaceId is left implicit and no value formats or constraints are given, which is the remaining gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update a reason code') and immediately narrows scope by enumerating the five mutable fields versus the immutable code. It also distinguishes itself from the sibling inventory_reason_archive by explaining that isActive=false is the equivalent operation, so an agent can tell the two apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operative context: partial field updates, the isActive-false/archive equivalence, and the not_found outcome for foreign or unknown ids. It stops short of an explicit 'use this instead of X when Y' rule for the archive sibling, but the equivalence statement effectively routes the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_reconciliation_checkA
Read-only

The hard reconciliation check a period close calls before it hard-locks a period (YYYY-MM). Returns { status: balanced } when a valuation has been posted at the period end and every inventory control account shows delta 0. Returns a structured valuation_missing error when a non-zero inventory value exists at the period end but no run was ever posted, or a reconciliation_drift error listing the offending accounts and amounts when a delta remains. The period cannot be hard-locked until the difference is explained or a corrective valuation is posted and re-checked. Writes nothing.

NameRequiredDescriptionDefault
periodYes
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While the annotation already declares readOnlyHint true, the description reinforces 'Writes nothing' and additionally reveals the behavioral gate: the period cannot be hard-locked until the difference is resolved. It also explains all possible return structures, which is significant beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and well-structured: it opens with the tool's purpose, then enumerates return outcomes, then the locking consequence, and ends with a clear side-effect statement. Every sentence contributes value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description fully explains return values, error conditions, and preconditions. It covers everything an agent needs to know to call this tool appropriately and interpret the result, especially given its simple two-parameter interface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and there are only two parameters. The description adds critical meaning for 'period' by specifying the format (YYYY-MM), which is essential for correct invocation. WorkspaceId is not described, but it is a common standard parameter. This partially compensates for missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it is the hard reconciliation check called by period close before hard-locking a period. It clearly distinguishes itself from other inventory tools by describing the exact return states (balanced, valuation_missing, reconciliation_drift) and its role in the locking process.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use this tool (during period close to verify a period can be hard-locked), but it does not explicitly mention alternatives or exclusion criteria. It names the context but not other similar tools like inventory_reconciliation_report, so full discrimination is not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_reconciliation_reportA
Read-only

The OP11 reconciliation: per inventory control account, the live sub-ledger valuation at the cut-off (period YYYY-MM or asOf date), the GL balance of the same account at the same cut-off, the delta between them, and a status of balanced (delta 0), drift (a delta remains though a run was posted at the cut-off, e.g. an external GL-only posting) or unposted (the live valuation differs from the GL and no run has closed the gap; the delta is what a new run would post). Returns balanced/drift/unposted counts and the total unposted delta. Optional accountIds narrows the accounts. Writes nothing.

NameRequiredDescriptionDefault
asOfNo
periodNo
accountIdsNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'Writes nothing.' It adds valuable behavioral detail beyond the annotation by explaining what drift vs unposted means, what counts are returned, and that the delta represents what a new run would post. This gives the agent a solid mental model of report semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place, defining the report scope, status semantics, return summary, optional filter, and side-effect safety. It is front-loaded with the report identity and delivers needed definitions without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the full burden of explaining return values; it does so clearly, including counts and total unposted delta. It also covers cutoff selection, status meanings, optional filtering, and the read-only nature, 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description compensates well for most parameters: it explains period format ('YYYY-MM'), the asOf alternative, and that accountIds narrows the accounts. The required workspaceId is left to the schema and not described, which is a minor gap, but the most ambiguous parameters are clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a very specific resource: OP11 inventory reconciliation per inventory control account, comparing sub-ledger valuation to GL balance with delta and status. It clearly differentiates from sibling reporting tools by defining the exact output fields and statuses (balanced/drift/unposted).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear when this report is relevant (reconciling inventory sub-ledger to GL at a cutoff) and how to narrow scope with accountIds, but it does not explicitly name alternative tools or state when not to use this one. Usage is implied rather than explicitly contrasted with siblings like inventory_reconciliation_check or inventory_valuation_report.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_reorder_candidatesA
Read-only

Die Nachbestell-Kandidaten (reorder candidates, US-J07.10): the subset of the low-stock list with a POSITIVE shortfall, each with a suggested_qty (the shortfall in Phase 1), current_qty, reorder_point, estimated days-of-cover and a ready-to-use payload an agent can hand to an I00 requisition or a purchase-order tool. preferred_supplier_id is null until a supplier-preference extension lands. Advisory ONLY: no document is created and nothing is posted. Optional warehouse_ids / location_ids scope. Empty is an ok empty list.

NameRequiredDescriptionDefault
thresholdsNo
workspaceIdYes
location_idsNo
warehouse_idsNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral detail beyond the readOnlyHint annotation: it states 'Advisory ONLY: no document is created and nothing is posted,' discloses that preferred_supplier_id is null until an extension, and notes that an empty list is acceptable. This provides valuable context about side effects, null ability, and return behavior that the annotation alone does 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense yet efficient, packed with multiple key facts in a single paragraph. It is front-loaded with the core purpose and flow, but includes an internal reference (US-J07.10) that may be noise to an agent. Overall, each sentence earns its place, though a bit of trimming could improve clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the output fields, the advisory nature, the optional scope, and the empty-list behavior, which is substantial for a read-only tool without an output schema. It does not explain the thresholds parameter, or any pagination/limits, but these are minor given the tool's simplicity. The description is largely complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains that warehouse_ids and location_ids are optional scope filters, which is useful given the schema has no parameter descriptions. However, it does not mention the required workspaceId or the thresholds parameter at all, and the schema allows additionalProperties, so the description leaves significant parameter ambiguity. With schema description coverage at 0%, the description partially compensates but is not comprehensive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the subset of the low-stock list with a positive shortfall, names the specific output fields (suggested_qty, current_qty, reorder_point, etc.), and explicitly marks it as advisory-only. It distinguishes itself from the full low-stock list by being the filtered subset, and specifies it provides a payload for downstream I00/PO tools. This is a precise verb+resource+filter definition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use this tool: when you need reorder candidates with a positive shortfall, and it warns it is advisory only (no creation or posting), indicating not to use it for transactional actions. It mentions it hands off to requisition or PO tools, implying a follow-up workflow. However, it does not explicitly name sibling alternatives (e.g., inventory_low_stock) or state 'use this instead of X', so some inference about the full list tool is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_set_configA
DestructiveIdempotent

Set the workspace negative-stock posture. allowNegativeStock true disables the insufficient_stock guard (a warning posture for backorder workflows); false (default) enforces it. Plain policy: posts no journal entry and never rewrites history, so flipping the flag changes only future writes.

NameRequiredDescriptionDefault
workspaceIdYes
idempotencyKeyYes
allowNegativeStockYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond the annotations: the setting posts no journal entry, never rewrites history, and only affects future writes, which is exactly what an agent needs before flipping a policy flag. The 'never rewrites history' framing sits in mild tension with destructiveHint=true, but the description never claims a read-only operation and the destructive effect (allowing negative stock) is implied, so this is a clarification rather than a contradiction. It does not mention permissions or idempotency behavior beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the setting and its meaning front-loaded, then the behavioral caveat. Every clause carries information; the only minor cost is density in the second sentence, where the flag semantics and the backorder rationale are packed together.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-required-parameter policy mutation with no output schema, the description covers the two things an agent most needs: what the flag does and what side effects it does not have. The gap is the unexplained idempotencyKey/workspaceId semantics, which the schema leaves bare.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It fully specifies allowNegativeStock (true/false semantics and the false default), but workspaceId and idempotencyKey are left entirely undocumented, so only one of three parameters is covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Set the workspace negative-stock posture', then immediately defines what the flag means (disables the insufficient_stock guard vs. enforces it). It is clearly distinct from siblings like inventory_get_config or goods_receipt_set_config, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete usage context for the non-default value ('a warning posture for backorder workflows') and states which value is the default, so an agent knows the consequence of each choice. It stops short of explicit when-not-to-use guidance or naming alternative tools, but the operational context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_slow_moversA
Read-only

Die Ladenhueter-Ansicht (slow movers / aging, US-J07.8): stock-tracked items with a positive on-hand and no OUTBOUND movement inside a window (min_days_no_movement, default 90), ordered by extended value descending, each with current_qty, last_movement_at, last_outbound_at, days_idle, unit cost and extended_value_rappen (from the pure J03 book value). Optional min_value_rappen and location_ids narrow the list. This surfaces the high-value stagnant stock that lower-of-cost-or-market thinking (OR 960c) reviews; it performs NO write-down itself. Empty is an ok empty list. Reads only.

NameRequiredDescriptionDefault
thresholdsNo
workspaceIdYes
location_idsNo
min_value_rappenNo
min_days_no_movementNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'Reads only' and 'performs NO write-down itself.' It adds useful behavior beyond the annotation: empty results are an acceptable empty list, the valuation basis is the pure J03 book value, and results are sorted by extended value descending. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: it front-loads the view name, then covers criteria, ordering, returned fields, filters, and empty-result behavior in a compact block. Some domain-specific codes like US-J07.8 and OR 960c may add noise, but every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by listing each returned field, the ordering, the default window, and the empty-list expectation. The main gap is the unexplained 'thresholds' object, which makes the parameter surface slightly incomplete. Overall it is strong but not maximal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the semantics. It defines min_days_no_movement with a default of 90, explains that min_value_rappen and location_ids narrow the list, and enumerates the computed output fields. The 'thresholds' object and required workspaceId remain opaque, so it does not fully cover all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise function: list stock-tracked items with positive on-hand and no outbound movement in a window, ordered by extended value. It distinguishes itself from inventory siblings by naming the specific 'slow movers / aging' view and by clarifying it performs no write-down. An agent can tell what this tool computes without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives the intended business use: surfacing high-value stagnant stock for lower-of-cost-or-market review. It also explicitly notes that the tool 'performs NO write-down itself' and is read-only, which prevents misuse. It does not name alternatives such as inventory_low_stock, 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.

inventory_stock_positionA
Read-only

Die Bestandsposition (stock position, US-J07.1): what is on hand, where, and (optionally) what it is worth, in one structured call. Sum the append-only J02 movement ledger into (item, location) positions under an optional filter (item_ids, location_ids, warehouse_ids, lot_codes, serial_numbers, only_positive), optionally rolled up by group_by (none | item | location | warehouse). On-hand is always SUM(stock_movement.qty), never a stored column, so a position can never disagree with the ledger it sums. With include_valuation the extended value comes from the pure J03 valuation preview, integer Rappen, so it equals a direct valuation call for the same (item, location). Returns rows plus a totals footer (count, qty, value_rappen) and stable limit / offset pagination; an empty match answers ok with message no_positions_matching. A foreign item / location / warehouse id is not_found (tenant isolation). Posts nothing.

NameRequiredDescriptionDefault
limitNo
filterNo
offsetNo
group_byNo
workspaceIdYes
include_valuationNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation by disclosing that positions are computed from the append-only ledger rather than stored, guaranteeing consistency. It also details the valuation source (pure J03 preview), stable pagination, empty-result behavior (ok with no_positions_matching), and foreign-id error semantics (not_found with tenant isolation).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence adds a distinct fact: purpose, computation method, filters, grouping, valuation origin, pagination, empty/error cases, and read-only nature. The description is front-loaded with the core purpose and contains no filler, making it dense yet efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six parameters, no output schema, and only readOnlyHint, the description covers the major behavioral contracts: data derivation, filtering, grouping, valuation, pagination, and error semantics. It does not specify the exact output row structure, but it mentions rows plus a totals footer, so it is nearly complete for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining the filter subfields (item_ids, location_ids, warehouse_ids, lot_codes, serial_numbers, only_positive), group_by enum values, include_valuation semantics, and stable limit/offset pagination. It does not detail workspaceId or provide defaults, but the key parameters are meaningfully documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states precisely that it sums the append-only J02 movement ledger into (item, location) positions, with optional filters and grouping, and optionally computes valuation. This clearly defines the tool's resource and operation, distinguishing it from siblings like stock_on_hand or inventory_balance by combining position and valuation in one structured call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you need on-hand quantities by location, optionally filtered/grouped, and optionally valued. It gives clear context for its intended use, though it does not explicitly name alternative tools or exclusion conditions, so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_stocktake_approve_linesA
DestructiveIdempotent

Approve review-required (or counted) lines so they may be committed. lineIds is an explicit array of line ids or the string 'all_review_required'. An uncounted line cannot be approved (uncounted_or_unapproved_lines). A non-open session is stocktake_not_open. Idempotent under idempotencyKey. CONSEQUENCE: Approves the counted lines so the stocktake can be committed; nothing changes in stock yet. Until the commit, you can count those lines again.

NameRequiredDescriptionDefault
lineIdsYes
sessionIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The CONSEQUENCE block adds real value beyond the idempotentHint/destructiveHint annotations: it says nothing changes in stock yet and that lines can be recounted until commit, which is the reversibility information an agent needs. The one gap is that it never reconciles why destructiveHint=true if the action is undoable before commit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and outcome, then the sentinel value, error cases, idempotency and consequence in a labelled block. Dense but every sentence carries information; the bare error-code tokens read a little telegraphic.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter mutation tool with no output schema, it covers preconditions, side effects, reversibility and error semantics. Missing only permission/auth requirements and what happens to lines that are not review-required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It documents lineIds well (explicit array or the literal 'all_review_required' sentinel) and ties idempotencyKey to idempotent behaviour, but says nothing about workspaceId or sessionId beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Approve review-required (or counted) lines so they may be committed.' It also implicitly separates this from the neighbouring inventory_stocktake_count and inventory_stocktake_commit stages by noting 'nothing changes in stock yet,' so an agent can place it in the workflow without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the precondition (lines must be counted) and the purpose (so they may be committed), plus the failure modes (uncounted_or_unapproved_lines, stocktake_not_open). It stops short of explicitly naming the sibling alternatives (commit vs. recount vs. cancel) or saying when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_stocktake_cancelA
Idempotent

Cancel an open or review session. No movements are written; the frozen snapshot is retained for audit but never re-used. A committed session cannot be cancelled (already_committed). Idempotent under idempotencyKey.

NameRequiredDescriptionDefault
reasonNo
sessionIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description offers critical behavioral guarantees beyond the annotations, such as stating 'No movements are written.' Furthermore, it informs the agent that the data ('frozen snapshot') is retained for audit but never reused, which is vital context for data integrity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly efficient, utilizing three well-structured sentences. Each sentence adds a unique and necessary piece of functional or operational knowledge without unnecessary jargon.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a cancellation tool, it covers all crucial aspects: what is being cancelled, what remains after the action (snapshot retained), and what operational constraints apply (commit status and idempotency).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since the schema coverage is 0%, the description carries a heavy burden. While it correctly mentions the functional role of 'idempotencyKey,' it does not provide any semantic explanation for the optional 'reason' parameter or provide deeper insight into the required identifiers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The definition clearly states the action ('cancel') and the precise resource ('open or review session' within a stocktake context). It successfully distinguishes this action by naming the condition that prevents cancellation ('already_committed').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It sets precise boundaries on when the tool should and should not be used. Specifically, it warns the agent that a session in the 'committed' state cannot be canceled, which is essential usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_stocktake_commitA
DestructiveIdempotent

Commit a reviewed session: for every line with a non-zero variance (counted - book) mint ONE J02 inventory_move (movement_type adjustment, signed qty, dated at freezeAt, ref_kind stocktake_session) and record it on the line, then mark the session committed, all atomically. No quantity is written directly; on-hand is the SUM over the minted movements. Blocked while any line is pending or review_required (uncounted_or_unapproved_lines). Refused if the freeze date falls in a locked or sealed period (period_locked). Idempotent under idempotencyKey (a replay returns the original movement ids, posting nothing); a committed session re-committed under a NEW key is already_committed. A committed session is corrected by a compensating inventory_move, never an edit. CONSEQUENCE: Books each counted difference as a stock adjustment on the count date and seals the count for good (a full stocktake is your inventory record). It can't be reopened; later stock errors get a new adjustment.

NameRequiredDescriptionDefault
sessionIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare idempotentHint and destructiveHint, but the description goes well beyond them: atomicity of the whole commit, that no quantity is written directly and on-hand is derived as the SUM over movements, replay semantics under the idempotencyKey (returns original movement ids, posts nothing), and already_committed when re-committed under a new key. The CONSEQUENCE sentence spells out exactly what is destroyed — the count is sealed for good and cannot be reopened.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and mechanics, then error conditions, idempotency, and consequences in a logical order. Dense but nearly every clause carries operational information; the CONSEQUENCE section slightly restates the sealing point already implied by 'mark the session committed', keeping it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, atomic, three-parameter mutation with no output schema, the description covers mechanics, blocking conditions, idempotency, correction policy, and consequences. It even sketches the return (original movement ids on replay). Missing only permission/authorization requirements and a fuller picture of the success response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden. It does explain idempotencyKey semantics well (replay returns original ids, new key on a committed session yields already_committed), which is the parameter most likely to be misused. But sessionId and workspaceId get no explanation at all, and there is no hint that the session must be in a reviewed state beyond the precondition list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Commit a reviewed session') and immediately defines the exact mechanism: one minted J02 inventory_move per non-zero variance line, then mark committed. It is unmistakably distinct from siblings like inventory_stocktake_count, inventory_stocktake_approve_lines, or inventory_adjust.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions and exclusions: blocked while any line is pending or review_required (uncounted_or_unapproved_lines), refused if the freeze date lands in a locked period (period_locked). It also explains the correction path (compensating move, never an edit). It stops short of naming the specific sibling tools that produce the reviewable state, so it is strong but not fully explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_stocktake_countA
DestructiveIdempotent

Record counted quantities for one or more lines of an open session. Each line names itemId + locationId (+ optional lotId / serialId) and countedQty (integer thousandths, may be 0 for an explicit empty bin). Last write wins while the session is open. A line with zero variance auto-approves; a material variance (over threshold) becomes review_required; else counted. A blind session still hides book_qty in the response until review. A line not in the session is not_found; a non-open session is stocktake_not_open.

NameRequiredDescriptionDefault
linesYes
sessionIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing overwrite semantics ('last write wins while the session is open'), the downstream state machine per line (auto-approve on zero variance, review_required over threshold, else counted), and the blind-session behavior that hides book_qty in the response. It even names the two error codes. No conflict with idempotentHint/destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences, front-loaded with the action, then the line shape, then write semantics, then outcome states and error codes. No filler; every clause carries information an agent needs before calling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully documents the per-line result states and error codes, which is what an agent needs to interpret the response. It does not describe the overall response envelope or what happens to lines across repeated calls beyond 'last write wins', a minor remaining gap for a nested-array write tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the burden, and it does for the most complex field: lines is decomposed into required itemId/locationId/countedQty and optional lotId/serialId, with countedQty explained as integer thousandths and 0 being a valid explicit empty bin. workspaceId, sessionId and idempotencyKey are left unexplained, though sessionId is implied by 'open session'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Record counted quantities') plus the scope ('one or more lines of an open session'), so an agent immediately knows this is a write into an existing stocktake session rather than creating or committing one. The line-level shape (itemId + locationId + optional lotId/serialId + countedQty) further sharpens what is being recorded.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes the precondition clearly: the session must be open, otherwise stocktake_not_open is returned, and the line must already exist or not_found is returned. It does not name sibling alternatives (e.g. inventory_stocktake_create or stock_stocktake_commit) to route away from, so it stops short of explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_stocktake_createA
Idempotent

Open a cycle-count / stocktake session that FREEZES a book-quantity snapshot from the J02 movement ledger. type is 'full' (an OR 958c Abs. 2 Inventur frozen at a balance-sheet date) or 'cycle' (an ongoing scope count without a full freeze; default 'full'). freezeAt is the ISO date the book quantities are snapshotted as-of (default today); book_qty per line is SUM(stock_movement.qty) WHERE moved_at <= freezeAt, bit-identical to inventory_balance asOf. Scope with any of warehouseId, locationIds[], itemIds[] (a foreign id is not_found, §H-TENANT); includeZeroQty forces net-zero groups into the count. blindCount hides book_qty until review. varianceQtyThreshold / variancePctThreshold (integer, default 0) classify a counted line as material: a non-zero variance exceeding either enters review_required and blocks commit until approved. Idempotent under idempotencyKey.

NameRequiredDescriptionDefault
typeNo
notesNo
itemIdsNo
freezeAtNo
abcClassesNo
blindCountNo
locationIdsNo
warehouseIdNo
workspaceIdYes
idempotencyKeyYes
includeZeroQtyNo
variancePctThresholdNo
varianceQtyThresholdNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotent and non-destructive annotations, the description discloses that the tool freezes book quantities, how book_qty is computed, what freezeAt controls, how blindCount hides quantities, how variance thresholds trigger review_required and block commit, tenant validation behavior, and idempotency key semantics. This is substantial behavioral context for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loads the core action and freeze semantics before parameters. It is long and parenthetical, but nearly every sentence adds operational meaning rather than repeating the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 13-parameter mutation with no output schema, the description covers the session creation model, snapshot semantics, scoping, thresholds, review blocking, and idempotency. The missing explanation of abcClasses and notes prevents a perfect score, but the core call behavior is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries heavy lifting. It explains type, freezeAt, warehouseId, locationIds, itemIds, includeZeroQty, blindCount, both variance thresholds, and idempotencyKey. It leaves notes, abcClasses, and workspaceId without explanation, so it is strong but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource ('Open a cycle-count / stocktake session') and immediately states the core effect: freezing a book-quantity snapshot from the movement ledger. This clearly distinguishes the tool from stocktake listing, get, count, commit, and cancel siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains when to choose 'full' versus 'cycle' and implies this is the opening step before counting or committing a stocktake. However, it does not explicitly name the sibling tools (e.g., inventory_stocktake_count, inventory_stocktake_commit) or state exclusions such as when not to open a new session.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_stocktake_getA
Read-only

Read one session with its header (type, status, freeze date, progress, variance summary, Inventar link) and its lines. A blind session hides book_qty until review. A legacy D01 stocktake id resolves read-only (legacy:true). A foreign or unknown id is not_found.

NameRequiredDescriptionDefault
sessionIdYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses meaningful behavioral traits: blind sessions hide book_qty until review, legacy D01 IDs resolve as read-only with legacy:true, and foreign/unknown IDs return not_found. These are specific edge cases that affect the agent's interpretation of results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the core purpose, followed by conditional behaviors. Each sentence adds distinct information without redundancy. It is appropriately concise for a read operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description provides a solid outline of the returned data (header fields and lines), plus critical behavioral variants (blind session, legacy, not_found). It could be more explicit about the response structure, but covers the essential context an agent needs to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It does not explicitly define workspaceId or sessionId, though 'legacy D01 stocktake id' hints that sessionId is the identifier. There is no mention of what workspaceId is for or any format expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('one session'), and enumerates the exact header fields and lines returned. It clearly distinguishes this from sibling stocktake tools (list, count, report) by focusing on retrieving a single session with its header and lines.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the read operation for a stocktake session, but it does not explicitly mention alternatives or when to choose this over sibling tools like inventory_stocktake_list or inventory_stocktake_report. The behavior notes (legacy resolution, blind session) give context, but no direct 'use this when...' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_stocktake_listA
Read-only

List sessions (newest freeze date first), filterable by type, status (one or an array), a freeze-date from/to range and warehouseId. Set includeLegacy to also surface legacy D01 stocktakes read-only. Each row carries progress and the counted / review / total line counts.

NameRequiredDescriptionDefault
toNo
fromNo
typeNo
statusNo
warehouseIdNo
workspaceIdYes
includeLegacyNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description adds value by specifying the ordering (newest freeze date first), the filtering semantics, the includeLegacy behavior (surfacing legacy D01 read-only), and the row contents (progress, counted/review/total line counts). This goes beyond the annotation without contradicting it, providing useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the core purpose (list sessions, newest first) and then enumerate filters and special behavior. No redundant wording; every clause adds information. The structure is efficient and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 7 parameters and no output schema, the description covers the key aspects: purpose, ordering, filters, includeLegacy behavior, and row content. It omits pagination/limits and valid enum values, but those are not critical for initial invocation. The annotation covers read-only safety, making the description sufficient for an agent to decide when and how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains type, status (one or an array), freeze-date from/to range, warehouseId, and includeLegacy with its purpose. It does not detail valid type values or date formats, and workspaceId is only implied as a required workspace context, but the main filters are adequately described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists stocktake sessions, specifies the ordering (newest freeze date first), enumerates the filterable dimensions (type, status, freeze-date range, warehouseId), and notes the includeLegacy option. It distinguishes this from other stocktake tools like create/count/commit by focusing on listing, and names the legacy read-only behavior. This is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (when you need to list stocktake sessions) but does not explicitly compare to alternatives like inventory_stocktake_get (single fetch) or other list tools. It gives no 'when not to use' guidance or exclusions. While the filtering and includeLegacy hint at scenarios, it lacks explicit routing against sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_stocktake_reportA
Read-only

The variance report for a session (pure read, writes nothing). Returns per-line book_qty, counted_qty, variance_qty and variance_pct plus aggregate over / under / absolute variance and the count of lines exceeding threshold. book_qty is hidden on a blind session until it reaches review. A foreign or unknown session id is not_found.

NameRequiredDescriptionDefault
sessionIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotation readOnlyHint=true already indicates a read-only operation. The description adds 'writes nothing', reinforcing this, and discloses two behavioral quirks: book_qty is hidden on blind sessions until review, and an unknown or foreign session id results in 'not_found'. These go beyond the annotation and provide useful handling context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, with the primary purpose front-loaded ('variance report'), followed by return data and key behaviors. Every sentence adds value; there is no filler or unnecessary detail. It is compact and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only report with two parameters and no output schema, the description covers all essential aspects: what it returns (line items and aggregates), the blind session behavior, and error handling. The only minor omission is the definition of 'threshold', but that likely refers to a known threshold parameter elsewhere in the system. Overall, it is complete 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.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the description does not explain the parameters. sessionId is mentioned in context ('foreign or unknown session id') but not defined as a parameter. workspaceId is not addressed at all. The parameters are common, but the description fails to clarify their role or any constraints, leaving the agent to infer from names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a variance report for a stocktake session, specifying the exact data it returns (per-line quantities and variance metrics). It distinguishes itself from sibling tools like inventory_stocktake_count or stock_stocktake_commit by stating it is a pure read operation that produces a report. The verb 'report' and resource 'session' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you need variance analysis for a stocktake session. It does not explicitly mention alternatives or exclusions, but the presence of sibling names like inventory_stocktake_get or stock_stocktake_report suggests a clear domain. The description does not say 'use this instead of X', but the context makes it obvious it is the reporting variant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_stocktake_request_recountB
DestructiveIdempotent

Send lines back to pending, clearing their counted quantity so they must be recounted. lineIds is the array of line ids. A non-open session is stocktake_not_open. Idempotent under idempotencyKey.

NameRequiredDescriptionDefault
reasonNo
lineIdsYes
sessionIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by spelling out exactly what destructiveHint means here (counted quantities are cleared and lines revert to pending) and tying idempotencyHint to a concrete idempotencyKey parameter. The named error code stocktake_not_open adds operational context. Only permissions/partial-failure behavior on multi-line calls is left unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences; the destructive effect and error code come first, which is the right ordering. The 'lineIds is the array of line ids' sentence is essentially filler that restates the schema and could be dropped or replaced with real semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive multi-param mutation with no output schema and zero schema descriptions, the definition covers effect, precondition error, and idempotency, which is the core. It still leaves the reason parameter, the return shape, and multi-line partial-failure behavior unexplained, which an agent would want before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning, but it only touches lineIds (with a near-tautological gloss) and idempotencyKey (via the idempotency sentence). The reason parameter is never mentioned and workspaceId/sessionId get no explanation, leaving most of the semantic load undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource effect: sending stocktake lines back to pending and clearing their counted quantity, which is distinct from count/approve/commit siblings. It doesn't explicitly differentiate itself from adjacent stocktake tools like inventory_stocktake_count or inventory_stocktake_approve_lines, but the 'recount' semantics are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an implicit precondition via the stated error path — the session must be open or the call fails with stocktake_not_open — which tells the agent when the tool is applicable. However, it never says when to prefer this over inventory_stocktake_count or approve_lines, nor what to do when recount isn't warranted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_transferA
Idempotent

Move stock between two locations as an ATOMIC pair: a transfer_out at fromLocationId and a transfer_in at toLocationId, both under one transferGroupId, equal absolute quantity, summing to zero. qty is always POSITIVE (the helper applies the sign). Either both legs land or neither does. When allow_negative_stock is false a transfer that would overdraw the source is refused with insufficient_stock and nothing is written. Same tracking rules as inventory_move; a serial transfer moves one unit and re-parks it at the destination. Idempotent under idempotencyKey (a replay returns the original pair). CONSEQUENCE: Moves stock from one location to another as one paired movement; nothing is booked to the ledger. A wrong transfer is corrected by moving the goods back.

NameRequiredDescriptionDefault
qtyYes
lotIdNo
itemIdYes
serialIdNo
descriptionNo
workspaceIdYes
toLocationIdYes
effectiveDateYes
unitCostMinorNo
fromLocationIdYes
idempotencyKeyYes
sourceDocumentIdNo
sourceDocumentTypeNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: discloses atomicity ('either both legs land or neither does'), the failure mode and error code (insufficient_stock when allow_negative_stock is false and nothing is written), idempotent replay semantics via idempotencyKey, and serial-specific behavior. The CONSEQUENCE block explicitly states that nothing hits the ledger and that a wrong transfer is corrected by an inverse move, which is exactly the reversal information an agent needs before mutating stock.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the atomic-pair invariant, then failure behavior, then consequences — a sensible order for a mutation tool. It is dense and most sentences earn their place, though 'either both legs land or neither does' restates the opening atomicity claim and the CONSEQUENCE block partly repeats the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter mutation with no output schema and zero schema coverage, the behavioral side is thorough, but roughly eight parameters have no documented meaning anywhere, and the return shape of the paired movements is only implied. Adequate to call safely, not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 13 parameters, so the description must carry the load. It does explain the highest-risk ones well — qty must be positive with the helper applying the sign, fromLocationId/toLocationId meaning, idempotencyKey replay, and serialId moving a single unit — but lotId, unitCostMinor, effectiveDate, sourceDocumentId/sourceDocumentType and workspaceId/itemId are left entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource (move stock between two locations) and defines it operationally as an atomic transfer_out/transfer_in pair under one transferGroupId. This clearly separates it from siblings like inventory_move, stock_move, inventory_adjust and asset_transfer without the agent needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context: paired movement between two locations, sign convention, and a pointer that 'same tracking rules as inventory_move' apply, which routes the agent to the sibling for rule details. What is missing is an explicit when-not statement (e.g. use inventory_move for one-sided or status changes, inventory_adjust for quantity corrections).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_createA
Idempotent

Create a DRAFT inventory valuation run for a cut-off (asOf ISO date, or period YYYY-MM for the period end) and return it with its proposed adjusting journal for review. Computes the FULL inventory valuation through the J03 engine (each item under the method in force on that date), writes one immutable line per (item, location) that carries a quantity or a value, and stores the run total. Posts NO journal: that is inventory_valuation_post. netRealisableValues maps itemId to the OR 960c per-unit Veraeusserungswert less costs to come; where it is below cost the J03 clamp writes the line down and marks it. inventoryAccountId / changeAccountId override the default 1200 / 4200 control accounts. A run always values the complete position (a filtered run cannot hold the sub-ledger = GL identity; use inventory_valuation_report for a filtered view). A cut-off in a soft- or hard-closed period is refused with period_locked before anything is written. Idempotent: a replay of the key returns the same draft and recomputes nothing.

NameRequiredDescriptionDefault
asOfNo
notesNo
methodNo
periodNo
workspaceIdYes
idempotencyKeyYes
changeAccountIdNo
inventoryAccountIdNo
netRealisableValuesNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint, yet the description adds substantial context: the J03 engine, one immutable line per (item, location), stored run total, no journal posting, NRV write-down clamping, default 1200/4200 account overrides, and period_locked refusal 'before anything is written.' The idempotency claim is also given concrete meaning ('a replay of the key returns the same draft and recomputes nothing').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and result, then the behavioral clauses; nearly every sentence adds new information. It is dense with domain jargon (J03, OR 960c, Veraeusserungswert, sub-ledger = GL identity) and runs long, which slightly raises the reading cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation tool with no output schema, it covers side effects, immutability, failure mode, idempotency, and a rough return shape ('the run with its proposed adjusting journal'). The gaps are the unexplained `method` parameter and the absence of any detail on the draft's structure beyond the adjusting journal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the load well: asOf vs period formats, the netRealisableValues itemId→per-unit map and its clamp semantics, and the inventoryAccountId/changeAccountId overrides are all explained. However, the `method` parameter, which presumably overrides the method in force, is never described, and notes/workspaceId are left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a DRAFT inventory valuation run for a cut-off') and immediately scopes the outcome ('return it with its proposed adjusting journal for review'). It is clearly separable from siblings: posting is deferred to inventory_valuation_post and filtered views to inventory_valuation_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the two alternatives and the conditions that select them: 'Posts NO journal: that is inventory_valuation_post' and 'use inventory_valuation_report for a filtered view.' It also states a hard when-not case (a filtered run cannot hold the sub-ledger = GL identity) and the period-lock refusal path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_getA
Read-only

One valuation run by id, with its header (as_of, method, status, total value, delta posted, journal link, posted-by) and its frozen lines (item, location, qty, unit cost, value, control account, any OR 960c write-down). A foreign or unknown run id is not_found (H-TENANT), never cross-tenant data.

NameRequiredDescriptionDefault
runIdYes
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only convey readOnlyHint=true; the description adds substantial behavior beyond that: frozen-line semantics, exact header components, tenant isolation ('never cross-tenant data'), and the not_found (H-TENANT) error case. This is rich, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence front-loads the core purpose ('One valuation run by id') and packs return structure and error behavior into compact parentheticals. Every clause adds information; there is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of explaining return values, and it does: header fields, line fields, and the not-found case. For a by-id getter, the description covers parameters, return content, and error semantics completely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does add meaning for runId by tying it to the valuation run and by defining foreign/unknown ID behavior, and workspaceId is implicitly scoped by the tenant-isolation statement. However, it does not explicitly describe workspaceId or give parameter formats/examples, leaving some compensation gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact resource ('One valuation run by id') and enumerates the header and frozen-line contents returned. This clearly separates it from list/report/preview inventory valuation siblings, even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It makes clear this is the tool for fetching a single valuation run by its ID, and it signals when it cannot be used by describing the not_found behavior for foreign or unknown IDs. It does not explicitly contrast siblings like inventory_valuation_list or inventory_valuation_report, so it stops short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_layersA
Read-only

The remaining FIFO cost layers for one item, oldest first: each carries the receipt date, the source movement, the quantity originally received and what is left of it, and its unit cost. Layers are derived from the J02 ledger on demand rather than cached, so they cannot drift from it. Returns the layer quantity, the exact total (the sum of remaining qty times layer cost, to the Rappen) and shortfall, the demand that outlived the layers when stock went short. Filter by locationId to inspect one location; a foreign or unknown item OR location is not_found, never cross-tenant data and never an empty list that would read as "this location holds nothing". NOT A STOCK-AGEING REPORT: when stock is transferred the layer moves with its own unit cost but its receiptDate becomes the date it reached that location, because that is what drives consumption order there. For how long goods have really been held, read the J02 movement history, which rewrites nothing.

NameRequiredDescriptionDefault
asOfNo
itemIdYes
locationIdNo
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite readOnlyHint=true covering the safety profile, the description adds rich behavioral context beyond the annotation: layers are derived on demand rather than cached so they cannot drift; the exact total is computed to the Rappen; shortfall semantics are explained; error behavior is disclosed (foreign/unknown item or location is not_found, never cross-tenant data, never an empty list); and the subtle receiptDate rewrite on transfer is explained. This is exemplary disclosure of non-obvious behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense; every sentence carries a distinct point: scope/ordering, layer fields, derivation freshness, return values, error behavior, and the critical counter-indication. The 'NOT A STOCK-AGEING REPORT' warning is prominently placed. There is minor redundancy between 'derived... on demand rather than cached' and 'which rewrites nothing' at the end, but overall the structure is efficient and well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema and having 0% parameter coverage, the description covers return values (layer quantity, exact total, shortfall), error semantics, data derivation freshness, and the receiptDate caveat that materially affects interpretation of results. The main shortfall is the unexplained asOf parameter for a tool whose entire purpose is point-in-time layer state. Minor gap, otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It does add meaning for locationId (filter scope and not_found behavior) and implies itemId scope ('for one item'). However, the asOf parameter is never explained — particularly important for an on-demand ledger-derived report — and workspaceId is left implicit. The description partially compensates but leaves a material gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'The remaining FIFO cost layers for one item, oldest first' — stating exactly what is returned, the scope (one item), and the ordering. It further distinguishes itself by explicitly declaring 'NOT A STOCK-AGEING REPORT', making it unmissable that this is not an ageing report and is instead a layer valuation tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: filter by locationId to inspect one location, and explicitly routes the agent away from this tool when the question is about true holding time ('For how long goods have really been held, read the J02 movement history'). The NOT A STOCK-AGEING REPORT declaration plus the receiptDate mutation caveat tells the agent which alternative to reach for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_listA
Read-only

The valuation runs for this workspace, newest cut-off first: id, as_of, method, status, total value, delta, line count and journal link. Filter by status (draft, posted, reversed), and by an as_of from/to date range. Tenant-scoped; returns headers only (use inventory_valuation_get for the lines).

NameRequiredDescriptionDefault
toNo
fromNo
limitNo
statusNo
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already signals a safe read operation. The description adds behavioral detail: returns headers only, orders by newest cut-off first, and supports filtering by status and as_of date range. No contradiction with annotations, and it provides useful context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose and key fields, followed by filtering and scope details. No wasted words, and it efficiently conveys the necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description lists the returned fields, which is critical. It also explains filtering, scope, and the distinction from the sibling for lines. Minor omissions like pagination or limit behavior are not major for a list tool, so it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 5 parameters with 0% description coverage, so the description must compensate. It mentions filtering by status and as_of date range, mapping to status and from/to, and implies workspaceId via 'Tenant-scoped'. However, it does not clarify the limit parameter or the exact date format. It partially compensates for the schema gap but leaves some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists valuation runs for the workspace, enumerates the returned fields (id, as_of, method, status, total value, delta, line count, journal link), and distinguishes it from inventory_valuation_get for lines. This provides a specific verb, resource, and scope, making it easy for an agent to understand its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly notes the tool is tenant-scoped and returns headers only, with an explicit pointer to inventory_valuation_get for lines. It also mentions filtering by status and date range, giving clear usage context. It doesn't list exclusions (e.g., when not to use), but the alternative is clearly named, so it's strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_method_historyA
Read-only

The append-only trail of valuation-method changes, newest effective date first: scope (workspace or item), the method, the standard cost where one was set, the date it took effect, the reason the operator stated, whether it was forced over open-period movements, and who recorded it. This is the OR 958c Stetigkeit evidence: it is what a Treuhänder reads when asked why an inventory figure moved between two years. Filter by itemId or by scope. Rows are immutable at the database layer, so the trail cannot be tidied after the fact.

NameRequiredDescriptionDefault
scopeNo
itemIdNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds crucial behavioral details: append-only, immutable at the database layer, cannot be tidied, and specific field semantics (e.g., forced over open-period movements). These go beyond the annotation and help the agent understand the guarantees and content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is informative but not overly verbose. It front-loads the key concept (append-only trail, newest first), lists the returned fields, explains the audit purpose, and adds immutability. Each sentence adds value, though a bit more conciseness could tighten it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description enumerates all returned fields and ordering, and covers immutability and filtering. It lacks pagination details but is otherwise comprehensive for a read-only history tool. The audit context and immutability make it suitable for agents needing to understand the data provenance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains that filtering is by itemId or scope, and clarifies that scope refers to workspace or item. It does not explicitly describe workspaceId, but it is the required parameter and its role is implied. Given schema description coverage is 0%, the description provides meaningful guidance for two of three parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns the append-only trail of valuation-method changes with specific fields (scope, method, standard cost, effective date, reason, forced flag, recorder) and orders by newest effective date first. It names the exact resource and purpose, distinguishing it from current-method or mutation tools like inventory_valuation_methods or inventory_valuation_set_item_method.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains how to filter (by itemId or scope) and provides strong context for when to use it (as OR 958c Stetigkeit evidence for audit). It doesn't explicitly state when not to use it or name alternatives, but the purpose is so specific that the usage is clear from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_methodsB
Read-only

The valuation method registry: weighted_average, fifo and standard_cost, each with whether this workspace has it enabled and whether it needs a per-item standard cost. Also returns the method in force as the workspace default today, where it came from (a recorded assignment or the built-in weighted_average) and the date it took effect. weighted_average and fifo are enabled out of the box; standard_cost is registered and off until a workspace turns it on. A disabled method can neither be the default nor be chosen on an item.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already covers the read-only nature. The description adds meaningful context beyond that: it explains that the default method's source can be a recorded assignment or the built-in weighted_average, and states that a disabled method cannot be the default or chosen on an item. This provides useful behavioral details without contradicting the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is fairly long but well-structured, covering the registry, default method details, default enablement states, and a constraint. It is front-loaded with the core purpose and uses efficient phrasing, though it could be slightly more concise by trimming some redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does a good job of explaining what data will be returned: method enablement, per-item cost need, default method, its source, and effective date. It also clarifies built-in behavior for weighted_average and fifo. It lacks explicit error handling or response structure details, but for a read-only query this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required parameter workspaceId, and the description does not mention or explain this parameter at all. It fails to compensate for the lack of schema documentation, leaving the agent without any semantic guidance for the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this tool returns a registry of valuation methods (weighted_average, fifo, standard_cost) with enablement status and per-item cost needs, plus the current default method with its source and effective date. It uses specific verbs and resources, making the purpose clear. It doesn't explicitly differentiate from sibling tools like inventory_valuation_method_history or inventory_valuation_status, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any sibling tools or conditions for selection. The agent is left to infer that this is for querying the current method registry, but no explicit when/when-not guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_method_set_enabledA
DestructiveIdempotent

Turn one valuation method on or off for the workspace. Enablement gates what may be CHOSEN from here on; it is deliberately not dated, because a past figure is determined by the assignment that was in force then and not by what is switched on today. Disabling the method that is currently the workspace default is refused with method_is_default: change the default first, so no future valuation points at a method the workspace says it does not use. Absolute state-setting, so a replay of the idempotency key re-asserts the same list and writes nothing new. Posts no journal entry.

NameRequiredDescriptionDefault
methodYes
enabledYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses a specific error code (method_is_default) and its precondition, clarifies that the flag is undated and does not retroactively affect past figures, confirms absolute state-setting semantics on idempotency-key replay, and states no journal entry is posted. All of this is consistent with idempotentHint=true and destructiveHint=true (disabling can remove a method from selectable use).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then rationale and edge cases in five compact sentences with no filler. The sentence justifying why the flag is not dated is long but earns its place by preempting a false expectation of a date parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter mutation with no output schema, the description covers the effect, the refusal path, idempotency, and side effects (no journal entry). It does not say what the call returns (apparently the resulting method list), but with annotations already signalling idempotency and destructiveness that gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load: it defines method and enabled meaningfully (single method, absolute on/off state) and explains that idempotencyKey replays re-assert the same state without writing. Only workspaceId is left implicit, which is acceptable given the text already scopes the operation 'for the workspace'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Turn one valuation method on or off for the workspace'. This is clearly distinct from sibling mutations like inventory_valuation_set_default, inventory_valuation_set_item_method and asset_depreciation_method_set_enabled, since it governs workspace-level enablement rather than assignment or default selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the operating context well: enablement only gates future choices, is not dated, and disabling the current default is refused with method_is_default, with the instruction to change the default first. It stops short of naming the alternative tool explicitly, so the agent must infer that inventory_valuation_set_default is the follow-up.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_openingA
Idempotent

Record an OPENING inventory valuation for a migration or a new workspace so the sub-ledger = GL identity holds from day one. The caller states the known item values directly (lines of itemId, optional locationId, qty and valueRappen), and the verb posts the opening delta against the current GL through A02 exactly as an ordinary run does, writing a posted run in one step (no draft review: an opening baseline is a stated figure, not a computed one). inventoryAccountId / changeAccountId override the default 1200 / 4200. A cut-off in a locked period is refused before any write. Idempotent on the key. CONSEQUENCE: Books the opening inventory value, the baseline every later valuation run measures against. If it is wrong, you reverse the run with a correcting entry; both stay visible.

NameRequiredDescriptionDefault
asOfYes
linesYes
notesNo
workspaceIdYes
idempotencyKeyYes
changeAccountIdNo
inventoryAccountIdNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description provides rich behavioral context beyond the simple 'idempotent' and 'non-destructive' hints. It details the financial mechanics (posting the opening delta against the GL), the execution style (posting run in one step, no draft review), and the recovery path (reversing the run with a correcting entry).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is dense and long due to the complexity of the financial and operational mechanics. However, it is logically structured: starting with the 'why', followed by the 'how' (posting delta/one step), the 'rules' (locked period), and the 'impact' (consequence/reversal).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a migration-level, foundational financial transaction, the description is exceptionally complete. It covers the lifecycle (setting baseline -> reversing if wrong), the technical method (no draft review), and the financial implications (GL delta, account overrides).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate heavily. It successfully adds meaning by explaining that the caller provides known item values, detailing the optional `locationId`, and clarifying that `inventoryAccountId` and `changeAccountId` override specific defaults (1200 / 4200).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool's purpose is highly specific: recording an OPENING inventory valuation. It explicitly links this function to 'migration or a new workspace,' clearly distinguishing it from standard periodic valuation runs. The use of the term 'opening delta' is precise, signaling its foundational role in the GL.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly defines the context of use as establishing a baseline for new workspaces or migrations. It specifies behavioral constraints, such as refusing operations during a locked period, guiding the agent on when the tool is valid or invalid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_postA
Idempotent

Post a reviewed DRAFT run so the balance-sheet inventory figure is updated in one atomic, auditable step. In one transaction it re-checks the cut-off period is open and the draft is not stale (the movement ledger has not changed since it was calculated, else stale_draft), computes the delta between the sub-ledger valuation and the current GL balance of each control account, posts ONE balanced A02 entry (source inventory_valuation, Dr/Cr inventory control vs the change account) for that delta, and marks the run posted with its journal reference. After the post the OP11 identity holds: GL inventory control balance equals the sub-ledger valuation at the cut-off. All posting is through A02 postEntry and no second path exists. Idempotent on rows: a replay returns the posted run and mints no second journal. A zero delta posts nothing yet records the baseline. CONSEQUENCE: Books the change in inventory value and updates the inventory figure on the balance sheet. If it is wrong, you reverse the run with a correcting entry and post a fresh one.

NameRequiredDescriptionDefault
runIdYes
workspaceIdYes
idempotencyKeyYes
changeAccountIdNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavior well beyond the annotations: single-transaction atomicity, stale-draft re-check, delta computation between sub-ledger and GL, exactly one balanced A02 entry, zero-delta no-op with baseline recording, idempotent replay semantics, and the reversal path if wrong. The idempotency claim is consistent with idempotentHint=true rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the action and its balance-sheet effect come first, then mechanics, then the idempotency and consequence notes. Some internal jargon (OP11 identity, A02 postEntry) adds length, though it is defined contextually.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still tells the agent what results: the run is marked posted with its journal reference, and a replay returns the posted run. Combined with the precondition, no-op, and reversal semantics, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate; it implicitly covers runId (the draft run), idempotencyKey (replay returns the posted run, no second journal) and changeAccountId ('the change account'). workspaceId is never mentioned and no parameter is named explicitly, leaving real gaps at zero schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Post a reviewed DRAFT run') plus the precise outcome ('balance-sheet inventory figure is updated in one atomic, auditable step'). It is clearly distinguishable from read-oriented siblings such as inventory_valuation_preview, inventory_valuation_report and inventory_valuation_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes the entry condition strongly (a reviewed DRAFT run, cut-off period must be open, draft must not be stale) and names the failure mode stale_draft. It does not explicitly point to sibling alternatives such as inventory_valuation_reverse or inventory_valuation_create, so routing is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_previewA
Read-only

Value inventory at a date WITHOUT writing anything: no journal entry, no run row, no cached figure. Returns one row per item with the method that applied on that date (item override beats workspace default beats the built-in weighted_average, each as it stood on the asOf date, so a later policy change never restates a filed figure), qtyOnHand, the rounded unitCostMinor a human reads, and totalValueMinor computed from the exact cost pool. Omit itemIds to value every item with ledger history; omit asOf for everything recorded so far. methodOverride projects a what-if under another method and leaves the stored policy untouched (a disabled method is refused). netRealisableValues maps itemId to the OR 960c per-unit Veräusserungswert LESS the costs still to come; where it is below cost the clamp is applied, lcmApplied is set and writeDownMinor reports the difference. Uncosted receipts are valued at zero, counted in uncostedQty and named in missingCostMovementIds, never valued at the neighbours price. An internal transfer between locations is value-neutral: cost follows the goods. LOCATION SCOPE: locationId alone values that one location, valueByLocation alone returns one row per location, both together narrow the breakdown; an unknown or foreign locationId is not_found, never an empty result. Per-location rows always sum to the item total, and each says how it got there in valuationBasis: direct for FIFO and standard cost, allocated for weighted average, which has one cost pool per item and so shows each location its own quantity at the item pooled average rather than inventing a second pool. A negative on-hand, a negative unit cost or a missing standard cost returns a reason and a value of zero rather than an arithmetic answer.

NameRequiredDescriptionDefault
asOfNo
itemIdsNo
locationIdNo
workspaceIdYes
methodOverrideNo
valueByLocationNo
netRealisableValuesNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description reveals many behavioral traits: no cache or persistence, method precedence rules, date-dependent policy snapshots, rounding of unit costs, handling of uncosted receipts and negative balances, location aggregation with valuationBasis, and edge-case errors. This is extensive and valuable transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long (about 250 words) but every sentence adds substantive detail about behavior, parameters, or edge cases. It is front-loaded with the core purpose, then organized into logical sections (calculation details, location scope, error conditions). Minor redundancy exists (e.g., internal transfer sentence could be shorter), but it is not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 params, nested objects, no output schema), the description covers output fields, edge conditions, error handling, and all parameters. It also explains how per-location rows sum to item totals and what valuationBasis values mean. Nothing critical 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it does. It explains itemIds (omit for all), asOf (omit for all recorded), methodOverride (what-if projection, disabled methods refused), netRealisableValues (mapping and clamp logic), locationId vs valueByLocation (scoping and output shape), and implicitly the required workspaceId. No parameter left unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Value) and resource (inventory at a date) and explicitly contrasts itself with write operations: 'WITHOUT writing anything: no journal entry, no run row, no cached figure.' This distinguishes it from sibling tools like inventory_valuation_post or stock_run_valuation as a read-only preview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use it: when you need to value inventory without posting, as emphasized by 'WITHOUT writing anything.' It does not explicitly name alternatives or say 'use X instead,' but the read-only framing and details like 'methodOverride ... leaves the stored policy untouched' provide clear context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_reportA
Read-only

The authoritative detailed valuation report: the single source of truth for what inventory is worth at a cut-off. With runId it returns the FROZEN lines of that posted run; otherwise it computes the LIVE valuation at asOf (or period end) through the J03 engine, grouped by control account, with each line item, location, quantity, unit cost and value plus any OR 960c write-down. Optional accountIds narrows the account grouping; method projects a what-if under another method; netRealisableValues applies the lower-of-cost-or-market clamp. Writes nothing.

NameRequiredDescriptionDefault
asOfNo
runIdNo
methodNo
periodNo
groupByNo
accountIdsNo
workspaceIdYes
netRealisableValuesNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'Writes nothing.' It adds behavioral detail beyond annotations by explaining the dual modes (frozen vs live), the use of the J03 engine, grouping by control account, and the lower-of-cost-or-market clamp. This provides valuable context without contradicting the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense paragraph that front-loads the core purpose and then methodically covers conditional behavior, grouping details, and optional parameters. Every sentence adds value with no fluff. The 'Writes nothing' ending is a clear, concise closure. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 8 parameters, nested objects, and no output schema, the description covers the essential aspects: what the report returns (line items, location, quantity, unit cost, value, write-downs), how it computes (J03 engine), the two modes, and optional parameters. It does not explain the groupBy parameter or potential pagination/limits, but these are minor gaps. Overall it provides sufficient context 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It explains runId (frozen lines), asOf (live valuation date), period (period end), accountIds (narrow account grouping), method (what-if under another method), and netRealisableValues (applies lower-of-cost-or-market clamp). It does not explain groupBy or workspaceId, but these are relatively self-explanatory. This compensates well for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is the authoritative detailed valuation report, the single source of truth for inventory worth at a cut-off. It specifies it returns frozen lines for a posted run or computes live valuation via J03 engine, with explicit detail on grouping and optional parameters. This distinguishes it from sibling reports like stock_valuation_report or inventory_valuation_preview, which are implied to be less authoritative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear conditional usage: with runId it returns frozen lines, otherwise it computes live valuation at asOf or period end. It also explains optional parameters like method for what-if and netRealisableValues for lower-of-cost-or-market. However, it does not explicitly name alternatives or state when not to use this tool, though the 'single source of truth' phrasing implies it should be preferred over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_reverseA
Idempotent

Reverse a posted valuation run. Posts the exact A02 mirror of the run journal via reverseEntry (which moves the GL back by the delta and restores the baseline every later run measures against), marks the original run reversed and records the reversing journal. The original run and its journal are never mutated: a correction is a reverse plus a fresh run. A reason is required. Idempotent: a replay returns the already-reversed run and posts no second compensation. A run that posted no journal (zero delta) is marked reversed with nothing to reverse. CONSEQUENCE: Reverses a posted valuation run with a correcting entry and restores the baseline the next run measures against. The original run stays visible; a fresh run books the right figure.

NameRequiredDescriptionDefault
runIdYes
reasonYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: it discloses that a compensating journal is posted via reverseEntry, that the GL moves back by the delta, that the original run and journal are never mutated, that a reason is mandatory, and how idempotent replay behaves. The zero-delta case (marked reversed with nothing to reverse) is exactly the kind of edge case an agent could not infer. The non-destructive claim is consistent with 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The mechanism and constraints are front-loaded well, but the trailing "CONSEQUENCE:" block largely restates earlier sentences ("reverses a posted valuation run ... restores the baseline", "a fresh run books the right figure"), spending length without adding new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and no annotation-level safety detail, the description covers effect, mutation model, idempotency and edge cases thoroughly. Remaining gaps are the return shape (only hinted at by the replay sentence) and any permission or period-lock prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden. It does clarify that a reason is required and implies idempotencyKey semantics through the replay behavior, but workspaceId is never mentioned and no format or scoping guidance is given for runId. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Reverse a posted valuation run") and immediately names the mechanism (A02 mirror posted via reverseEntry). It is clearly distinguishable from inventory_valuation_post, inventory_valuation_create and the generic reverse_entry sibling because it operates on a whole posted valuation run and restores the baseline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the correction workflow explicitly: "a correction is a reverse plus a fresh run," which tells the agent this tool alone does not fix the figure. It also states the precondition (run must be posted) and the zero-delta edge case. It stops short of naming sibling tools (e.g. inventory_valuation_post) as the follow-up call, so the routing is implied 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.

inventory_valuation_set_defaultA
Idempotent

Set the workspace default valuation method from effectiveFrom on. Appends an immutable assignment row rather than overwriting a setting, so the history of what applied when survives (OR 958c Stetigkeit) and a valuation at an earlier date still resolves to the method that was in force then. effectiveFrom is what the period lock is checked against, NOT the day you call it: a change dated into a soft- or hard-closed period is refused with period_locked before anything is written, so a sealed year cannot be restated by picking an old date. When the workspace already has movements dated on or after effectiveFrom, the change would restate their valuation for every item without an override of its own, so it is refused with method_change_blocked_open_period unless you pass forceRevaluation true AND a reason (a blank reason does not count). A disabled method is refused. Posts no journal entry. CONSEQUENCE: Sets how stock is valued from the chosen date on, for every item without its own method; the earlier method stays on record for earlier dates. To change it, you set a method again.

NameRequiredDescriptionDefault
methodYes
reasonNo
workspaceIdYes
effectiveFromYes
idempotencyKeyYes
forceRevaluationNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: append-only immutable assignment row, no overwrite of history, no journal entry, disabled methods rejected, and named error conditions (period_locked, method_change_blocked_open_period) with the exact escape hatch. This is exactly the kind of side-effect and refusal disclosure a mutation tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its date semantics, and the refusal modes are each given their own space. It loses a point for redundancy and noise: the CONSEQUENCE block largely restates material already covered (history retention), and the "(OR 958c Stetigkeit)" citation is unexplained jargon that adds no decision value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation with no output schema and no annotation coverage of side effects, the description supplies the behavioral picture: what is written, what is preserved, what is refused and why. Remaining gaps are the return value and the role of idempotencyKey, both minor relative to what is covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description must carry parameter meaning, and it does for four of six: effectiveFrom (period-lock anchor, not call date), forceRevaluation (required to override the open-period block), reason (must be non-blank), and method (must be enabled). workspaceId and idempotencyKey are left unexplained, and no value formats are given for effectiveFrom.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Set the workspace default valuation method") plus the scope in which it applies: "for every item without its own method." That scope clause implicitly separates it from inventory_valuation_set_item_method, so an agent can pick the right one without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear situational context: the change is dated and refused if the target period is closed, and blocked if movements exist after effectiveFrom unless forceRevaluation plus a non-blank reason is supplied. It never names a sibling (e.g. the item-level method setter or inventory_valuation_method_history) to route to instead, so it is strong on when-to-use but silent on alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_set_item_methodA
Idempotent

Override the valuation method for one item from effectiveFrom on, with standardCostMinor when the method is standard_cost (required, integer Rappen, above zero). Appends an immutable assignment row; effectiveFrom is what the period lock answers to, never the call date. When the item already carries movements dated on or after effectiveFrom, those are exactly the movements this change restates, so it is refused with method_change_blocked_open_period unless you pass forceRevaluation true AND a reason: the reason is the sentence that appears in the Stetigkeit history when someone asks why the figure moved, so a force without one is refused rather than recorded blank. The revaluation itself belongs to J06. A disabled method is refused; a foreign item is not_found. Posts no journal entry. CONSEQUENCE: Sets how this item is valued from the chosen date on; the earlier method stays on record for earlier dates. To change it, you set a method again.

NameRequiredDescriptionDefault
itemIdYes
methodYes
reasonNo
workspaceIdYes
effectiveFromYes
idempotencyKeyYes
forceRevaluationNo
standardCostMinorNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: immutable append-only assignment row, effectiveFrom governs the period lock rather than the call date, specific refusal codes (method_change_blocked_open_period, not_found for foreign items), disabled-method rejection, and explicitly 'Posts no journal entry'. These are exactly the traits an agent needs before invoking a valuation mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then refusal conditions, then consequence, with zero filler about the resource itself. It is one dense run-on block with internal jargon ('belongs to J06', 'Stetigkeit history') and a slightly redundant closing restatement, which keeps it off a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation with no output schema and no annotation coverage of failure modes, the description supplies refusals, side effects, and history semantics. Remaining gaps are the source of valid method identifiers and item/workspace scoping, which an agent would need inventory_valuation_methods or get_item to resolve.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load, and it does for the important ones: effectiveFrom semantics (period lock anchor), method with the standard_cost -> standardCostMinor dependency (integer Rappen, above zero), and the reason/forceRevaluation pairing. It leaves workspaceId, itemId scoping, and idempotencyKey unaddressed (the latter partly covered by idempotentHint) and never enumerates the valid method values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Override the valuation method for one item from effectiveFrom on', which makes it distinguishable from the global siblings (inventory_valuation_set_default, inventory_valuation_method_set_enabled) by the 'one item' scope. The closing CONSEQUENCE sentence reinforces that earlier periods keep the old method.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete prerequisites: forceRevaluation true AND a reason are required when movements exist on/after effectiveFrom, otherwise method_change_blocked_open_period. It also points elsewhere for the actual restatement ('The revaluation itself belongs to J06'), though it never names the sibling tool explicitly nor lists when a per-item override is preferable to a default-method change.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inventory_valuation_statusA
Read-only

Der Bewertungsstatus (valuation status / drift, US-J07.3, the OP11 surface): recompute the current inventory value LIVE from the J02 ledger through the J03 method at as_of (default today, optional method override), read the most recent POSTED J06 valuation run at or before that cut-off, and report current_value_rappen, last_posted_value_rappen, drift_rappen, drift_pct, last_posted_at, last_run_id and a status of aligned | drift_present | never_posted. Drift is REPORTED, never auto-corrected: J07 posts nothing and reaches no GL. With include_detail the per-item current values are returned. This is the hard check the period-close checklist reads. Zero inventory answers zeros, aligned.

NameRequiredDescriptionDefault
as_ofNo
methodNo
thresholdsNo
workspaceIdYes
include_detailNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds important behavioral context beyond the readOnlyHint annotation: 'Drift is REPORTED, never auto-corrected: J07 posts nothing and reaches no GL.' It also clarifies that the computation is live and that zero inventory yields aligned status. These are valuable details about side effects and edge cases. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured, front-loading the core purpose and the key status list. It avoids redundancy and includes only necessary details like the GL impact and the zero-inventory edge case. Some internal jargon ('OP11 surface', 'J02', 'J03') is used without explanation, but it adds precision for knowledgeable users.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description enumerates all returned fields explicitly. It also covers edge cases (never_posted, zero stock) and side effects. The main gap is the undefined thresholds parameter, but the tool's core function and expected output are sufficiently specified for an agent to call it correctly in typical scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains as_of (default today), method override, and include_detail (per-item values). However, it does not explain thresholds or the required workspaceId. It covers three of five parameters clearly, leaving two unspecified. This partial coverage warrants a mid-level score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool does: recomputes current inventory value live from the J02 ledger via the J03 method, compares it to the most recent posted J06 valuation, and reports drift with a status. The verb 'recompute' and the resource 'inventory valuation status' are specific channels. It clearly differentiates itself from other inventory tools by returning a status with drift and posting nothing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: 'This is the hard check the period-close checklist reads.' It implies this is a read-only validation tool versus other tools. However, it does not explicitly name alternative tools or define when not to use it, leaving some inference to the agent. Overall, usage context is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

invite_memberA
Idempotent

Invite someone to this workspace with a role. Writes a pending membership and PREPARES the invite; TILL has no transport and never claims a send, so the token is handed back for the operator to deliver. kind (human, the default, or agent) says what the invitee is: an agent member is the governed seat, its writes draft under the approval dial and its calls land in the trace, on every door including a served one. CONSEQUENCE: Gives a person or an agent access with the chosen role. Whoever redeems the invitation sees the books until you revoke the access; what they saw stays seen.

NameRequiredDescriptionDefault
kindNo
roleYes
emailYes
displayNameNo
workspaceIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotent and non-destructive annotations, the description discloses important behavior: it writes a pending membership, does not send the invite, returns a token for the operator to deliver, and explains that an agent member drafts under the approval dial and is traced. It also states the access consequence clearly: whoever redeems sees the books until revoked, and what they saw stays seen.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and each sentence contributes behavioral or consequence information. It is somewhat dense and stylized, with capitalized emphasis and an opaque phrase like 'on every door including a served one,' but there is little outright waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no output schema and 0% schema description coverage, the description covers purpose, pending-invite behavior, token handback, agent semantics, and access consequences. It remains incomplete on parameter formats and required-field meanings, and does not describe the returned token shape, leaving notable gaps for an agent to fill.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden for all six parameters. It adds useful meaning for kind (human default or agent) and mentions role conceptually, but leaves email, workspaceId, displayName, role values, and especially the required idempotencyKey unexplained despite the idempotentHint annotation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: invite someone to this workspace with a role. It also distinguishes itself from a sending tool by saying it prepares the invite and never claims a send, which an agent can use to tell it apart from siblings like accept_invite or set_role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies when to use the tool by describing inviting a person or agent with a role, and it gives guidance on choosing kind (human default vs agent). However, it never names alternatives such as accept_invite for redemption, set_role for later role changes, or revoke_member for removal, so routing between siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

issue_credit_noteA
Idempotent

Issue a drafted Gutschrift: assign the gap-free G-number and post the mirror entry (debit revenue and output VAT, credit 1100 Debitoren) dated today, closing against the invoice per rate class (D67/D71). CONSEQUENCE: Issues the credit note with its number and books it against the invoice; from then on it can't be edited. If it is wrong, you cancel it, which books a correcting entry.

NameRequiredDescriptionDefault
workspaceIdYes
creditNoteIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations by disclosing that the number is gap-free and permanent, that the note cannot be edited after issuance, and that correction requires a cancelling entry that itself posts a reversing booking. That is exactly the irreversibility context an agent needs before invoking a booking operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and its accounting effect; the explicit 'CONSEQUENCE:' marker makes the risk section scannable. The debit/credit parenthetical and rate-class tags (D67/D71) are dense but functional rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter posting tool with no output schema, the description covers the important ground: what gets booked, what is assigned, irreversibility, and the correction path. The remaining gap is return detail beyond 'with its number' and the unexplained idempotencyKey contract.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden, and it explains none of the three required parameters. It implies creditNoteId points at a drafted Gutschrift, but workspaceId and especially idempotencyKey (relevant given idempotentHint=true) are never given meaning or format guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Issue a drafted Gutschrift') and then enumerates the downstream effect: gap-free G-number assignment, mirror entry with named accounts (revenue, output VAT, 1100 Debitoren), dated today. The word 'drafted' implicitly separates it from the sibling create_credit_note, so an agent can tell what stage of the credit-note lifecycle this covers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Issue a drafted Gutschrift' signals the prerequisite (a draft must already exist) and the closing sentence supplies the follow-up path when the result is wrong ('you cancel it, which books a correcting entry'). It never names create_credit_note or an explicit when-not-to-use condition, so the alternative routing is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

issue_dunning_runA
DestructiveIdempotent

Issue a proposed Mahnlauf: re-check every item against the OP-Liste as of today (a settled invoice drops out, a shrunken one shrinks) AND against the escalation state (one issued reminder per level per invoice: an item another run already issued at this level drops as stale), freeze the items and the Verzugszins note figures (Art. 104 OR, on the invoice principal), and, when the policy books a Mahngebühr, post ONE entry (debit 1100 Debitoren, credit the fee-income account, the fee's VAT split pro rata across each chased invoice's own rate bases per D69). A locked period skips the fee, names it on the run, and the run still issues; calling issue again on that run with a NEW idempotency key BOOKS the skipped fee once the period is open, and the booking never rewrites the letter (D73: the demand froze at issue; the recovered fee joins the next escalation letter or ordinary collection on the OP-Liste). Reusing the ORIGINAL issue key on such a run replays the issue's own answer while the period is still locked, and refuses recovery_needs_its_own_key once it is open (a retry and a recovery are indistinguishable under one key, so the engine refuses rather than guesses; the payload names the remedy). P8: pass confirmed=true or enable the workspace dial. The letters exist from here on via get_dunning_pdf. A mistaken or waived fee is reversed by dunning_fee_reverse, never an edit. CONSEQUENCE: Raises each invoice in the run one reminder level for good and books any reminder fee. The level is never lowered again; a wrong fee is reversed from the run with a correcting entry.

NameRequiredDescriptionDefault
runIdYes
confirmedNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds extensive behavior beyond the annotations: re-checking against the OP-Liste and escalation state, freezing figures, posting one fee entry, locked-period behavior, idempotency replay/refusal semantics, and irreversible reminder-level increases. These details are consistent with idempotentHint=true and destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and most clauses add specific operational detail, including the final CONSEQUENCE summary. It is dense and acronym-heavy, but that density is largely justified by the complexity of the dunning, fee, and idempotency rules.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema, the description covers the critical behavioral and recovery paths: item re-checking, freezing, fee posting, locked periods, key reuse, confirmation, and reversal. It does not describe the success payload, but otherwise gives an agent enough to invoke it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description has to carry parameter meaning. It thoroughly explains confirmed and idempotencyKey behavior, but workspaceId and runId are only implied by context rather than explicitly described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Issue a proposed Mahnlauf.' It clearly describes issuing a dunning run and distinguishes the action from proposing or sending it by focusing on the issue-time checks, freeze, fee booking, and permanent level increase.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when to call: after a run is proposed, with confirmed=true or the workspace dial enabled, and with careful idempotency-key handling. It names dunning_fee_reverse and get_dunning_pdf for adjacent actions, though it does not explicitly route against propose_dunning_run or send_dunning_run.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

issue_invoiceA

Issue a draft invoice: assign the gap-free number, post the balanced VAT entry (A10 onIssue delegate), and attach the QR-bill summary. CONSEQUENCE: Issues the document with its number and books it; from then on it can't be edited. You correct it with a credit note or a cancellation, and the original stays on record.

NameRequiredDescriptionDefault
invoiceIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply destructiveHint=false, so the description carries the real burden and delivers: it discloses the irreversible locking of the document, the numbering assignment, the accounting side effect (VAT entry posted), the QR-bill attachment, and the remediation path, plus the fact the original stays on record. That is exactly the behavioural context an agent needs before an irreversible commit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences with the action first and the consequence explicitly labelled ("CONSEQUENCE:"), then the remediation. No filler; every clause adds decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an irreversible posting tool with no output schema, no parameter documentation and minimal annotations, the description covers side effects well but leaves gaps: it does not say what is returned (invoice number, entry reference), what permissions are required, or how idempotencyKey behaves on retry.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three parameters, so the description must compensate and it does not. It never says what invoiceId must reference (a draft invoice), what workspaceId scopes, or what idempotencyKey protects against on a retry of an irreversible action. Only the phrase "issue a draft invoice" implicitly hints at the invoiceId precondition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Issue a draft invoice") and enumerates the three concrete effects: gap-free numbering, balanced VAT posting via the A10 onIssue delegate, and QR-bill attachment. This is unmistakably distinct from the delivery-oriented siblings (send_invoice) and from the correction paths (issue_credit_note, po_amendment_cancel).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the decision boundary concrete by stating that after issuance the document can't be edited and must be corrected with a credit note or cancellation. That tells the agent to use this only when the draft is final. It does not explicitly contrast with send_invoice or state prerequisites (e.g. the invoice must be in draft status), so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

item_categories_deleteA
Destructive

Delete an item category. Refused (category_in_use) while any item or child category still points at it; reassign or empty it first. CONSEQUENCE: Deletes the item category for good; only one that no item or subcategory points at can go. You can create it again.

NameRequiredDescriptionDefault
categoryIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true; the description goes well beyond that by naming the exact refusal code (category_in_use), explaining the referential-integrity guard, stating the deletion is permanent ('for good'), and noting the category can be recreated. That is precisely the what-gets-destroyed context a mutation tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is well front-loaded, but sentences two and three restate the same constraint twice ('refused while any item or child category still points at it' / 'only one that no item or subcategory points at can go'). Roughly a third of the text is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, irreversible operation with no output schema, the description covers consequence and blocking conditions well but omits permission requirements, what the call returns on success, and any idempotency behavior. Adequate but with visible gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three parameters, so the description carries the full burden and does not deliver. categoryId is inferable from the noun, but workspaceId scoping and especially idempotencyKey (retry semantics for a destructive call) are completely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Delete an item category.' This is unambiguous against siblings such as item_categories_list and item_categories_upsert. It never names a sibling explicitly, so it lands at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a clear precondition for use: the delete is refused with category_in_use while any item or child category points at it, and the caller must reassign or empty first. It does not name a specific alternative tool for reassignment, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

item_categories_listA
Read-only

List the item categories in the workspace, ordered by sort then name.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the safety profile. The description adds a genuine behavioral detail beyond that – result ordering ('by sort then name') – which is useful. However, it does not disclose pagination, whether archived categories are included, or the shape of the returned items, so coverage is decent but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is entirely front-loaded: verb, resource, scope, and ordering are stated with zero filler or redundancy. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one parameter and no output schema, the description is nearly complete: it names the resource, scope, and ordering. Minor gaps (pagination, archived-item inclusion, return shape) are acceptable given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented workspaceId parameter. It partially does by scoping the resource to 'the workspace', implying workspaceId selects the workspace. But it adds no detail about the parameter's format, source, or default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('list'), a precise resource ('item categories'), scope ('in the workspace'), and even the ordering ('by sort then name'). This clearly distinguishes it from the mutation siblings item_categories_upsert and item_categories_delete, and from generic list tools like list_items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is provided. The read intent is inferable from the verb 'list' and the sibling names (upsert/delete), but the description itself never states when this tool should be chosen over alternatives or mentions exclusions such as archived categories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

item_categories_upsertA
Destructive

Create or edit an item category (two-level tree: the parent of a child must itself be a root). Pass categoryId to edit, omit it to create.

NameRequiredDescriptionDefault
nameNo
sortNo
parentIdNo
categoryIdNo
workspaceIdYes
idempotencyKeyNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true, so the safety profile is already carried structurally; the description adds the two-level nesting constraint, which is genuinely useful behavioral context. However, for an upsert flagged destructive it does not say whether an edit overwrites unspecified fields, what the child/parent implications are when reparenting, or whether the operation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, then the constraint, then the mode toggle. Nothing redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers what the tool does, the create/edit switch, and the tree constraint, which is enough to attempt a call. Missing are field meanings for sort, workspaceId, and idempotencyKey, plus any error behavior for invalid nesting, which matters for a destructive upsert with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 6 parameters, so the description must compensate. It fully explains categoryId (create vs edit toggle) and partially explains parentId via the root-parent constraint, but name, sort, workspaceId, and idempotencyKey are given no semantics at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create or edit an item category') and immediately qualifies the resource as a two-level tree, so the agent knows the domain shape of what it is writing. It also tells the agent the create/edit switch is the presence of categoryId, which distinguishes it from the read/delete siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the mode-selection rule: pass categoryId to edit, omit it to create. It also states a structural precondition (a child's parent must itself be a root). It does not point to alternatives like item_categories_list for lookup before editing, and gives no guidance on when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

item_set_tracking_modeA
DestructiveIdempotent

Set an item's lot/serial tracking mode: none | lot | serial | lot_and_serial. The item must be stockable (track_stock true) and its current on-hand must be 0 for any non-none mode (else tracking_mode_requires_zero_stock); a service or non-stockable item is tracking_not_applicable. Going back to none needs every lot and serial for the item archived and balanced. Plain master data: posts no journal entry.

NameRequiredDescriptionDefault
modeYes
itemIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations declaring idempotentHint and destructiveHint, the description adds meaningful behavioral context: prerequisite checks, named error conditions, and the fact that no journal entry is posted. It does not explain idempotency-key behavior or the response, but it adds substantial value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three dense sentences with no wasted text. The core operation is front-loaded, followed by applicability constraints and the accounting note in a logical order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, it covers the critical preconditions and error cases well and clarifies that no journal entry is posted. It is still missing expected success behavior or return information and idempotency-key semantics, but the operational picture is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It documents the mode values and ties itemId to the target item, but workspaceId and idempotencyKey are not explained, leaving clear gaps for a four-parameter required schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: set an item's lot/serial tracking mode, and it explicitly enumerates the supported modes. This distinguishes the tool from sibling item, lot, and serial tools because it is the item-level tracking configuration operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives strong when/when-not conditions: the item must be stockable, on-hand must be zero for any non-none mode, and service/non-stockable items are not applicable. It also specifies the requirement for returning to none. It does not name sibling alternatives, but the operational conditions are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

journal_numbering_planB
Read-only

Inspect the Belegnummer run of the book without writing anything: the numbering settings in force (ledger.belegnummer_mode, _start, _prefix, _split_voucher), how many posted entries are numbered, unnumbered and adopted, whether a catch-up is owed, every series with its next number, the migrated entries (source import) classified by their ref (plain integers and bexio refs, the highest migrated number, the split vouchers, the duplicates: claims that do not read their old number because different vouchers claim it, with the entry that keeps it, and groups of entries with identical content flagged as a possible double import for a person to check, and the non-numeric refs), and the numbers the next catch-up would assign to the posted entries still without one. Lists are capped at 200 rows, each with its total.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the safety profile, but the description adds meaningful behavioral details: it lists exactly what data is returned (settings, counts, series, migrated entries, duplicates, catch-up assignments) and notes that lists are capped at 200 rows with totals. This goes well beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single very dense sentence with many clauses, followed by a second sentence about row caps. The purpose is front-loaded, but the middle is a wall of jargon-heavy detail that could be structured more clearly; it is not concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and the absence of an output schema, the description does a thorough job explaining the many returned data points, including migrated entries, duplicates, and catch-up assignments. The only notable gap is the lack of any explanation for the workspaceId parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter (workspaceId) with 0% schema description coverage, and the description never mentions it. While the parameter name is self-explanatory, the description adds no meaning about format, source, or expected value beyond what the bare schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Inspect') and a specific resource ('the Belegnummer run of the book') and clarifies it is read-only. It does not explicitly differentiate from any sibling tool, but no sibling appears to cover journal numbering, so the purpose is clear enough for an agent to identify it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without writing anything' implies this is the read-only inspection tool, but there is no explicit guidance on when to choose it over alternatives like general_ledger or ledger_qa. The usage context is only implied by the purpose, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

landed_cost_allocate_confirmA
Idempotent

Confirm the allocation of a DRAFT voucher, in ONE atomic transaction: re-run the pure allocator (verifying the residual is 0), write one value-only J02 landed_cost movement per target (qty 0, the allocated Rappen as cost_amount, ref_movement_id = the receipt movement, so J03 folds the cost onto that exact layer and on-hand is unchanged), post ONE balanced A02 entry, read it back to verify it balances, and move the voucher draft -> allocated. The GL entry SPLITS the cost by what J03 actually carries: Dr inventory control for the CAPITALIZABLE share (the on-hand fraction for weighted-average and FIFO, ZERO for a standard-cost item), Dr the variance account for the remainder (already-issued units, and a standard-cost item whole cost), Cr landed-cost clearing for the total, so the inventory-control debit equals the J03 valuation rise exactly (OP11). variancePolicy strict refuses a remainder (landed_cost_variance_not_permitted); expense_excess needs varianceAccountId set (variance_account_required). method and effectiveDate default to the voucher. A replay under the same idempotencyKey returns the allocated voucher and writes nothing; a second confirm under a different key is invalid_transition. period_locked when the effective date is in a sealed period. CONSEQUENCE: Spreads the extra purchase costs across the received goods and books them as one entry. If it is wrong, you reverse the allocation with a correcting entry; the original stays visible.

NameRequiredDescriptionDefault
methodNo
voucherIdYes
workspaceIdYes
manualSharesNo
effectiveDateNo
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses extensive behavior beyond the annotations: it writes J02 movements, posts one balanced A02 entry, verifies the balance, moves the voucher from draft to allocated, and explains variance-policy errors and period locks. This is consistent with idempotentHint=true and destructiveHint=false, and the reversal consequence is clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: it starts with the confirm action and then explains the atomic transaction sequence. It contains internal journal codes and accounting details that are justified for such a high-risk mutation, though the single-paragraph wall of text could be structured more readably.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex financial mutation with no output schema, the description is strong: it covers atomicity, accounting entries, variance handling, idempotency, error codes, and reversal consequence. It remains incomplete on manualShares semantics and the exact return shape, so it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across six parameters, and the description only partially compensates: it explains method/effectiveDate defaults and idempotencyKey replay behavior. The nested manualShares object is not described at all, and varianceAccountId is referenced as a requirement in the text but is absent from the schema, leaving important input semantics unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: confirm the allocation of a DRAFT landed-cost voucher, with atomic transaction steps that make the operation concrete. It is clear enough to stand apart from generic voucher tools, but it does not explicitly name the preview sibling as the alternative, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear prerequisites and context: the voucher must be DRAFT, the allocator must verify residual 0, and behavior is defined for idempotent replays and invalid transitions. It does not explicitly say when to use this versus landed_cost_allocate_preview or landed_cost_reverse, leaving the alternative-routing guidance incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

landed_cost_allocate_previewA
Read-only

PURE allocation preview of a voucher: per target the base value and quantity, the share (0..1), the allocated Rappen and the per-unit impact, the effective method actually used (a fallback swaps by_weight / by_volume to by_value when an attribute is missing, reported in warnings), and the residual (always 0 after commercial rounding). method defaults to the voucher method; manualShares supplies per-target fractions for the manual method (must sum to 1). Writes nothing and is safe to call repeatedly; changing the method immediately re-computes.

NameRequiredDescriptionDefault
methodNo
voucherIdYes
workspaceIdYes
manualSharesNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses important behavior: fallback logic from by_weight/by_volume to by_value, warning reporting, residual always being 0 after rounding, immediate re-computation on method change, and safety of repeated calls. This is substantial value beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place: outputs, fallback semantics, defaults, parameter constraints, and safety. It front-loads the core purpose before moving into details and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description thoroughly covers what the tool returns, how the method is resolved, what fallback behavior occurs, and what can be configured. An agent has enough information to call and interpret this preview correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well: it explains that method defaults to the voucher method and names possible values via the fallback discussion, and it defines manualShares as per-target fractions for the manual method with the sum-to-1 constraint. workspaceId and voucherId are not discussed, but their meaning is self-evident from schema names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'PURE allocation preview of a voucher' and enumerates the concrete output fields (base value, quantity, share, allocated Rappen, per-unit impact, method, residual). This clearly distinguishes it from the sibling landed_cost_allocate_confirm, which performs the actual allocation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'preview' framing and 'Writes nothing and is safe to call repeatedly' make the intended simulation use-case clear. It does not explicitly name the alternative confirm tool or state 'use confirm to apply the allocation', so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

landed_cost_getB
Read-only

One landed-cost voucher with its header, cost-component lines and allocation targets (each with the goods-receipt line, the original receipt movement, the allocated amount and unit impact, and the J02 movement / reversal movement it minted). A foreign or unknown id is not_found, never cross-tenant data.

NameRequiredDescriptionDefault
voucherIdYes
workspaceIdYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, and the description adds valuable behavioral context: the not_found result for foreign/unknown ids and the guarantee of data isolation across tenants. It also enumerates the detailed response contents, which goes beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the main object and then details its components. It is efficient with no filler, though the nested parenthetical is somewhat complex.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates well by detailing the return structure and covering error cases. It remains incomplete on parameter semantics and usage context, but for a simple getter, the core calling information is mostly present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero descriptions for workspaceId and voucherId. The description mentions 'a foreign or unknown id' but does not explicitly map this to voucherId, nor does it clarify workspaceId semantics beyond its name. Some meaning is added, but insufficiently given the 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource: a single landed-cost voucher with its header, cost-component lines, and allocation targets. The verb 'get' in the tool name plus the focus on one voucher make the purpose evident, though it does not explicitly contrast with the list sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like landed_cost_list or landed_cost_voucher_create. The description is entirely about output structure and error behavior, not about selection criteria or preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

landed_cost_listA
Read-only

List landed-cost vouchers with filters: status (one value or an array of draft | allocated | reversed), itemId (vouchers that touch that item), and an effectiveDate range (fromDate / toDate). Each row carries the number, status, estimated flag, currency, total cost in Rappen, allocation method, effective date and the linked journal entry id. Newest effective date first. A foreign workspace sees only its own vouchers (§H-TENANT).

NameRequiredDescriptionDefault
itemIdNo
statusNo
toDateNo
fromDateNo
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses the sort order ('Newest effective date first'), tenant isolation behavior (§H-TENANT), and the exact row content (number, status, estimated flag, currency, total cost in Rappen, allocation method, effective date, linked journal entry id). No contradiction with annotations: 'List' aligns with readOnlyHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, no filler: filters, row content, sort order, and tenant scoping each get exactly the space they need. The core action is front-loaded and every clause contributes a distinct fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description compensates by enumerating row fields, and it specifies ordering, filtering, currency unit (Rappen), and data scoping. The only notable omission is a pagination/limit/result-size behavior for what is likely a list operation, keeping it from a perfect 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden and largely delivers: it supplies the status enum values (draft | allocated | reversed), defines itemId as 'vouchers that touch that item', and explains that fromDate/toDate define an effectiveDate range. workspaceId is only implied via the tenant-scope note rather than explicitly tied to the parameter name, a minor gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource, 'List landed-cost vouchers', and enriches it with concrete filter semantics (status values, itemId, effectiveDate range). The listing intent is unmistakable and clearly separable from siblings like landed_cost_get (single voucher), landed_cost_voucher_create, and landed_cost_reverse.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when this tool applies: listing vouchers with status/item/date filters, and it notes the tenant-scoping constraint ('A foreign workspace sees only its own vouchers'). It does not explicitly name alternatives or exclusion conditions, but the filter and output detail makes the use case unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

landed_cost_reverseA
Idempotent

Reverse an ALLOCATED voucher, the ONE correction for a confirmed allocation. Nothing about the original voucher, its movements or its journal is edited or deleted. What is written is the compensation: a value-only J02 landed_cost movement per target with the NEGATED cost against the same receipt layer (so J03 nets the layer landed cost back to zero, inventory value flat), and a reversing A02 entry that is the exact mirror of the confirm entry (so the GL nets flat). The voucher becomes reversed and is permanently linked to the reverse journal and reverse movements. reason is required. Idempotent under idempotencyKey. period_locked when the effective period is sealed. CONSEQUENCE: Reverses a confirmed landed-cost allocation with a correcting entry; nothing in the original is edited. The voucher stays on record as reversed; to allocate again, you start a new voucher.

NameRequiredDescriptionDefault
reasonYes
voucherIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the annotations: names the compensating artifacts (value-only J02 movement with the negated cost against the same receipt layer, J03 netting to zero, mirror A02 GL entry), states that nothing in the original is edited or deleted, and confirms the voucher is permanently linked and marked reversed. It also discloses idempotency behavior and the period_locked failure mode, which the annotations alone (idempotentHint, destructiveHint=false) cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and the compensation mechanics, but the CONSEQUENCE block largely restates the opening ('nothing in the original is edited', 'stays on record as reversed'), which is redundant. The only new information in that block is the 'start a new voucher' redirect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive-adjacent mutation with no output schema, the description covers effects, idempotency, permanence, and the period_locked error thoroughly. It does not say what the call returns (reversed voucher, journal ids, movement ids) or whether any permission/role is needed, both of which remain gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden; it clarifies idempotencyKey semantics ('Idempotent under idempotencyKey') and that reason is mandatory. However, 'reason is required' merely repeats the required array, and voucherId/workspaceId get no explanation of expected format or source.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reverse an ALLOCATED voucher') and positions it as 'the ONE correction for a confirmed allocation', which implicitly separates it from landed_cost_allocate_confirm / landed_cost_voucher_create. It stops short of naming the sibling tools it distinguishes against, so an agent must infer the routing from the surrounding catalog.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The precondition ('confirmed allocation', 'ALLOCATED voucher') and the counter-instruction ('to allocate again, you start a new voucher') give clear context for when to call this versus re-allocating. It never states explicit exclusions (e.g., draft/unconfirmed vouchers, or reversing an already-reversed voucher) beyond the period_locked error case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

landed_cost_voucher_createA
DestructiveIdempotent

AGENT-FIRST. Open a DRAFT landed-cost voucher that collects freight, duty, insurance, handling or brokerage against one or more POSTED goods-receipt lines, so the extra cost can be capitalised onto the inventory that incurred it (OR 960 acquisition cost). costLines is a list of { componentType (freight | duty | insurance | handling | brokerage | other), amountMinor (> 0 Rappen), description?, vendorId?, taxCodeId? }. targetGrLineIds are the recognised goods_receipt_doc_line ids (each must be on a posted, non-reversed receipt and not already allocated under a live voucher, else already_allocated). inventoryAccountId and clearingAccountId are the two GL accounts a later confirm posts between (Dr inventory control, Cr landed-cost clearing / accrued costs). varianceAccountId (optional) receives the NON-capitalizable share when a receipt has been partly issued or the item is standard-cost (J03 carries only the on-hand share onto inventory); it is required at confirm only if such a remainder actually arises. variancePolicy is expense_excess (default: route the remainder to varianceAccountId) or strict (refuse a confirm that would leave a remainder). allocationMethod defaults to by_value. Nothing physical happens yet: no stock movement, no journal. Idempotent under idempotencyKey.

NameRequiredDescriptionDefault
notesNo
fxRateNo
currencyNo
costLinesYes
isEstimatedNo
workspaceIdYes
effectiveDateNo
sourceBillIdsNo
idempotencyKeyYes
variancePolicyNo
targetGrLineIdsYes
allocationMethodNo
clearingAccountIdYes
varianceAccountIdNo
inventoryAccountIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that the tool creates only a draft, performs no stock movement or journal posting, validates posted non-reversed unallocated receipt lines, and defines how later confirmation will post inventory and clearing entries. It also explains variance handling and idempotency behavior, giving the agent substantial operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the dense detail is mostly justified by the tool's complexity and 15 parameters. Some terminology, such as OR 960 and J03, is terse and may not be self-explanatory, but overall the structure is efficient rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex draft-creation tool with no output schema, the description covers the critical accounting behavior, validation rules, idempotency, and variance policy. It leaves some optional parameters unexplained and does not describe the return value, but the core information needed to invoke it correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by explaining the shape of costLines, the meaning of componentType and amountMinor, targetGrLineIds validation, inventory/clearing/variance account roles, variancePolicy options, allocationMethod default, and idempotencyKey. However, several parameters such as workspaceId, notes, fxRate, currency, isEstimated, effectiveDate, and sourceBillIds are not described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: opening a DRAFT landed-cost voucher against posted goods-receipt lines to capitalize extra costs. It is distinct from sibling operations such as landed_cost_allocate_confirm and landed_cost_reverse because it clearly describes creating the draft before any physical or journal effect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent this is a draft-creation step and that nothing physical happens yet, which implies later confirmation is separate. It also gives prerequisite conditions for target lines, but it does not explicitly name alternative sibling tools or state when-not to use this versus landed_cost_allocate_confirm.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ledger_qaA
Read-only

Answer a question from the books without opening a report: Umsatz (turnover), offene Posten (open debtors) or MWST (VAT). Reads the existing A08/A16/A07 models and never mutates; a VAT question needs periodStart and periodEnd.

NameRequiredDescriptionDefault
questionYes
periodEndNo
periodStartNo
workspaceIdYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that the tool does not mutate, so the description's 'never mutates' adds little. It does add the behavioral detail that it reads existing A08/A16/A07 models and that VAT questions require period parameters, but it does not disclose the answer/response format or other limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no filler. The first sentence front-loads purpose and scope, and the second packs behavioral context and a parameter condition efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for selecting the tool but not fully sufficient for reliable invocation: there is no output schema, no parameter descriptions, and the response format, valid question phrasing, and workspaceId semantics are not covered. It gives a good high-level picture but leaves several operational details to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It usefully indicates that the question can be about turnover, open debtors, or VAT, and that periodStart/periodEnd are required for VAT questions. However, it leaves workspaceId, the expected question format, and the exact period value format unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Answer a question from the books') and enumerates the supported subjects: Umsatz, offene Posten, and MWST. The phrase 'without opening a report' differentiates it from report/export siblings even though no sibling is named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when to use the tool: when a direct answer from the books is needed rather than a report. It also provides a conditional usage rule: a VAT question needs periodStart and periodEnd. It does not name specific alternative tools or explicit when-not-to-use scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

liquidity_flow_listB
Read-only

The planned flows (rent, salaries, loan instalments) the liquidity forecast adds to the booked ones; retired flows only with includeInactive.

NameRequiredDescriptionDefault
workspaceIdYes
includeInactiveNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes this as a safe read. The description adds useful behavior about planned flows and inactive/retired flows, but does not cover return ordering, pagination, or other operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with no filler, front-loading the resource and the inactive-flow exception. Slightly awkward phrasing, but appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter list tool with readOnly annotations, the description covers the core distinction between planned and retired flows. It still leaves workspaceId semantics and result-shape expectations implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clearly explains includeInactive, but workspaceId is undocumented; the description partially covers the two parameters but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Identifies the resource as planned liquidity flows and scopes them against booked flows, with examples (rent, salaries, loan instalments). It does not name a sibling alternative, but the planned-vs-booked distinction makes the purpose fairly clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The includeInactive condition is explained, so the agent knows how to retrieve retired flows. However, there is no explicit guidance on when to use this versus liquidity_forecast or the liquidity_plan_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

liquidity_flow_setA
DestructiveIdempotent

Geplanten Zahlungsfluss erfassen (record a planned flow such as rent or salaries) for the liquidity forecast: label, direction ('in' | 'out'), a positive amountMinor, currency, firstDate, recurrence ('once' | 'monthly' | 'quarterly' | 'yearly', anchored on firstDate, month-end clamped), optional endDate, optional bankAccountId (the account it moves, in its currency; without one a forecast solved on chosen accounts counts it there and says so). With flowId it replaces that flow; active:false retires it (never deleted). A forecast input only: posts nothing and pays nothing.

NameRequiredDescriptionDefault
labelYes
activeNo
flowIdNo
endDateNo
currencyYes
directionYes
firstDateYes
recurrenceYes
amountMinorYes
workspaceIdYes
bankAccountIdNo
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say idempotentHint=true and destructiveHint=true; the description explains exactly what that means here — an existing flow is replaced with flowId, retired (never deleted) with active:false, and nothing is ever posted or paid. That resolves the scary 'destructive' hint into concrete, safe semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single front-loaded paragraph with the essential framing first, then the field semantics, then the replace/retire rules. It is dense and information-rich, but the bilingual gloss and stacked parentheses make it heavier than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation with no output schema, the description covers the semantics an agent needs to call it correctly and warns that it has no accounting side effects. It stops short of saying what is returned (e.g. a flow id) or how idempotencyKey conflicts are handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema declares no enums, yet the description supplies the allowed values for direction ('in'|'out') and recurrence ('once'|'monthly'|'quarterly'|'yearly'), the sign constraint on amountMinor, the anchoring/clamping rule for recurrence, and the conditional meaning of bankAccountId. Only workspaceId and idempotencyKey go unmentioned, and both are conventional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('record a planned flow ... for the liquidity forecast') and immediately names the domain concept with concrete examples (rent, salaries). It is clearly distinguishable from siblings such as liquidity_flow_list, liquidity_forecast and liquidity_skonto_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use (a forecast input for the liquidity forecast) and spells out the three modes of operation: create, replace when flowId is supplied, and retire when active:false. It does not explicitly name a sibling alternative or exclusion, which keeps it just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

liquidity_forecastA
Read-only

Die Liquiditätsvorschau (liquidity forecast): the bank balance day by day (granularity 'day' | 'week') over the next horizonDays (7-366, default 90) in ONE currency (default the base currency; never converted), from the flows the books already hold: the posted balance of the bank accounts, open invoices dated by due date plus each customer's observed payment delay (nearest-rank quantile delayQuantile 50-95, default 80, conditional on how late the invoice already is), recurring-invoice occurrences, the MWST payable of started periods due within 60 days of period end, planned flows, live A18 payment runs, and every open bill on the last clearing day that still pays it on time (arrival settlementLagDays 0-5 clearing days after execution, default 1). Every flow names its source and assumption; anything not counted is listed in excluded with its reason; MWST no A07 return can compute (a refused return, today every period under vereinnahmte Entgelte, or output tax no return explains) follows a blunt conservative rule: the OUTPUT tax booked in that period, never less any Vorsteuer, due 60 days after the period end, capped by what the output-tax accounts still owe; each such debit is listed in conservative with its amount, day and reason. With planId the proposal's dates replace the bills' default dates and both balance series are returned. A projection over scheduled flows (Prognose, keine Buchhaltungszahl); writes nothing.

NameRequiredDescriptionDefault
planIdNo
currencyNo
granularityNo
horizonDaysNo
workspaceIdYes
delayQuantileNo
bankAccountIdsNo
settlementLagDaysNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only readOnlyHint=true in annotations, the description carries the full burden and does so unusually well: it enumerates which flows are counted (posted balances, open invoices with observed delay, recurring occurrences, MWST, planned flows, A18 runs, open bills), states that every flow names its source and assumption, and that uncounted items appear in `excluded` with a reason. It also discloses the fallback rule for MWST it cannot compute (output tax, never net of Vorsteuer, due 60 days after period end, capped), listing each debit in `conservative`.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Everything is packed into a single run-on block with German/English interleaving (MWST, Vorsteuer, vereinnahmte Entgelte, Prognose) and long nested clauses about the conservative rule. The purpose is front-loaded, but the MWST edge-case rule could be a separate bulleted clause; a reader has to re-parse it to extract the operative rule.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, no-output-schema, read-only analytic tool, the description covers inputs, counted sources, exclusions, the conservative fallback, and even that both balance series are returned when planId is supplied. Only the treatment of bankAccountIds and the shape/serialization of the returned series are left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and largely does: it supplies defaults and ranges for horizonDays (7-366, default 90), delayQuantile (50-95, default 80, conditioned on lateness), settlementLagDays (0-5 clearing days after execution, default 1), plus the meaning of currency, granularity, and planId. The only gap is bankAccountIds, whose filtering semantics are never mentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first clause names a specific artifact (a day-by-day bank balance projection) plus the two knobs that shape it (granularity 'day'|'week', horizonDays 7-366). An agent immediately knows this is a forecast, not a ledger query. It stops short of explicitly positioning itself against the closely named siblings liquidity_plan_propose / liquidity_plan_get, so the differentiation is only implicit (via the optional planId).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied rather than stated: it says it is 'a projection over scheduled flows (Prognose, keine Buchhaltungszahl)' and explains that supplying planId swaps default bill dates for the proposal's dates. There is no explicit when-to-use-this-vs-liquidity_plan_get / liquidity_flow_list guidance and no exclusions pointing to an alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

liquidity_plan_draft_batchesA
Idempotent

Zahlungsläufe entwerfen (draft payment runs from a proposal): calls A18 create_payment_batch once per proposed execution date on bankAccountId (same currency as the proposal) and marks the proposal drafted. Refuses stale_plan when the books changed since the proposal (propose again). A line that captures a Skonto is NOT drafted (skonto_needs_reduced_amount: an A18 run pays the full open amount), nor is a bill A18 cannot pay yet (needs_creditor_iban, needs_qrr_reference, invalid_reference, unsupported_currency); each is returned in notDrafted with its reason. The runs are DRAFTS: generating the pain.001, transmitting and marking paid stay A18/A33 acts. Posts nothing. CONSEQUENCE: Drafts one payment run per proposed date from the liquidity plan; nothing is paid or sent yet. You can discard any of the drafts, and their bills become payable again.

NameRequiredDescriptionDefault
planIdYes
workspaceIdYes
bankAccountIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (idempotentHint, destructiveHint=false) by disclosing the refusal mode (stale_plan), the exact skip conditions with machine-readable reason codes (skonto_needs_reduced_amount, needs_creditor_iban, needs_qrr_reference, invalid_reference, unsupported_currency) and where they surface (notDrafted). It also states the blast radius: drafts only, nothing posted or sent, and drafts are discardable so bills become payable again — fully consistent with destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: verb and mechanism first, refusal/skip rules next, safety framing last. The closing 'Posts nothing' plus the CONSEQUENCE sentence restates the same point twice, which is the main wasted space in an otherwise efficient block.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-required-param mutation with no output schema and no annotation detail, the description covers what an agent needs: inputs' key constraint, failure modes, partial-success shape (notDrafted + reason), and reversibility. The only gap is idempotencyKey semantics, which is minor against the depth provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden and only partly does so: bankAccountId gains real meaning ('same currency as the proposal') and planId is implied as the proposal, but workspaceId and especially idempotencyKey are never explained, even though idempotency is the one parameter whose semantics matter most for a batching call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('draft payment runs from a proposal') and then names the underlying mechanism it drives (A18 create_payment_batch, once per proposed execution date on bankAccountId). An agent can distinguish this from create_payment_batch, liquidity_plan_propose and payment_batch_transmit without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies the precondition clearly: a proposal must exist, and a stale_plan refusal means 'propose again'. It also routes downstream steps elsewhere ('generating the pain.001, transmitting and marking paid stay A18/A33 acts'), which is real sibling differentiation. What it lacks is an explicit statement of when an agent should call create_payment_batch directly instead of this batching tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

liquidity_plan_getB
Read-only

One payment proposal with every line: the bill, the proposed execution and arrival dates, cash, Skonto, default interest, and the reason the bill got its date.

NameRequiredDescriptionDefault
planIdYes
workspaceIdYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so safety is covered; the description adds real value by disclosing the shape of the returned record in field-level terms (dates, cash, Skonto, default interest, dating rationale), which matters because there is no output schema. It omits any note on errors or missing plans, but goes well beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with no filler; the payload is front-loaded ('One payment proposal with every line'). The phrasing 'the reason the bill got its date' is colorful but slightly opaque, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple two-key read: the description covers what comes back, substituting for the absent output schema. But it leaves both required identifiers unexplained and gives no routing signal against liquidity_plan_list or liquidity_plan_draft_batches, so an agent still has gaps to close.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both required parameters (workspaceId, planId), and the description says nothing about them—no scoping rules, no format hints. With low coverage the description is expected to compensate, and it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: a single payment proposal ('One payment proposal') returned in full detail, implicitly contrasting with the list sibling. It enumerates the details returned (bill, execution/arrival dates, cash, Skonto, default interest), so the agent knows exactly what it gets, though the retrieval verb itself only comes from the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance and no named alternative, even though liquidity_plan_list is an obvious sibling. The singular 'One payment proposal' implies 'use this to get details of a known plan', but the agent has to infer that contrast rather than being told.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

liquidity_plan_listB
Read-only

The payment proposals, newest first, without their lines; status filter 'proposed' | 'drafted'.

NameRequiredDescriptionDefault
statusNo
workspaceIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint already covering safety, the description still adds real behavior: ordering ('newest first'), payload shape ('without their lines'), and the accepted status values — the last not present in the schema. It stops short of pagination/limits, but adds meaningful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence, front-loaded with the resource, then ordering, then filter values. It is fragmentary ('The payment proposals...') but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description covers ordering and line omission, which is useful. However, for a two-param list tool it leaves workspaceId semantics and pagination/default-filter behavior unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It documents the accepted status values, but says nothing about workspaceId — the required parameter — leaving half the parameters unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the resource ('payment proposals' — i.e. liquidity plans) and the operation implicitly (a listing), plus scope detail ('newest first, without their lines'). It doesn't explicitly distinguish itself from siblings like liquidity_plan_get or liquidity_plan_draft_batches, but the listing shape is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions the status filter values 'proposed' | 'drafted', which implies filtering usage, but gives no explicit when-to-use vs alternatives (e.g. liquidity_plan_get for a single plan, draft_batches for draft batching) and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

liquidity_plan_proposeA
Idempotent

Zahlungsvorschlag berechnen (propose when to pay each open bill): over the liquidity forecast, choose for every open bill in the currency (not already in a live payment run) a clearing day or a deferral past the horizon that maximises Skonto captured minus default interest (OR 104: lateInterestBp, default 500 = 5 % p.a., max 2000) while the projected balance never goes below floorMinor on any day. Without acceptLatePayments no bill is made late: when the scheduled flows plus every open bill paid on its on-time day take the balance under the floor inside the horizon AND no schedule without a late payment keeps it (a Skonto payment is earlier but smaller, so the search is asked first), the proposal STOPS with floor_breached_by_schedule {date, balanceMinor, shortfallMinor, suggestedFloorMinor, overdraws, noLateSearch}. suggestedFloorMinor is that on-time low (or 0 when a Skonto schedule keeps a floor of 0), so at it no bill is paid late; it is null (overdraws: true) when even a floor of 0 has no such schedule, and scheduleAloneOverdraws {date, balanceMinor} says when the scheduled flows alone go under 0 (no payment date fixes that); noLateSearch says whether that was proven ('proven') or only not found inside the search budget ('not_found'). Lower the floor, or propose again with acceptLatePayments: true: then a bill may be late for the floor or for a Skonto worth more, and no payment deepens a dip the scheduled flows cause alone (floorBreachedByBase says so). One exact search over each bill's admissible options (optimality 'proven': no schedule keeping the floor is worth more, or equally much with fewer days late); past its node budget the best schedule found is returned as 'heuristic' (not proven optimal) with upperBoundMinor and gapMinor, and its lateness likewise (daysLateTotal, lateDaysLowerBound, lateGapDays). Stores ONE proposal with its inputs, floor, objective and a reason per bill, and carries the forecast's conservative and excluded lines its floor proof leaned on; proposing again on unchanged books returns the SAME proposal (replayed:true) under any key. Pays nothing, posts nothing.

NameRequiredDescriptionDefault
currencyNo
floorMinorYes
horizonDaysNo
workspaceIdYes
delayQuantileNo
bankAccountIdsNo
idempotencyKeyYes
lateInterestBpNo
settlementLagDaysNo
acceptLatePaymentsNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint=false; the description adds far more beyond that: it stores one proposal and replays on unchanged books under any key, it pays nothing and posts nothing, it runs an exact search with a node budget and degrades to 'heuristic' with upperBoundMinor/gapMinor, and it discloses the floor-proof dependency on the forecast's conservative and excluded lines. No behaviour an agent needs before invoking is undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause, and almost every sentence carries genuine behavioural content. But it is delivered as one dense run-on paragraph mixing German and English, with nested parentheticals and payload field names, so it is oversized and hard to parse rather than efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only two annotation hints, the description compensates by describing the returned proposal, the floor_breached_by_schedule / scheduleAloneOverdraws payload shapes, optimality status and its bounds, and replay semantics. For a 10-parameter, side-effect-free planning tool this is enough for an agent to call it and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 10 parameters, so the description must carry the load. It explains floorMinor, acceptLatePayments, lateInterestBp (default 500, max 2000, OR 104), the horizon concept, and Skonto interplay, but workspaceId, idempotencyKey, delayQuantile, bankAccountIds and settlementLagDays get no mention, so a meaningful share of the surface stays opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening clause gives a specific verb and resource ('Zahlungsvorschlag berechnen / propose when to pay each open bill') and scopes it to open bills over the liquidity forecast and not already in a live payment run. It also distinguishes itself from write-side siblings by stating 'Pays nothing, posts nothing' and 'Stores ONE proposal'. However, it never names the adjacent siblings (liquidity_forecast as input, liquidity_plan_get/list as readers, liquidity_plan_draft_batches as the follow-on), leaving that routing implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete branching guidance: without acceptLatePayments the call STOPS with floor_breached_by_schedule, and the recovery is spelled out ('Lower the floor, or propose again with acceptLatePayments: true'). It explains what the stop payload means and when the search is proven vs not_found. What it lacks is an explicit statement of when to use this versus liquidity_forecast or liquidity_plan_draft_batches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

liquidity_skonto_listB
Read-only

The recorded Skonto conditions (vendor defaults and per-bill overrides), optionally narrowed to one vendor and the overrides on its bills.

NameRequiredDescriptionDefault
vendorIdNo
workspaceIdYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes the safe-read profile, so the description's added value is the disclosure that results span vendor-level defaults plus per-bill overrides and that filtering by vendor also pulls its bill-level overrides. It says nothing about volume, ordering, or pagination, which is a real gap for a list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence that packs the resource, its two data sources, and the optional filter without filler. The parenthetical is slightly dense but earns its space by distinguishing defaults from overrides.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the agent must infer what a Skonto condition record contains (percentage, discount period, due date) and whether vendor defaults and overrides come back in one shape. The core concept and filter behavior are covered, but the return shape and workspace scoping are not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden: it explains that vendorId narrows to one vendor and its bill overrides, which is genuinely useful. However, workspaceId (the only required parameter) is never mentioned, leaving half the parameters undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource — recorded Skonto (early-payment discount) conditions — and distinguishes the two sources: vendor defaults and per-bill overrides. The list verb comes only from the tool name, and 'Skonto' is domain jargon left unexplained, but the resource is unambiguous against siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the noun phrase 'recorded ... conditions ... optionally narrowed to one vendor', which tells an agent this is a read lookup filterable by vendor. There is no explicit when-to-use, no mention of the counterpart liquidity_skonto_set for writing conditions, and no stated prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

liquidity_skonto_setA
DestructiveIdempotent

Skontobedingung erfassen (record a supplier's Skonto condition): EITHER vendorId with rateBp (0-1000, i.e. up to 10 %) and days (1-120, the window counted from each bill's date), OR vendorBillId with rateBp and untilDate (the last day the payment may arrive). A bill override wins over the vendor default; rateBp 0 on a bill means "no Skonto on this bill". Replaces the existing condition for the same vendor or bill. Only what is recorded here is ever assumed: TILL never invents a Skonto. Posts nothing.

NameRequiredDescriptionDefault
daysNo
rateBpYes
vendorIdNo
untilDateNo
workspaceIdYes
vendorBillIdNo
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint, and the description corroborates the destructive side by stating "Replaces the existing condition for the same vendor or bill" — the agent knows prior data is overwritten rather than accumulated. It adds real context the annotations cannot express: rateBp 0 on a bill explicitly means no Skonto, and "Posts nothing" confirms no journal entry is created. It does not state what happens on invalid combinations (both IDs, or neither), which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the resource and the two modes come first, then override/zero-value rules, then the no-posting assurance. Every clause carries information; the bilingual title and a few parenthetical glosses cost a little tightness but not enough to be wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutating tool with no output schema and no parameter descriptions, the definition covers the mode selection, ranges, overwrite semantics, and side-effect absence — everything needed to call it correctly. Return values are not a gap here because the tool posts nothing and only records configuration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden — and it delivers for the key fields, giving business meaning plus validation ranges that the raw schema lacks (rateBp 0-1000 bp = up to 10%, days 1-120 counted from each bill's date, untilDate = last permissible payment day). It leaves `workspaceId` and `idempotencyKey` unexplained, which are conventional but undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource in both German and English ("Skontobedingung erfassen / record a supplier's Skonto condition") and immediately distinguishes the two addressing modes (vendor-level default vs. bill-level override). An agent can tell this apart from the sibling `liquidity_skonto_list` (read) without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The EITHER/OR construction makes the two usage paths explicit, and "A bill override wins over the vendor default" states the precedence rule an agent needs when both could apply. It stops short of naming when not to use it (e.g., vs. `liquidity_flow_set` or when the vendor does not exist), so it is clear context 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_accountsA
Read-only

List accounts, optionally filtered by search text. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
searchNo
savedViewIdNo
workspaceIdYes
includeArchivedNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, and the description adds non-obvious behavior: saved-view filters are merged underneath explicitly named filters. This explains a subtle interaction beyond what the schema reveals. It doesn't address pagination or defaults for includeArchived, but the safety profile is covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences deliver the core action up front and reserve the second sentence for the nuanced saved-view behavior. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main listing behavior and saved-view interaction but omits details about includeArchived semantics and pagination, and there is no output schema. For a four-parameter list tool, a bit more detail would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning for 'search' (search text) and 'savedViewId' (saved view merge behavior), but doesn't describe 'includeArchived' or 'workspaceId'. With half the parameters unaddressed, it's only partially compensatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List accounts') and indicates optional search filtering, making the tool's purpose immediately understandable. It doesn't explicitly compare against sibling list/search tools, but the resource and action are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: it lists accounts and explains how savedViewId interacts with explicit filters. It doesn't state when not to use it or mention alternatives, but the context is sufficient for basic selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_agent_sessionsA
Read-only

List the agent sessions (Gespräche) of a workspace, newest first, each with its call, write and proposal counts. The trace records at the dispatch seam, so every session an agent seat ever opened is here; from/to filter on last activity, openOnly keeps running sessions, entityRef keeps the sessions whose trace created or approved that one object (the id a verb answered with), which is how a detail view links into the conversation it came from.

NameRequiredDescriptionDefault
toNo
fromNo
openOnlyNo
entityRefNo
workspaceIdYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, already covering the safety profile. The description adds valuable behavioral context: the dispatch-seam trace ensures full history, and entityRef semantics ('the id a verb answered with') explain the linking behavior. It does not contradict annotations and goes beyond the schema's bare parameter names, though it omits pagination or limit details, which are not critical for a list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences pack in the core purpose plus all parameter semantics. The main action is front-loaded, and every clause adds information (filter semantics, count fields, trace explanation). No filler or redundant content. The compact structure is appropriate for the density of information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with five parameters, no output schema, and a rich interaction environment, the description covers the purpose, filters, ordering, counts, and linking behavior. It omits return-format specifics beyond counts (e.g., whether fields like lastActivity are present), but the core invocation needs are fully addressed. Slight deduction for not clarifying date format for from/to, though that is inferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It explains every parameter: from/to filter on last activity, openOnly keeps running sessions, entityRef matches the object created/approved by a trace, and workspaceId is the scope. This exceeds baseline compensation expectations and adds meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb ('List'), resource ('agent sessions'), scope ('of a workspace'), ordering ('newest first'), and what each entry includes ('call, write and proposal counts'). It also clarifies the trace semantics (every session an agent seat ever opened) which distinguishes this list tool from singular session getters like get_agent_session. The purpose is unambiguous and differentiates from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on when to use the tool and what each filter does, including concrete use cases like 'how a detail view links into the conversation it came from'. It does not explicitly name alternatives (e.g., get_agent_session) or state exclusions, but the list vs. singular distinction is implicit. This meets the 'clear context, no exclusions' level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_automation_rulesA
Read-only

List this workspace automation rules, newest first, archived ones excluded unless asked for. Also returns the CATALOGUE a rule can be built from: every registered trigger event, every write verb that is a legal action, and every condition operator, all read off the live registries so a picker cannot offer something the engine would refuse. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
eventNo
enabledNo
savedViewIdNo
workspaceIdYes
includeArchivedNo

TDQS

A3.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses ordering (newest first), default archive exclusion, the live catalogue source, and the saved view filter merging behavior. These traits go well beyond the readOnlyHint annotation, providing rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the main purpose, then catalogue details, then saved view nuance. Every sentence adds concrete value with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main outputs (rules and catalogue), ordering, filtering, and saved view behavior. It omits explicit semantics for event and enabled, though their names are self-explanatory. Given the absence of output schema, this is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains savedViewId merging and implies includeArchived defaults, but leaves event and enabled parameters undefined. With 0% schema coverage, it partially compensates but does not cover all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as listing workspace automation rules with ordering and default filtering, and adds the catalogue feature. It does not explicitly differentiate from sibling tools like list_automation_runs or get_automation_rule, so it stops short of full sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives, and no exclusions or alternative tool names are mentioned. The description only covers parameter behavior, not tool selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_automation_runsA
Read-only

The run log, newest first: what fired, when, why, what it actually sent, and what came back. A failed run carries the target verb's own rejection code verbatim, so the reason reads the same way it would on that verb's own screen.

NameRequiredDescriptionDefault
limitNo
ruleIdNo
statusNo
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description doesn't need to restate that. It adds useful behavioral details: the order (newest first), the fields included, and that failed runs carry the target verb's rejection code verbatim. This is beyond the structured data and helps the agent understand output semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, with no fluff. The key information is front-loaded: what the tool returns and its ordering. It is efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a list tool, but lacks details about the return format (e.g., how many runs per page, whether it's an array), how the parameters affect results, and when to prefer this over get_automation_run. Since there is no output schema, more context would help the agent know what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 4 parameters (workspaceId required, limit, ruleId, status) but the description gives no explanation of their meaning or usage. With schema description coverage at 0%, the description should compensate, but it doesn't mention any parameters at all. The parameter names are somewhat self-explanatory, but for limit and status, the expected values or formats are not hinted at.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: it lists the run log for automations, newest first, and details what each entry contains (what fired, when, why, what was sent, and what came back). This distinguishes it from the sibling get_automation_run, which presumably retrieves a single run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for viewing a log, but it does not explicitly state when to use this list tool versus get_automation_run. It also doesn't mention filtering options or when to use the ruleId/status parameters. The usage context is clear enough for a log listing, but lacks explicit alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_backupsA
Read-only

List this workspace`s backups and exports, newest first, with size, timestamp, actor and status. Optional kind (backup|export) or status (complete|failed) narrows the list. savedViewId applies a saved preset (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
kindNo
statusNo
savedViewIdNo
workspaceIdYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds ordering and savedViewId filter-merging behavior. It does not disclose potential pagination, rate limits, or permission requirements beyond the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: first states purpose and output fields, second explains filters. No fluff, front-loaded with the core operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with 4 params and no output schema, the description covers the essential inputs and output fields. It lacks explicit pagination/limit info, but given the tool's simplicity, it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain all parameters. It explains kind with allowed values (backup|export), status (complete|failed), and savedViewId merging semantics. workspaceId is obvious from context, so all four parameters are effectively covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it lists backups and exports with specific fields (size, timestamp, actor, status) and ordering (newest first). It distinguishes from create/delete/restore siblings implicitly, but does not explicitly name alternatives like list_restorable_backups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides filter usage for kind and status, but gives no explicit guidance on when to use this tool versus related siblings (e.g., list_restorable_backups). 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.

list_bank_accountsA
Read-only

List this workspace's Bankkonten with their IBAN, currency, verknüpftes Konto, QR-IBAN flag and opening balance. Archived accounts are excluded unless includeArchived is true. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
savedViewIdNo
workspaceIdYes
includeArchivedNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description aligns with a read-only listing operation. It adds meaningful behavioral context: archived accounts are excluded by default, includeArchived overrides that, and savedViewId merges stored filters underneath explicit filters. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all information-dense and front-loaded. The core listing purpose and returned fields come first, then filtering behavior and saved-view semantics. No filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list with 3 parameters, the description covers the purpose, returned fields, archive filtering, and saved-view merging. There is no output schema, so the listed returned fields are helpful. It could optionally note that workspaceId is the required scope, but that's implied by 'this workspace's' and the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It explains includeArchived semantics explicitly, and gives a useful preview of savedViewId behavior including the G00 reference and filter merging. It doesn't describe workspaceId, but that parameter is self-evident from the tool name and required field. This is strong compensation for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb (list), the resource (this workspace's Bankkonten), and the key fields returned (IBAN, currency, verknüpftes Konto, QR-IBAN flag, opening balance). It distinguishes the scope to 'this workspace' but doesn't explicitly contrast it against sibling list_bank_statements or the get_bank_account tool, so it misses a bit of differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states that archived accounts are excluded unless includeArchived is true, providing a concrete condition for a parameter. It also explains how savedViewId interacts with filters. However, it doesn't explicitly say when to use this tool over get_bank_account or list_bank_statements, though the context is fairly clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bank_inboxA
Read-only

The bank inbox: every line of every imported statement in one list, newest first, each with its ONE state (open, booked, matched, ignored), dates, counterparty (name, IBAN), remittance text and reference, signed amount (+ in, - out); an open line carries ONE proposal { target, certainty (sure | learned | check | open), reasonCode, reasonParams, vatCode } the caller can pass straight to book_bank_line, a decided line its decision. A sure proposal is reference-proven, or comes from a standard a person set for this counterparty and direction (reasonCode standard, see set_bank_standard); reasonCode journal_history (a posted journal entry on this bank account naming the counterparty) and model_suggested are always check; an own-account transfer is never sure. A Buchungsregel (set_bank_standard) speaks as reasonCode standard (one complete rule: target accounts, sure, or check when the workspace setting bank.buchungsregel_mode is suggest or a taxed rule meets a foreign-currency line, vatDropped), rule_needs_amount (one rule that asks for amounts: target { kind: rule, standardId, asks: {} }, check, reasonParams.asks [{ legIndex, label }]; fill the asks and pass it to book_bank_line) or several_rules (target null, check, reasonParams.standardIds: pick one) or rule_computed (one rule whose only unknowns are computed amounts: target { kind: rule, standardId, asks: {} }, bookable as it stands, the engine computes each factor leg; reasonParams.computed [{ legIndex, label, amountMinor, explain }]; check, or sure when the setting bank.buchungsregel_computed_mode is bulk; a rule_needs_amount proposal whose rule also computes carries computed too) or rule_ignore (a "Nicht buchen" rule: target { kind: ignore, reason, note, standardId }, NOT a book_bank_line target: decide the line with ignore_bank_line { reason, note, standardId }; check, or sure when the setting bank.buchungsregel_ignore_mode is bulk). Every line carries standardId (the rule its proposal used, else the newest live rule for its counterparty and direction, or null) and ruleIds (every live rule for its counterparty and direction); a decided line's decision carries ruleId (the rule it was booked or ignored by), and followUp { standardId, label } names the Vorlage that rule offers as the next step (post_entry with template), else null; vorschlagActionId names the newest pending agent Vorschlag for the line (approve_drafted_action / reject_drafted_action), else null. status defaults to open (all lists every state); bankTxnId narrows to ONE line (with status all, whatever its state: a deep link to a line beyond the first page); query searches counterparty, remittance, reference, IBAN and amount; from and to bound the booking date; direction in (money in, Gutschriften) or out (money out, Belastungen); limit (default 50, max 200 per call) and either the opaque cursor or offset (a numbered page) page past it in one stable order (booking date newest first, then import order). total counts every active filter across all pages; directionCounts { in, out } counts the same filters without the direction (for the two chips). A decided line's decision also names contactId (a contact booking). summary lists per Bankkonto three numbers at the latest statement date: the statement's closing balance, the ledger balance of the linked account that day, and the sum of the lines still open; differenceMinor = bank - ledger - open, zero when bank and books agree (an ignored line whose money is not on the books, or an entry no line backs, shows as a difference). Beside it, never a term of it, start { date, bankMinor, ledgerMinor, gapMinor } (or null) says where bank and books stood when the feed starts: the earliest dated statement's opening balance against the ledger the day before; a gap alone is not missing money (an opening entry dated that day reads as one), and only when gapMinor equals differenceMinor does the whole difference lie before the first imported statement (history the feed never saw: import earlier statements or check the entries before it). Writes nothing. D178 point 19: each line carries possibleDuplicates [{ bankTxnId, reason, format, date, amountMinor, currency }] (the stored lines it may be: matched one to one on a day the books already cover, or of another statement format), possibleDuplicateOf { bankTxnId | null, reason }, needsDuplicateDecision (open, flagged, not decided distinct: never sure, and book_bank_line refuses duplicate_decision_pending until resolve_possible_duplicate decides) and duplicateDecision; facet: duplicates lists only the lines waiting for that decision, and its total is their count.

NameRequiredDescriptionDefault
toNo
fromNo
facetNo
limitNo
queryNo
cursorNo
offsetNo
statusNo
bankTxnIdNo
directionNo
savedViewIdNo
workspaceIdYes
bankAccountIdNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only readOnlyHint=true in annotations, the description carries the behavioral burden well: it states “Writes nothing” and extensively explains proposal states, certainty levels, rule behavior, duplicate handling, and summary semantics. This goes far beyond the annotation and gives the agent the context needed to interpret results safely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one enormous dense paragraph with nested parenthetical explanations for many edge cases. Although the core purpose is front-loaded, the volume and lack of structure make it hard to scan; much of the Buchungsregel and duplicate-handling detail could be moved to supporting documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 13-parameter read tool with no output schema, the description is unusually complete: it explains returned fields, proposal states, summary/start semantics, and duplicate facets. It stops short of fully covering savedViewId and bankAccountId, leaving minor gaps in an otherwise thorough definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain all 13 parameters. It does an excellent job for status, bankTxnId, query, from/to, direction, limit, cursor/offset, facet, total, and directionCounts, but it omits savedViewId and does not clearly map bankAccountId to its filtering behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific resource and collection (“The bank inbox: every line of every imported statement in one list, newest first”) and immediately explains what each line carries. It distinguishes this read/list tool from action siblings such as book_bank_line, ignore_bank_line, and resolve_possible_duplicate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear that this tool lists bank inbox lines and writes nothing, and it repeatedly names the action tools an agent should use afterward. However, it does not explicitly compare this tool with other listing tools such as list_bank_statements or list_reconciliation, so the when-not guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bank_standardsA
Read-only

Every live Buchungsregel, newest first, valid or not; scope (bank | manual) narrows to the bank rules or the Vorlagen (default both): { id, scope, outcome (legs | ignore), counterpartyKey (iban:... or name:..., null for a Vorlage), counterpartyLabel, direction (in | out, null for a Vorlage), label, matchText, viaAccountId, viaAccountNumber, viaAccountName, legs [{ accountId, accountNumber, accountName, taxCode, amount { kind rest | ask | same, label, legIndex }, side? (a Vorlage), against?, description? }], ignoreReason and ignoreNote (an ignore rule), followUpStandardId and followUpLabel (the next step, while that Vorlage is live), invalidReason (null, or why the rule is silent: account_archived | account_not_bookable | tax_code_inactive | vat_not_applicable | recipe_unreadable), accountId, accountNumber, accountName, taxCode (the rest leg; null for an ignore rule), setBy, setAt }. A bank rule prefills the bank lines of its counterparty and direction (proposal reasons standard, rule_needs_amount, several_rules, rule_ignore); a Vorlage is booked through post_entry { template }. Writes nothing.

NameRequiredDescriptionDefault
scopeNo
workspaceIdYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'Writes nothing.' It also discloses non-obvious behavior: results are newest-first, include invalid rules, and expose invalidReason values and follow-up links. It omits auth/rate-limit context, but for a read-only list the disclosure is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and scope are front-loaded, and the long field list is justified because there is no output schema. However, the entire definition is a run-on sentence with nested braces, making it harder to scan than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because no output schema exists, the description must document return values, and it does so thoroughly, including nested legs, ignore-rule fields, invalid reasons, and follow-up behavior. It is nearly complete, with only workspaceId context missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries parameter meaning. It fully clarifies scope (bank rules vs Vorlagen, default both) but leaves the required workspaceId undocumented, relying on the parameter name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening states a specific verb and resource (lists every live Buchungsregel) and defines scope as bank vs manual, so the agent knows what is returned. It does not name or differentiate from sibling tools such as set_bank_standard or list_bank_inbox, and the German domain terms reduce immediate clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the scope parameter and its default (both) but gives no explicit when-to-use/when-not guidance or alternatives. The note that a Vorlage is booked through post_entry hints at related workflow, yet tool selection remains implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bank_statementsA
Read-only

The imported camt statements of the workspace, newest period first, each with its open-line count (lines still unmatched or partial) and the D64 reconciled indicator. This is the door to a statement: take its statementId into list_reconciliation and suggest_matches. bankAccountId narrows to one Bankkonto. Writes nothing.

NameRequiredDescriptionDefault
workspaceIdYes
bankAccountIdNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description's 'Writes nothing' adds emphasis but not contradiction. It adds context beyond annotations by explaining open-line count meaning and the D64 reconciled indicator, and clarifies the ordering (newest first). However, it doesn't describe pagination or output format, which is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but concise, packing scope, ordering, derived fields, and downstream usage into two sentences. It front-loads the main purpose and immediately provides actionable routing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with two params and no output schema, the description covers the key information an agent needs to invoke it correctly and follow up. It could mention pagination or result limits, but the provided detail about open-line counts and D64 is sufficient for the core task. The absence of output schema is mitigated by the description's clarity on what each statement includes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description is the only source of parameter meaning. It explains that bankAccountId narrows to one Bankkonto, which adds context beyond schema names. It does not detail the workspaceId format or whether it's required, but the schema marks it required, and the description implicitly relies on that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists imported camt statements for the workspace, newest first, with open-line count and D64 indicator. It distinguishes itself by explicitly mentioning the statementId as the door to list_reconciliation and suggest_matches, and highlights the bankAccountId narrowing option, which differentiates it from generic list tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states this is the entry point to statements and directs the agent to take statementId into the next steps (list_reconciliation and suggest_matches). It also clarifies the optional parameter for narrowing by bank account and confirms it writes nothing, which guides when to use it versus other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_capturesB
Read-only

The Belegeingang queue: captures with their live proposed fields. The default view excludes discarded captures; pass status to filter to needs_review, committed or discarded. from/to filter on capture date; savedViewId applies a G00 saved view.

NameRequiredDescriptionDefault
toNo
fromNo
statusNo
savedViewIdNo
workspaceIdYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint=true, which is consistent with the description (listing captures). Adds useful details like the default exclusion of discarded and date filtering, but does not explain return format or pagination, though output schema absence leaves some vagueness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main purpose. Each sentence addresses a key aspect. Slightly dense but no superfluous wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the annotations covering read-only, the main gaps are parameter semantics and lack of output/return details. The description covers default behavior, status filtering, and date range, but more explicit enum values for status and clarification of workspaceId would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain parameters. It mentions 'status' (with possible values), 'from/to' as date filters, and 'savedViewId' as a saved view, but does not clarify 'workspaceId' or the string formats for dates/status. This is partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool lists captures from the Belegeingang queue with proposed fields, and specifies default view behavior. While it doesn't distinguish from all siblings (e.g., get_capture, capture_commit), it conveys the core purpose effectively.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides specific guidance on filters: default excludes discarded, status and from/to filters, and savedViewId. Does not explicitly mention when to prefer alternatives, but the sibling list shows capture_document and capture_commit, and the description implies this is for listing rather than manipulating.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_conceptsA
Read-only

List the Begriffe: TILL's authored explanations of its Swiss accounting vocabulary (Saldosteuersatz, Vorsteuer, Steuerperiode, ...). Filter by area or a per-token query; returns key, localized term and area, never the bodies. Workspace-free: the corpus is identical in every workspace.

NameRequiredDescriptionDefault
areaNo
queryNo
localeNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral detail beyond that: it returns only key, localized term, and area, never the bodies, and is workspace-free. This helps agents understand the lightweight, non-mutating nature of the call and its cross-workspace consistency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core purpose, and every sentence contributes: what the tool lists, how to filter, what is returned, and the workspace-independence guarantee. No filler or redundant restatement of the tool name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with three optional parameters and no output schema, the description covers the main return shape and filtering behavior well. The only gap is the undocumented locale parameter and slightly vague 'per-token query' wording, but overall this is nearly complete for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain 'area' and 'per-token query' filters, but it does not explain the locale parameter at all, nor does it define the exact semantics of 'per-token query.' This is partial compensation for the undocumented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('List') on a well-defined resource ('TILL's authored explanations of its Swiss accounting vocabulary') and clarifies that it returns metadata only ('key, localized term and area, never the bodies'). This clearly distinguishes it from the sibling get_concept without needing to open the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage context: filter by area or a per-token query, and notes that the corpus is workspace-free, which tells agents when scope does not matter. It does not explicitly name alternatives or say when not to use this tool, but the 'never the bodies' phrasing implies the boundary against body-retrieval tools like get_concept.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contactsA
Read-only

List contacts, filtered by query or party role. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
queryNo
partyRoleNo
savedViewIdNo
workspaceIdYes
includeArchivedNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals a safe read operation, so the bar for additional disclosure is lower. The description adds useful behavioral nuance about savedViewId: stored filters are merged underneath explicitly named filters, which goes beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no filler. The primary action and filter options are front-loaded, and the savedViewId nuance earns its place because it is non-obvious behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool, the description covers the core invocation intent and the most nuanced parameter behavior. It omits return-shape and pagination details, but the readOnly annotation and the straightforward 'list contacts' intent keep it reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning for query, partyRole, and savedViewId, including the merge behavior. With 0% schema description coverage it partially compensates, but workspaceId and includeArchived remain undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'List contacts', with filtering by query or party role. It is clear enough to be distinguishable from sibling contact tools like contacts_timeline or contacts_log_activity, though it does not explicitly call out those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when to use the tool: when listing contacts with optional query, party-role, or saved-view filtering. It does not state exclusions or name alternative tools, but the context is not ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_cost_centersA
Read-only

List cost centres. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
savedViewIdNo
workspaceIdYes
includeArchivedNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, so the description adds value by disclosing the saved view filter merging behavior, which is non-obvious. It does not describe return format or pagination, but for a read-only list tool this is sufficient added context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The core action is front-loaded, and the saved view behavior is explained in a single follow-up sentence. Perfectly sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with readOnlyHint annotation, the description covers the primary purpose and the key tricky parameter. It omits default behavior for includeArchived and pagination, but these are not critical for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for savedViewId (the most ambiguous parameter) by explaining how its filters merge. workspaceId and includeArchived are self-explanatory from their names and typical usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List cost centres' with a clear verb and resource, and the saved view behavior is a helpful extra. It is easily distinguished from sibling tools like create_cost_center, archive_cost_center, and delete_cost_center.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how savedViewId behaves but gives no explicit guidance on when to use this tool versus alternatives. There are no mentions of exclusions or when to prefer other list tools, so usage context is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dispatchesA
Read-only

Das Versand-Protokoll: the cross-document send log, newest first, one row per recipient per send attempt (send_invoice, send_dunning_run, quotes_send), each carrying kind, document/run link, contact, recipient, channel (smtp|cloud_relay|artifact_only), locale, the resolved subject and body that actually left, outcome (sent|degraded|failed|artifact_created) and a degrade reason. Filter by kind, contact, outcome or date range; savedViewId applies a saved view (G00). Also returns texts, the saved Textbausteine slots, so the editor reads its state in the same call. Append-only: no verb can edit or delete a row.

NameRequiredDescriptionDefault
toNo
fromNo
outcomeNo
contactIdNo
savedViewIdNo
workspaceIdYes
documentKindNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation by stating 'Append-only: no verb can edit or delete a row', reinforcing the read-only nature and adding a critical behavioral constraint. It also discloses ordering ('newest first'), the fact that it returns the resolved subject/body that actually left, and that it also returns the saved Textbausteine slots for editor state. These details are not in the annotation and significantly enrich behavioral understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and information-rich, front-loading the core purpose and then enumerating return fields and filtering options. It is a single paragraph but well-organized, covering all essential aspects without excessive verbosity. It could be improved by breaking into sections or bullets, but it is not overly long relative to the information conveyed. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 params, no output schema), the description is quite complete. It explains what the tool returns (rows with fields, including the texts for editor state), the append-only nature, ordering, and filtering options. The only notable omission is pagination or limit behavior (e.g., whether all rows are returned or truncated), which could be important for an agent expecting large result sets. Overall, it covers the essential context for correct invocation and interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 7 parameters with 0% description coverage in the schema itself, so the description must compensate. It mentions filtering by 'kind, contact, outcome or date range' and the savedViewId, which maps to documentKind, contactId, outcome, to/from, and savedViewId respectively. However, it does not explicitly map each parameter name to its semantic meaning (e.g., 'to' and 'from' as date bounds). It provides general guidance but leaves some ambiguity about exact parameter roles, so it adds value but does not fully compensate for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: it lists dispatches from a cross-document send log, with explicit detail about what each row contains (kind, document/run link, contact, recipient, channel, locale, resolved subject/body, outcome, degrade reason) and which operations generate entries (send_invoice, send_dunning_run, quotes_send). The verb and resource are specific, and the description distinguishes it from a generic list by noting the append-only nature and the inclusion of saved text slots. It is unambiguous and easily distinguishable from siblings even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool: to view the send log, filter by kind, contact, outcome, or date range, and apply a saved view. It also implies it's for inspecting dispatch history. However, it does not explicitly state when not to use it or name alternative tools (e.g., list_dunning_runs for dunning-specific logs). The guidance is sufficient for an agent to infer appropriate use, but lacks explicit exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documentsA
Read-only

List documents, filtered by type, status, contact, credited invoice (A13: the credit notes of invoice X), or date range. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here, so an explicit one always wins.

NameRequiredDescriptionDefault
toNo
fromNo
typeNo
statusNo
contactIdNo
savedViewIdNo
workspaceIdYes
creditedDocumentIdNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds value by explaining the savedViewId filter-merging behavior and the credited invoice filter, which are non-obvious. However, it does not disclose pagination, ordering, or return format, leaving some behavioral gaps. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the core purpose ('List documents') and then efficiently explain the savedViewId merging behavior. Every sentence carries essential information, with no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters, no output schema), the description covers the main filtering options and the savedViewId behavior, but it omits return structure, pagination, and filter combination semantics. It is adequate for basic usage but incomplete for an agent that needs to know exactly what results look like or how to combine filters correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain the purpose of most parameters: type, status, contact (contactId), credited invoice (creditedDocumentId), and date range (from/to), plus savedViewId. However, it does not clarify value formats (e.g., date format), whether filters are ANDed, or the role of workspaceId beyond being required. It adds meaning beyond the schema but leaves important details unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists documents with multiple specific filters (type, status, contact, credited invoice, date range) and explains the savedViewId behavior. It is distinct from sibling tools like get_document (single retrieval) and list_document_templates (templates), so an agent can identify its purpose without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives (e.g., get_document for a single document, search_global for general search). It implies usage for listing documents but provides no exclusions or conditions for choosing this over other list tools. The savedViewId merging nuance is helpful but does not address tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_document_templatesA
Read-only

List document templates, newest defaults first per kind: id, kind, name, default/archived flags, footer locales, language mode, and the linked logo file id. documentKind narrows to one kind; includeArchived includes archived rows; savedViewId applies a saved view (G00).

NameRequiredDescriptionDefault
savedViewIdNo
workspaceIdYes
documentKindNo
includeArchivedNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the description doesn't need to state read-only. It adds behavioral context by specifying the sort order, the set of returned fields, and how parameters alter the result set. This goes beyond the annotation and provides transparency about what the call returns and how it behaves, warranting a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, first states the action and output, second explains parameters. No filler. Front-loaded with the core purpose. This is concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list operation with no output schema, the description provides the fields returned, sorting, and parameter semantics. It doesn't mention pagination or limits, which might be a minor gap, but given the simplicity of the operation, it's adequately complete. A 4 reflects that it covers the essentials but could include a note on result size or pagination.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must explain parameters. It does: documentKind narrows to one kind, includeArchived includes archived rows, savedViewId applies a saved view (G00). It also implies workspaceId is the workspace scope. This fully compensates for the schema gap, so a 5 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists document templates, specifies the fields returned (id, kind, name, flags, locales, language mode, logo file id), and the default sorting order (newest defaults first per kind). It distinguishes from get_document_template by its list nature and from list_documents by focusing on templates. This is a specific verb+resource with clear scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how each parameter filters results (documentKind, includeArchived, savedViewId), which is useful. However, it does not explicitly state when to use this tool versus alternatives like get_document_template or list_documents, nor does it mention any prerequisites. The usage is implied but not fully explicit, so it scores a 3.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_drafted_actionsA
Read-only

List the drafted agent actions (Vorschläge) of a workspace: pending by default (oldest first), or executed/rejected via status. Each row carries its verb, parsed payload, dial capability, proposer and resolution, so the approval queue renders from one read on every face.

NameRequiredDescriptionDefault
statusNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description is consistent with that. It adds valuable behavioral details beyond the annotation by specifying default ordering (oldest first) and the ability to filter by status. It also describes the row content, which helps set expectations for the response. Without mentioning limits or pagination, it still adds useful context beyond the structured annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The core purpose and default behavior are front-loaded, followed by the output row details and the intended use case. It is succinct and well-structured, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with one required and one optional parameter, the description is fairly complete. It explains the output fields (verb, payload, dial capability, proposer, resolution) and the intended use. It does not mention pagination or API limits, but given the simplicity of the tool and the readOnly annotation, this is a minor gap. Overall, it provides enough information for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and parameters have no descriptions. The description compensates by explaining the semantic role of both parameters: workspaceId scopes the list to a workspace, and status overrides the default pending filter with executed/rejected. It does not list exact enum values, but the behavior is clear. This is a good compensation given zero schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists drafted agent actions for a workspace, and distinguishes itself from sibling mutation tools like approve_drafted_action and reject_drafted_action by focusing on the read operation. It also explains the default status (pending) and ordering, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context on when to use the tool (for rendering the approval queue) and explains how the status parameter filters results (executed/rejected vs. default pending). It does not explicitly mention when not to use it or compare to alternatives, but the sibling tools clearly imply this is for listing before acting, so usage is reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dunning_runsA
Read-only

The Mahnlauf history, newest first: each run's date, status (proposed/issued/sent), item and debtor counts, highest level, and whether a fee was booked or skipped by a period lock. Filter by status or date range. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here. Reads only.

NameRequiredDescriptionDefault
toNo
fromNo
statusNo
savedViewIdNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation is reinforced and supplemented with useful behavioral detail: newest-first ordering, the status vocabulary, counts, highest level, period-lock fee behavior, and saved-view filter merging. Pagination or result-limit behavior is not mentioned, but for a read-only list this is strong coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences deliver the core purpose, output contents, ordering, filters, saved-view behavior, and read-only status. Information is front-loaded and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what the return data represents, the ordering, available filters, saved-view behavior, and safety profile. Minor gaps such as pagination or exact field names prevent a perfect score, but the tool is fully usable from this description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well: it explains date-range filtering for from/to, status values, and the savedViewId merge semantics. It does not explicitly describe workspaceId or date formats, but those are substantially self-explanatory or implied by the required schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: listing the Mahnlauf/dunning-run history. It also specifies ordering ('newest first') and the exact data returned per run, which clearly distinguishes it from singular tools like get_dunning_run or actions like propose_dunning_run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly communicates when this tool is appropriate: listing dunning-run history and filtering by status or date range. It does not explicitly name sibling alternatives or exclusion conditions, but the 'history' framing and filter options give clear contextual usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_exchange_ratesA
Read-only

List recorded foreign-currency rates, newest validity date first, optionally filtered by currency pair and date range.

NameRequiredDescriptionDefault
toNo
fromNo
workspaceIdYes
baseCurrencyNo
quoteCurrencyNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and the description's 'List recorded' wording is consistent with a read operation, so there is no contradiction. The description adds useful behavioral context by specifying the newest-validity-date-first ordering, but it does not disclose pagination, permissions, or return-value behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence with no filler: it leads with the core action, resource, and ordering, then appends the optional filtering scope. It is appropriately sized and immediately scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter tool with no output schema and zero schema coverage, the description leaves critical invocation details undocumented: which parameters represent the currency pair and date range, required workspaceId semantics, and expected input formats. The clear purpose alone is not enough for an agent to reliably construct correct calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only vaguely mentions 'currency pair and date range' without mapping those concepts to the five parameters. It is unclear whether from/to mean dates or currencies, or how baseCurrency and quoteCurrency relate to the pair. This ambiguity gives the agent insufficient guidance for populating required and optional fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource—'List recorded foreign-currency rates'—with explicit ordering ('newest validity date first') and optional filtering. These semantics distinguish it from sibling tools like get_exchange_rate, record_exchange_rate, and import_exchange_rates, even though no siblings are named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for retrieving a collection of existing rates, especially when newest-first ordering or filters are desired. However, it never explicitly names alternative tools or states when not to use this one. An agent must infer the distinction between listing rates versus getting, recording, or importing them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_feedbackC
Read-only

List the feedback reports written on this computer. Every one reads "prepared": TILL hands a report to a mail client and cannot observe whether it was sent.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds the nuance that reports show 'prepared' status because TILL cannot confirm if sent, which is valuable behavioral context beyond the annotation. However, it's cryptic (unclear what TILL means) and doesn't explain other behavioral aspects like sorting or filtering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, so it's concise. However, the second sentence is awkwardly phrased and likely confusing ('TILL' appears to be a typo or undefined acronym). The structure doesn't front-load the most important information about parameters or output. It's short but not well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only one parameter and no output schema, the description still leaves major gaps: it doesn't explain what a feedback report contains, what the return format looks like, or whether there's pagination. The 'prepared' status semantics are partially covered but incompletely. For a simple list tool, more context about the output and the meaning of statuses is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, workspaceId, has 0% schema description coverage, and the description provides no explanation of what workspaceId represents, its format, or its meaning in this context. With zero coverage, the description should compensate, but it doesn't. This is a critical gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it lists feedback reports and scopes them to 'this computer'. The verb 'list' plus the resource 'feedback reports' is specific. It doesn't explicitly differentiate from sibling tools like prepare_feedback or preview_feedback, but the 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It doesn't mention related tools like preview_feedback or prepare_feedback, nor does it state conditions for selecting this over them. The only context is the status explanation, which is behavioral, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_field_defsA
Read-only

List the custom fields defined on an entity kind, in display order. Archived fields and unconfirmed drafts are excluded unless asked for.

NameRequiredDescriptionDefault
entityKindYes
workspaceIdYes
includeDraftsNo
includeArchivedNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true is provided, and the description correctly indicates a read operation (list). The description adds value by disclosing the default filtering behavior (excluding archived and drafts), which is not in structured data. However, it does not elaborate on pagination, sorting guarantees beyond display order, or potential side effects of including drafts/archived, so a mid-range score is apt.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence plus a second short sentence, extremely concise and front-loaded. Every clause conveys essential information: purpose, ordering, and default exclusions. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 params, no output schema), the description covers the key behavioral aspects: listing definitions, ordering, and default exclusions. The absence of an output schema means the description is not expected to detail return values. A minor gap is not stating whether drafts and archived fields are included when explicitly requested, but the description's negation implies that. Overall, comprehensive enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (the input schema has no descriptions for parameters), so the description must compensate. The description explains the core purpose of workspaceId and entityKind through the phrase 'entity kind' and context. It also explains the boolean flags' role via 'Archived fields and unconfirmed drafts are excluded unless asked for,' directly mapping to includeArchived and includeDrafts. This adds significant meaning beyond the bare parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear and specific: 'List the custom fields defined on an entity kind, in display order.' It specifies the verb (list), resource (custom fields), parent resource (entity kind), and output ordering. This distinguishes it from siblings like list_field_values, which list values rather than definitions, and define_field, which creates fields.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear context: operations are on an entity kind, and the description notes exclusions by default ('Archived fields and unconfirmed drafts are excluded unless asked for'). This implies when to use the includeDrafts and includeArchived parameters. It does not explicitly mention alternatives, but the description's focused scope makes usage apparent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_field_valuesA
Read-only

Read every custom field value stored on one record, archived fields included and labelled as archived. This is how a retired field's data stays reachable after it stops rendering as an input.

NameRequiredDescriptionDefault
entityIdYes
entityKindYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals safety, and the description confirms the read-only nature while adding a behavioral detail not in the annotations: archived field values are returned and marked as archived. This gives agents useful expectations beyond the structured annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the read action and scope are front-loaded, and the archived-field behavior earns the second sentence. Every phrase adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with no output schema, the description covers what is returned, including the archived-field caveat. The main gap is the lack of parameter-level explanation, but the core call context is sufficiently clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented workspaceId, entityKind, and entityId parameters, but it only indirectly references 'one record.' It does not explain accepted entityKind values, how the three parameters relate, or any value formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific verb and resource: 'Read every custom field value stored on one record,' and adds the distinguishing scope that archived fields are included and labelled. This clearly separates it from write tools like set_field_value and definition tools like list_field_defs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence establishes the main use case for this tool: retrieving data from retired fields that no longer render as inputs. It gives clear context for when to call it, though it does not explicitly name alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_itemsC
Read-only

List items, filtered by query. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
queryNo
savedViewIdNo
workspaceIdYes
includeArchivedNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only safety is covered. The description adds a useful behavioral nuance: savedViewId merges its stored filters beneath explicitly provided filters. However, it omits other behavioral aspects such as handling of includeArchived or result set ordering, leaving the description to partially carry the burden despite the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with the main operation first, followed by the savedViewId nuance. The cryptic '(G00)' reference adds slight noise, but the description is efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks essential context for a tool with 4 parameters incl. a required one and no output schema. It doesn't explain what kinds of 'items' are listed, how includeArchived affects results, the need for workspaceId, or any pagination/return format. This is incomplete for an agent to call the tool correctly without external knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It offers meaningful semantics for savedViewId (applies a saved view and merges filters) and implies query's filtering role, but workspaceId (required) and includeArchived are left undefined. This is insufficient for a 4-parameter schema with no other parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear operation ('List items') and a filtering mechanism ('filtered by query'). The resource 'items' is distinct from sibling list_* tools (list_accounts, list_contacts), though it doesn't explicitly differentiate itself. The savedViewId detail adds precision without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to choose this over alternative list tools, nor any exclusions or prerequisites. The savedViewId explanation is a behavioral detail, not a usage guideline. With numerous sibling list_* tools, the lack of selection criteria is a notable gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_journalA
Read-only

List journal entries, filtered by date range, account, source, status, or Belegnummer (number: an exact match on the number as shown, or for a plain integer every series' entry with that number). Each entry reports its Belegnummer (number, null on a draft), the currency its total is in (null when the entry has no lines), plus the base-currency total, rate and base currency for a foreign-currency entry, all derived from its posted rows. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
toNo
fromNo
numberNo
sourceNo
statusNo
accountNo
savedViewIdNo
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses meaningful behavior: which fields each entry carries (Belegnummer, currency, base-currency total/rate/base currency), the null conditions (null number on a draft, null currency when there are no lines), that values are derived from posted rows, and the precedence rule that a saved view's stored filters merge *underneath* explicitly named filters. That last rule is the kind of non-obvious override semantics an agent would otherwise get wrong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and filters before the return-shape and saved-view details, and every clause carries information. The nested parentheticals around number matching are dense but still parseable; only slightly over-packed for a single paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully covers the return shape, so an agent knows what fields come back and when they are null. The remaining hole is input-side: free-string `status` and untyped date strings are undocumented in both schema and description, leaving value-format guesswork.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the full burden and mostly succeeds: it gives `number` precise matching semantics (exact match on the displayed number, or all series' entries for a plain integer) and defines `savedViewId` merge precedence. Gaps remain for `status` (no valid values listed), the `from`/`to` date format, and `workspaceId`, which is unmentioned despite being the only required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('List journal entries') and enumerates the exact filter axes (date range, account, source, status, Belegnummer). It is unambiguous against ledger-style siblings, though it never names an alternative such as general_ledger or export_journal to complete the differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the filter list and the savedViewId merge rule, so an agent can infer when to reach for it. However, there is no explicit 'use this instead of X' routing, no statement about pagination limits, and no guidance on when to prefer the ledger or export tools that sit next to it in the catalog.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_membersA
Read-only

List everyone bound to this workspace, pending invites included and labelled as pending (a pending member holds no capability at all).

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. The description adds meaningful behavioral context beyond that: pending invites are included and labelled, and a pending member holds no capability. This is extra information not present in the schema or annotations, helping the agent set expectations. No contradictions exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence. It immediately states what the tool does patron, then adds essential nuances (pending invites, capability). Every word adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity—one required parametercars, no nested objects, read-only annotation—the description covers the core behavior and output expectations. It lacks mention of pagination or result format, but those are minor for this straightforward listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the required workspaceId parameter. The description indirectly references it as 'this workspace' but does not explicitly define the parameter or its constraints. For a single obvious parameter, this is adequate but does not fully compensate for the missing schema guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation ('List'), the resource ('everyone bound to this workspace'), and important scoping details ('pending invites included and labelled as pending'). It is unambiguous and distinct from sibling list tools like list_contacts or list_bank_statements because it specifies 'everyone bound to this workspace'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly tells the agent when to use this tool (to list all workspace members), but it does not explicitly mention alternatives or explain when not to use it. Given no close sibling tool with a similar purpose, the implicit context is sufficient but not exemplary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_open_itemsA
Read-only

The OP-Liste: every unpaid or partly-paid invoice with its open amount, due date, days overdue and aging bucket, plus every parked customer payment. A parked payment carries its direction: incoming is a Guthaben the customer holds and reads NEGATIVE, outgoing is a refund not yet matched and reads POSITIVE. Reports bucket subtotals in the invoice currency (bucketTotals) and in base currency (baseBucketTotals, the only one that is an amount when several currencies are open), the grand total both ways, and whether the base total reconciles to account 1100 Debitoren as of the same date. Pass asOf to see the receivables exactly as they stood on a past cut-off (payments after it are ignored). Filter by customerId or currency to narrow the table without changing what reconciled means. Reads only.

NameRequiredDescriptionDefault
asOfNo
currencyNo
customerIdNo
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and the description reinforces 'Reads only.' It goes beyond the annotation by describing sign conventions for parked payments (incoming reads NEGATIVE, outgoing POSITIVE), the effect of asOf on payment inclusion, and how reconciliation relates to account 1100. This is rich behavioral disclosure that helps an agent interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense and front-loaded with the core definition, but it runs long. Several sentences explain nuances (parked payment direction, bucket subtotals vs. base currency totals) that could be tighter, yet each adds real interpretive value. It is structured as a flowing paragraph rather than scannable, but no sentence is pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool without an output schema, the description gives the agent naming conventions, behavior around asOf, currency handling, and reconciliation context. It does not enumerate every return field, but it characterizes the result shape well enough for an agent to invoke it and interpret the response. Minor gaps: no explicit mention of pagination or maximum result size.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden of parameter semantics. The description explicitly explains asOf ('pass asOf to see the receivables exactly as they stood on a past cut-off'), customerId and currency as filters, and workspaceId is implied by the resource context. It stops short of providing format or validation details for each parameter, but for a list tool with simple parameters this is solid coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a read-only listing of open receivables: unpaid or partially-paid invoices with aging details, plus parked customer payments. It names specific output elements (due date, days overdue, aging bucket, bucket totals) and the filtering parameters, which distinguishes it from general list tools like list_payments or customer_balance that likely return different data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use it (to see the OP-Liste / open items) and how to narrow results using customerId and currency. It mentions the asOf parameter for historical cutoff. It does not explicitly contrast with alternatives like aging_report or customer_balance, but the scoping language and detail on 'what reconciled means' give practical context for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_payableA
Read-only

The bills a payment run could pick up: every posted A17 vendor bill still open, each flagged with whether its vendor has a creditor_bank_profile, whether that IBAN is a QR-IBAN, what reference kind the bill's own vendorReference classifies as (qrr/scor/free_text/none), whether the currency is one create_payment_batch admits (CHF/EUR), and whether the bill already sits in a live (not yet paid) batch. dueBy filters to bills due on or before a date; vendorId to one vendor.

NameRequiredDescriptionDefault
dueByNo
vendorIdNo
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a read-only operation. The description adds meaningful behavioral detail about what gets returned: each bill is flagged for creditor bank profile, QR-IBAN, reference kind, eligible currency, and live batch presence. It does not mention pagination or sorting, but the core read-only behavior is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single long run-on sentence that packs a lot of detail into a dense structure. It is front-loaded with the core purpose, but the list of flags and criteria would be much easier to parse if split into sentences or bullets. All content is relevant, but readability suffers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description explains most return semantics: eligibility, per-bill flags, and available filters. Gaps include undocumented workspaceId, unspecified date format, and lack of pagination/sorting details, but these are minor relative to the rich information actually provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains that dueBy filters to bills due on or before a date and vendorId filters to one vendor, but workspaceId—a required parameter—is not described at all, and the expected date format for dueBy is not specified. This is partial compensation over an empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as listing bills a payment run could pick up, with specific eligibility criteria (posted A17 vendor bills still open) and a detailed list of returned flags. This distinguishes it from siblings like list_vendor_bills, list_payment_batches, and preview_payment by emphasizing the payment-run eligibility perspective.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: this tool is for seeing which open bills a payment run could pick up, and it explains the two filters (dueBy, vendorId). However, it does not explicitly name alternatives or state when not to use it, so it falls short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_payment_batchesA
Read-only

The payment-run history, newest first: every batch with its status, control sum and item count. status filters the lifecycle (draft/generated/paid). savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here (e.g. 'Batches awaiting bank confirmation' as status=generated, 'Paid this quarter' as status=paid with a date range on the client).

NameRequiredDescriptionDefault
statusNo
savedViewIdNo
workspaceIdYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint, the description discloses useful behavior: results are 'newest first', each batch includes its status/control sum/item count, and savedViewId filters are 'merged underneath' explicitly named filters. This clarifies non-obvious merge semantics rather than merely restating the annotation. It does not claim any destructive capability, consistent with readOnlyHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and front-loads the core behavior before going into parameter details. The saved-view examples add length but earn their place by clarifying how filters combine. It is dense but not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with three parameters and no output schema, the description covers the returned fields, default ordering, status filtering, and saved-view behavior. It does not discuss pagination or explicitly differentiate from payment-batch siblings, but the essential invocation semantics are present. Given the readOnlyHint and simple schema, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description compensates by explaining status values ('draft/generated/paid') and the savedViewId merge behavior with concrete examples. The required workspaceId is not described, but its role is evident from the name and required flag. It adds meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a list operation over payment-run history and specifies returned fields ('status, control sum and item count'), so an agent can infer the resource being read. It does not explicitly distinguish itself from sibling tools like get_payment_batch or list_payments, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement about when to choose this tool over related payment-batch tools (get_payment_batch, payment_batch_transmit, mark_batch_paid) or how it differs from list_payments. The filter semantics for status and savedViewId are described, but no when-to-use guidance or exclusion of alternatives is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_paymentsA
Read-only

List payments, filtered by direction, status, date range, or the document they settled. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here, so an explicit one always wins.

NameRequiredDescriptionDefault
toNo
fromNo
statusNo
directionNo
documentIdNo
savedViewIdNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint already declares the operation is safe, and the description adds genuine behavior beyond that: savedViewId merges stored filters underneath explicitly named filters, with explicit filters taking precedence. No mention of pagination or limits, but the merge precedence is the non-obvious behavior that matters most here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler: the first states the core action and filters; the second explains the non-obvious saved-view precedence. Key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition covers core filter semantics and saved-view behavior, and readOnlyHint covers safety. However, with no output schema, no enums, and zero parameter descriptions, the agent still lacks allowed values/formats, result pagination, and clear sibling routing, so it is not fully complete for a 7-parameter list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description provides the only semantics: direction, status, date range, and the settled document map to direction, status, from/to, and documentId. It also explains savedViewId's merge semantics. It stops short of giving allowed values or date formats, but it compensates for the empty schema meaningfully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with 'List payments' – a specific verb and resource – and enumerates concrete filter dimensions (direction, status, date range, settled document). This separates it from single-payment getters like get_payment and transactional tools like record_payment/reverse_payment without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The filter list and saved-view merge rule imply when the tool is appropriate, but the description never names alternatives or conditions for preferring another sibling such as get_payment or list_payment_batches. Usage context is present by implication, not explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_payroll_handoffsA
Read-only

The payroll hand-off history: the union of exports and wage-journal postings, each row typed export or posting, newest first. An export row carries counts, the AHV-inclusion state and the artifact link; a posting row carries the entry date, the posted entry id and reversalEntryId (the mirror once wage_journal_reverse took it back, else null). from/to filter on the record date; savedViewId applies a G00 saved view.

NameRequiredDescriptionDefault
toNo
fromNo
savedViewIdNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already covers the safety profile, and the description adds real context beyond it: result ordering (newest first), the two row shapes, and what each field on a row means. It omits pagination/result limits and whether the list is scoped to the workspace, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the identity of the resource, then row shapes, then filters — a logical build with no filler. The reversalEntryId parenthetical is slightly dense but earns its place by explaining a non-obvious field.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully documents what rows contain, so an agent can interpret results without a schema. Missing pieces are pagination behaviour and confirmation of workspace scoping, but for a filtered list tool it is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden and does so for most parameters: from/to filter on the record date (a meaningful distinction from the posting entry date) and savedViewId applies a saved view. workspaceId is left unexplained and no date format is given, so it stops short of full compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States precisely what the resource is: a hand-off history that is the union of exports and wage-journal postings, with row types named (export/posting) and ordering given (newest first). This clearly distinguishes it from the write-side siblings payroll_handoff_export, wage_journal_post and wage_journal_reverse.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The read-only 'history' framing implies when to reach for it, and wage_journal_reverse is named in passing, but there is no explicit when-to-use/when-not statement and no routing against the sibling write tools. The agent must infer that this is the audit/trace tool rather than the export or posting tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_period_locksA
Read-only

List all period locks for the workspace.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds the scope qualifier 'all ... for the workspace', but reveals nothing else about response behavior, ordering, or potential limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with no filler. Every word contributes to understanding the tool's function and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read-only list, the description is mostly adequate, especially with the readOnlyHint annotation. However, without an output schema, it does not describe what a period lock is or what data the response will contain, which could leave some ambiguity for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the single parameter, so the description must compensate. The phrase 'for the workspace' connects workspaceId to the returned locks, but no additional meaning, format, or semantics are provided beyond the parameter name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' with a clear resource, 'all period locks', and states workspace scoping. This clearly distinguishes it from sibling mutation tools like lock_period and unlock_period.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context implies that this tool is for viewing period locks, but it does not explicitly state when to use it versus alternatives, nor does it mention when not to use it. No exclusions or alternative routing are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pluginsA
Read-only

Die installierten Erweiterungen (P5, US-G02.2/3/4): every plugin manifest for the workspace newest first, each with its status, capability count, requested/granted scopes and compat verdict. savedViewId applies a stored G00 view over the plugin kind (filter by status or capability kind); its filters merge underneath any status named explicitly here.

NameRequiredDescriptionDefault
statusNo
savedViewIdNo
workspaceIdYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already communicates that this is a safe read operation. The description adds valuable behavioral details beyond that: the result includes every plugin manifest, is sorted newest first, and includes the plugin status, capability count, scopes, and compatibility verdict. It also discloses how savedViewId interacts with an explicitly passed status, which gives the agent a clear picture of behavior without contradicting the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately sized but contains a German preamble referencing 'P5, US-G02.2/3/4' that adds no operational value for an AI agent. The key information (returns all plugin manifests with specific fields, sorted newest first) is present, and the savedViewId behavior is explained, but the structure could be tighter by removing the requirement-ticket reference and better separating the output semantics from filter behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description reasonably enumerates the returned fields and ordering, which is helpful. However, it leaves the required workspaceId and the status parameter values unspecified, and it does not mention pagination limits, if any, or what a 'G00 view' means. For a list tool with three parameters and no output schema, this is incomplete but not severely lacking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description bears the burden of explaining parameters. It only meaningfully explains savedViewId (applies a stored view, filters merge under an explicit status). It does not explain the required workspaceId or the status parameter beyond a vague reference to 'filter by status or capability kind' embedded in the savedViewId explanation. Two of three parameters remain undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb (list) and resource (installed plugins/Erweiterungen) for the workspace, and enumerates the returned fields: status, capability count, requested/granted scopes, and compat verdict. The phrase 'installierte Erweiterungen' implicitly distinguishes this from registry-oriented siblings like search_plugin_registry and get_plugin_registry_entry, which operate on a plugin catalog rather than installed workspace plugins.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when the tool is appropriate by focusing on installed plugins, but it does not explicitly state when to prefer this over siblings such as search_plugin_registry or get_plugin. It does provide some usage guidance for savedViewId, explaining how its filters merge with an explicit status, but this is about parameter usage, not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_reconciliationA
Read-only

The reconciliation board: matched, unmatched and partial txns. A single-statement call (statementId) also returns reconciled (true once the ledger bank account matches the statement's closing balance to the Rappen, D64 as-of; absent when the Bankkonto is foreign-currency or the message carried no balance). A cross-statement call (bankAccountId/from/to, or savedViewId) omits it and returns the filtered lists only.

NameRequiredDescriptionDefault
toNo
fromNo
savedViewIdNo
statementIdNo
workspaceIdYes
bankAccountIdNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, so the safe-read nature is already known; the description adds meaningful behavioral detail by explaining the conditional presence of the 'reconciled' field and its exact semantics (ledger bank account matching the statement closing balance to the Rappen, D64 as-of, omitted under specified conditions). It also clarifies that cross-statement calls omit reconciled, adding nuance beyond the annotation without contradicting the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient, front-loading the core purpose first and then covering the two call modes in one compound passage. No words are wasted, though some phrasing ('Bankkonto', 'D64 as-of') is jargon-heavy and could be more accessible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with no output schema, the description covers the main call patterns, required context, and output differences between them. It doesn't describe pagination, list shape, or the meaning of 'partial txns' in detail, but the critical usage distinctions are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does: statementId, bankAccountId, from/to, and savedViewId all receive functional meaning tied to call modes. workspaceId is not explicitly explained, but it's required and reasonably inferable. The parameter semantics go well beyond the bare schema, though format details for dates are not given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific resource—'the reconciliation board'—and states what it returns: matched, unmatched, and partial transactions. It further distinguishes single-statement vs cross-statement call behavior, which helps define the tool's scope. It doesn't explicitly differentiate from sibling tools like list_bank_statements or review_bank_txn, but the resource and variants are clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete guidance on which parameters select which mode: statementId triggers a single-statement call, while bankAccountId/from/to or savedViewId triggers a cross-statement call. This is actionable context for when to use each variant, though it does not explicitly state when to prefer this tool over related reconciliation or bank-statement tools, nor does it mention exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recurring_schedulesA
Read-only

List the Serienrechnungen with their cadence, next run, occurrence count, status and the LAST run outcome (so a permanently failing schedule is visible on the list, not only in its history), newest first, filtered by status or contact. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
statusNo
contactIdNo
savedViewIdNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds behavioral context: it discloses the 'newest first' ordering, that the last run outcome is included to surface failing schedules, and how savedViewId filters merge with explicit ones. This is useful beyond annotations, though it omits pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and key fields, and includes the saved view behavior without redundancy. Every sentence adds value, and the structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no output schema, the description covers the essential details: what is listed, ordering, filters, and saved view behavior. It lacks explicit pagination information, which is a minor gap, but overall it provides sufficient guidance for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining status and contactId as filters and detailing savedViewId merging. workspaceId is not explained but is self-evident as a required workspace scope. The description adds meaning to the parameters, though it does not enumerate possible status values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists recurring schedules (Serienrechnungen) and enumerates the exact fields returned: cadence, next run, occurrence count, status, and last run outcome. It also specifies ordering and filters, making the purpose unambiguous and distinguishable from sibling get_recurring_schedule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (to list schedules with filters) and explains how savedViewId merges filters. It does not explicitly contrast with get_recurring_schedule for single-schedule retrieval, but the name and list semantics are clear. No explicit exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_restorable_backupsA
Read-only

List the .tillbackup bundles in this machines backup directory (the support dirs backups/, or TILL_BACKUP_DIR), newest first, with each one`s creation time, schema generation, entry count and whether this runtime can restore it, plus the generation this runtime expects. Pre-workspace: the restore door on a fresh install reads it. Lists no exports (an export is not a restore source) and verifies nothing (verify_backup does).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, so the read-only nature is known. The description adds meaningful behavioral context beyond that: it does not verify backups, does not list exports, and includes runtime-specific compatibility information ('whether this runtime can restore it' and 'the generation this runtime expects'). It also explains the source directory including the TILL_BACKUP_DIR override.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compactly written in three sentences, with the primary purpose front-loaded, followed by return details, then usage context and exclusions. Every sentence provides distinct value with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description fully explains what the tool returns: creation time, schema generation, entry count, restore compatibility, and expected generation. It also covers when it is used and what it deliberately omits. This is complete for a zero-parameter, read-only list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description confirms no inputs are needed by referring only to machine environment (backup directory), which is sufficient. There are no parameter schemas to elaborate on.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('.tillbackup bundles in this machine's backup directory') with concrete details: newest first, each bundle's creation time, schema generation, entry count, and restore compatibility. It clearly differentiates itself from sibling tools like list_backups and verify_backup by specifying its exact scope and what it returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when this tool is used ('Pre-workspace: the restore door on a fresh install reads it') and explicitly contrasts with alternatives: 'Lists no exports (an export is not a restore source) and verifies nothing (verify_backup does)'. This gives an agent clear conditions for when to call this tool versus others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rolesA
Read-only

List every assignable role with its resolved capability bundle and its member count, plus the capability registry itself so a client can render the whole matrix.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description aligns with that by describing a read-only listing operation. It adds useful details about the returned data (capability bundles, member counts, registry) without contradicting the safety profile, though it omits potential pagination or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently communicates the core action and return details. It is concise without unnecessary filler, though it could benefit from splitting the long sentence for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with readOnly annotations, the description covers the primary output but lacks mention of pagination, size limits, or any preconditions (e.g., workspace existence). It is adequate for basic understanding but not fully complete for an agent handling large role sets.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has a single required parameter, workspaceId, with no description (0% coverage). The tool description does not mention this parameter or explain its role, leaving the agent to infer that it scopes the listing to a workspace. This is a notable gap given the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists every assignable role, along with its capability bundle, member count, and the capability registry. This specific verb-resource pairing distinguishes it from role mutation tools like define_role, archive_role, and set_role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for rendering the role-capability matrix, but it does not explicitly state when to use this tool versus alternatives. No exclusions or comparisons to sibling list tools (e.g., list_members) are provided, leaving the selection reasoning to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_saved_viewsA
Read-only

List the saved views available for an entity kind: this session's own first, then the workspace-shared ones. Another session's personal views are never returned.

NameRequiredDescriptionDefault
entityKindYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral context: the ordering (session's own first, then workspace-shared) and an explicit exclusion (another session's personal views). This goes beyond what annotations convey, though it does not cover details like pagination 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core action is front-loaded, and the scoping rules are stated in a compact, readable way.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with two parameters and no output schema, the description provides the key behavioral semantics (what is returned, ordering, and exclusions). The main missing piece is the meaning of workspaceId, which prevents full standalone usability.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for entityKind and workspaceId. It clarifies entityKind's role ('for an entity kind'), but it never mentions workspaceId or explains its purpose or constraints. This is a meaningful gap for an agent needing to construct correct calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'List the saved views available for an entity kind.' It also adds distinguishing details about the scope and ordering (session's own first, then workspace-shared), which separates it from other saved-view tools like create_saved_view or update_saved_view.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly communicates when to use this tool (when you need to list saved views for an entity kind) and excludes a specific case: another session's personal views are never returned. However, it does not explicitly name alternatives or say when not to use it, so it falls short of the strongest routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_unmatched_incomingA
Read-only

The Abgleich queue: every registered incoming credit with its LIVE score (an open row re-scores on read, so a later-issued invoice is found), the proposed invoice with the exact Rappen figures (open amount, unpaid Mahngebühr, delta), the applied rows with their payment link and correction chain, the counts per lane, and the auto-apply dial state. Filter by Bankkonto, status (open/applied/dismissed) or value-date range. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here. Reads only.

NameRequiredDescriptionDefault
toNo
fromNo
statusNo
savedViewIdNo
workspaceIdYes
bankAccountIdNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, it discloses important runtime behavior: open rows re-score on read, exact Rappen-level figures are returned, and savedViewId merges stored filters underneath explicit filters. This is meaningful operational context the annotation alone does not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded, starting with the core queue identity and covering output, filters, and saved-view behavior. It is one long run-on paragraph and could be better structured, but every clause adds relevant detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation with no output schema, the description covers the returned components, supported filters, and saved-view behavior in detail. The agent has enough context to call the tool correctly, with only minor gaps like exact date formats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description compensates well by explaining bankAccountId as Bankkonto, listing status values open/applied/dismissed, describing from/to as a value-date range, and detailing savedViewId merge semantics. The only parameter left undocumented in both the schema and description is workspaceId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific verb and resource: listing the Abgleich queue of unmatched incoming credits. It enumerates the returned fields and filters, which strongly distinguishes it from sibling reconciliation and matching tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the tool's context unmistakable: reviewing unmatched incoming credits with filters by bank account, status, or date range, and it explicitly says 'Reads only.' It does not explicitly name alternatives or when-not-to-use cases, but the context is clear enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_vendor_billsA
Read-only

Die Kreditoren: every vendor bill with its open amount, due date, days overdue and aging bucket, plus the tie-back to account 2000. reconciled compares two independent derivations (the bills and their allocations against the posted balance of 2000), so a movement A17 does not model shows up as a stated difference rather than as a silently wrong total. status filters the lifecycle (draft/posted/void); settlementStatus filters the derived payment state (unpaid/partly_paid/paid). savedViewId applies a G00 saved view underneath the explicit filters.

NameRequiredDescriptionDefault
toNo
fromNo
statusNo
vendorIdNo
savedViewIdNo
workspaceIdYes
settlementStatusNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation by explaining how the reconciled field compares two independent derivations and how unmatched movements surface as stated differences. It also clarifies the semantics of status, settlementStatus, and savedViewId, giving the agent a clear picture of the tool's filtering behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: the first sentence front-loads the core purpose, the second explains the reconciliation behavior, and the third details the filters. No words are wasted, though 'Die Kreditoren' adds mild ambiguity for English-only readers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the key behavioral aspects (reconciliation, filter semantics) and the list output, but does not document the date range parameters (to/from) or vendorId, which are still in the schema without any description. Given the absence of an output schema and the tool's complexity, these omissions leave some gaps in what an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description compensates by explaining status, settlementStatus, and savedViewId, but leaves to, from, and vendorId semantically implicit. An agent would need to infer that to/from are likely date range bounds and vendorId is an ID filter, which is a notable gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as listing vendor bills with open amount, due date, days overdue, aging bucket, and tie-back to account 2000. It specifies the resource and the fields returned, but does not explicitly name or differentiate it from closely related siblings like list_payable or get_vendor_bill.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the description's focus on vendor bills with aging and reconciliation to account 2000. There is no explicit guidance on when to prefer this tool over alternatives (e.g., list_payable for payables or get_vendor_bill for a single bill), nor any exclusionary conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workspacesA
Read-only

List the workspaces in this database this session may open (id, name, currency, fiscal year start), so a client can re-open one. Archived mandates are hidden unless includeArchived is true; a provisioned workspace is listed only for its accepted members. savedViewId applies a saved roster view (G00): pass savedViewWorkspaceId (the book the view is stored in) beside it; stored filters merge underneath any named explicitly here.

NameRequiredDescriptionDefault
savedViewIdNo
includeArchivedNo
savedViewWorkspaceIdNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses default behavior (archived mandates hidden unless includeArchived is true), membership filtering for provisioned workspaces, and the saved-view merge semantics. With readOnlyHint=true, this adds substantial context beyond the annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then compact behavioral details and parameter semantics. Each clause earns its place, though it is dense and uses domain-specific shorthand that could be clearer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the key behaviors, return fields, and parameter semantics. With no output schema it could be even more complete, but pagination or sorting details are not critical for a listing tool; overall it is sufficient for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description explains all three parameters: includeArchived toggles archived visibility, savedViewId applies a saved roster view, savedViewWorkspaceId provides the book where the view is stored. Some jargon remains (G00, 'roster view'), so it isn't fully self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'List the workspaces in this database this session may open' plus the return fields, and the client-reopen scenario distinguishes it from sibling workspace tools. It is immediately distinct from get_workspace vs env_list vs archive_workspace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear scenario ('so a client can re-open one') and explains when to pass includeArchived and the savedView parameters. Does not explicitly name alternative tools or state when not to use them, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

location_archiveA
DestructiveIdempotent

Soft-archive a location (and its empty descendants). Refused with location_has_stock when the location or any descendant still has non-zero on-hand, location_in_use when an open stocktake references it, or cannot_archive_default when it is a default. Deletion is never offered; historical movements keep their location_id.

NameRequiredDescriptionDefault
locationIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint and destructiveHint annotations, the description explains that empty descendants are also archived, lists specific refusal error codes, and confirms that historical movements retain their location_id. This gives substantial behavioral context for a state-changing operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two efficient sentences, front-loading the operation and then the refusal and retention behavior. Every sentence adds useful information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with annotations covering idempotency and destructive behavior, the description gives strong operational context: descendants, refusal conditions, and historical retention. It omits parameter-level detail and success behavior, but remains sufficiently complete to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage for all three required parameters, and the description does not explain workspaceId, locationId, or idempotencyKey semantics beyond the implicit meaning of 'location'. It leaves required-parameter behavior and idempotency-key usage undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource, 'Soft-archive a location (and its empty descendants)', making the operation immediately identifiable. It clearly distinguishes this from sibling tools such as location_create, location_update, location_set_default, and from any deletion operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-not conditions through refusal error codes tied to stock, open stocktakes, and default locations, and states that deletion is never offered. It does not explicitly name alternative sibling tools, but the conditions are enough to guide correct use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

location_createA
Idempotent

Create a location under a warehouse. code is 1-30 chars, unique within the warehouse case-insensitively (duplicate_code). parentId nests it (null = root under the warehouse); the parent must belong to the SAME warehouse (parent_warehouse_mismatch) and the depth is capped at 8 (max_depth_exceeded). locationType is one of zone|aisle|shelf|bin|staging|other (invalid_location_type). The FIRST location in a warehouse becomes its default; pass isDefaultForWarehouse to force it.

NameRequiredDescriptionDefault
codeYes
nameYes
parentIdNo
descriptionNo
warehouseIdYes
workspaceIdYes
locationTypeNo
idempotencyKeyYes
isDefaultForWarehouseNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare idempotentHint=true and destructiveHint=false, and the description goes further by disclosing the implicit default-assignment side effect and enumerating failure codes (duplicate_code, parent_warehouse_mismatch, max_depth_exceeded, invalid_location_type). It does not mention permission requirements or what is returned, but the added behavioral context is well above the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Information is front-loaded and dense with zero filler; parenthetical error codes keep the constraint sentence compact. It is slightly overpacked into one block, but each clause carries distinct meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter create tool with no output schema and no per-field schema docs, the description covers the hierarchy and validation logic well but leaves five parameters and the response shape unexplained. Adequate to call it correctly in common cases, incomplete for edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 9 parameters, and the description only explains 4 of them (code, parentId, locationType, isDefaultForWarehouse). workspaceId, warehouseId, name, description, and idempotencyKey are left entirely to inference, so the description compensates only partially for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a location') plus the scoping relationship ('under a warehouse'), which cleanly separates it from warehouse_create and location_update in the sibling list. An agent can tell immediately what entity is produced.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete conditions: 'The FIRST location in a warehouse becomes its default; pass isDefaultForWarehouse to force it', which tells the agent when the flag matters. It does not explicitly route to siblings like location_update or inventory_ensure_default_location, so it falls short of a full when/when-not treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

location_getA
Read-only

Read one location by id, archived or not, including its warehouse, parent, materialised path and depth.

NameRequiredDescriptionDefault
locationIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals the operation is non-mutating; the description adds value by specifying it returns archived-or-not locations and the included hierarchy fields (warehouse, parent, path, depth). No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence that packs the verb, scope, and return fields with no filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has only two parameters, none nested, and no output schema. The description covers the read behavior, the included fields, and the archived-or-not scope. It does not state error conditions or what happens when the location is missing, but for a simple read with readOnlyHint, the description is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the resource (location) and that locationId identifies the record, but it does not explain the role of workspaceId beyond the schema's required field. Some meaning is added, but not enough to fully bridge the lack of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read'), a singular resource ('one location by id'), and clarifies scope ('archived or not'). It enumerates the returned data (warehouse, parent, materialised path, depth), which distinguishes it from sibling list/tree/upsert location tools without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the right use case: fetching a single, specific location including archived ones and related hierarchy data. It does not explicitly contrast with siblings like location_list or location_tree, so it loses a point for no explicit 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.

location_listA
Read-only

List locations (flat), filterable by warehouseId, parentId (null = roots), active, and a case-insensitive search over code and name. includeDescendants=true with a parentId returns the whole subtree. Accepts a savedViewId (G00 saved-view seam).

NameRequiredDescriptionDefault
activeNo
searchNo
parentIdNo
savedViewIdNo
warehouseIdNo
workspaceIdYes
includeDescendantsNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, which already establishes the safety profile. The description adds genuinely useful behavior beyond that: parentId null = roots, case-insensitive search scoped to code and name, and includeDescendants returning the whole subtree. The cryptic "(G00 saved-view seam)" reference is opaque jargon but still discloses the saved-view acceptance behavior. No contradiction with the read-only annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core verb+resource, and every sentence adds parametric or behavioral value. The only slight blemish is the cryptic "G00 saved-view seam" parenthetical, which trades clarity for terseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter list tool with no output schema, the description covers the query-side semantics nearly completely — filters, subtree behavior, and saved-view support. Gaps are minor: the return shape and pagination are not mentioned, and the G00 reference is unexplained. With readOnlyHint already covering the safety profile, this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the full burden and compensates well: it adds semantics for 6 of 7 parameters — warehouseId, parentId (null = roots), active, search (case-insensitive over code/name), includeDescendants, and savedViewId. Only the required workspaceId is left implicit, which is acceptable as a standard workspace-scope parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"List locations (flat)" gives a specific verb and resource, and the parenthetical "flat" directly distinguishes it from the sibling location_tree tool. The named filters (warehouseId, parentId, active, search) further pin down what this listing endpoint is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys the filtering context and the includeDescendants=true + parentId subtree path, which implies when this tool can substitute for a tree view. However, it never explicitly names alternatives (e.g., location_get for a single record, location_tree for a native hierarchy) or states when NOT to use it, leaving the boundary between location_list and location_tree to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

location_set_defaultA
DestructiveIdempotent

Make this location the default for its warehouse, demoting the previous default in the same transaction. An archived location is refused with location_archived.

NameRequiredDescriptionDefault
locationIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint, so the bar is lower, yet the description still adds real behavioral context: demotion of the previous default happens atomically in the same transaction, and archived locations fail with a named error code. It doesn't mention permission requirements, but the side-effect and failure profile are unusually well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core mutation and its side effect front-loaded and the failure case second. Every clause carries information an agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema the description needn't explain returns, and annotations cover the safety profile, so the missing piece is again parameter meaning in a 0%-coverage schema. For a small toggle tool it is close to adequate, but an agent cannot fully resolve workspaceId/locationId/idempotencyKey from this text alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description explains none of the three parameters (workspaceId, locationId, idempotencyKey). Only a faint hint exists that locationId identifies 'this location' whose warehouse is derived implicitly, but workspaceId scoping and the required idempotencyKey are left entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Make this location the default for its warehouse') with scope made explicit. It is clear that the operation is location-level rather than warehouse-level (contrasting with warehouse_set_default), but it never names that sibling, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the operation itself and one precondition is given ('An archived location is refused with location_archived'), but there is no guidance on when to prefer this over inventory_ensure_default_location or how to handle a location that may be archived. The agent must infer the when/when-not itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

location_treeA
Read-only

Return the nested location tree for one warehouse (roots with recursive children), for the GUI tree view.

NameRequiredDescriptionDefault
warehouseIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already covering the safety profile, the description adds useful behavioral detail: the result is a nested tree with roots and recursive children, scoped to one warehouse. It does not contradict the annotation, and the added shape information is valuable beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no redundant words. It front-loads the primary action and scope, and the GUI context is appended naturally. Every phrase contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tree-fetching tool, the description conveys the core behavior and intended display context. It is not fully complete because workspaceId semantics are left to inference and there is no output schema, but the tool is simple enough that an agent can likely call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only mentions 'one warehouse', which loosely maps to warehouseId, but it does not explain workspaceId or clarify the relationship between the two required parameters. For a two-parameter tool with no schema descriptions, this is a meaningful gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Return'), a specific resource ('nested location tree'), and a scope ('one warehouse'). 'For the GUI tree view' adds a concrete purpose, and the mention of 'nested' and 'recursive children' distinguishes it from a flat location_list or single location_get tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use it: when a tree-structured view of locations for a single warehouse is needed. It does not explicitly name alternatives or conditions when not to use it, but the GUI tree view context is specific enough to guide selection among the many location-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

location_updateA
DestructiveIdempotent

Edit a location through a patch object (name, description, locationType, parentId). Re-parenting via parentId is allowed only within the same warehouse (parent_warehouse_mismatch) and never into the location itself or a descendant (location_cycle); the whole subtree moves and its materialised paths and depths are rewritten. Only the fields present in patch change.

NameRequiredDescriptionDefault
patchNo
locationIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description goes well beyond that by disclosing the concrete blast radius: the whole subtree moves and its materialised paths and depths are rewritten. It also names the exact failure modes (parent_warehouse_mismatch, location_cycle) and clarifies that only fields present in the patch are changed, which pairs correctly with idempotentHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the verb and mechanism, then the re-parenting constraints, then the patch-diff rule. Error codes are inlined parenthetically rather than expanded, and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with a nested schema and no output schema, the description covers impact, constraints, and diff semantics well. It omits what the call returns and whether any permission or archived-state preconditions apply, which an agent would still have to discover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description has to carry parameter meaning, and it does for the complex nested `patch` object: it enumerates name, description, locationType, and parentId and gives parentId detailed constraint semantics via the error codes. workspaceId, locationId, and idempotencyKey are left unmentioned, though their names plus the idempotentHint annotation make them largely self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (edit) and resource (location) and immediately identifies the mechanism (a patch object) plus the four editable fields. An agent can distinguish it from location_create, location_archive, and location_set_default without inspecting any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when this tool applies and, notably, the conditions under which re-parenting is and is not legal (same warehouse only, never into self or a descendant). It does not name sibling alternatives such as location_archive or location_create, so it falls short of explicit when-not/alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lock_periodA
DestructiveIdempotent

Lock a month or year, soft or hard, with an optional reason. The seal reasons (vat_filed, year_close) are reserved and refused with reserved_lock_reason: a filed MWST period is sealed by vat_mark_filed and a fiscal year by close_year, never by a lock. CONSEQUENCE: Locks the period, so nothing more can be booked into it. A soft lock can be lifted at any time; a hard lock only by someone with the right to unlock.

NameRequiredDescriptionDefault
kindYes
periodYes
reasonNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: names the exact error code (reserved_lock_reason), describes the concrete consequence (nothing more can be booked into the period), and discloses reversibility differences (soft liftable anytime, hard only for someone with unlock rights). This is exactly the destruction and recovery context an agent needs for a destructiveHint=true call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the verb and scope, then uses an explicit CONSEQUENCE label for the risky part. Dense but nearly every sentence carries information; the reserved-reason explanation is slightly long but justified because it prevents a real misuse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent, no-output-schema mutation, the description covers irreversibility, recovery paths, and refusal behaviour. It omits the response shape and the precise permission required for a hard unlock ('the right to unlock' is left vague), but nothing critical to calling it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the load: it reveals that 'kind' takes soft/hard, that 'period' is a month or a year, and that 'reason' is optional. workspaceId and idempotencyKey are left unexplained, though the idempotentHint annotation and the ubiquity of workspaceId reduce that gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb + resource ('Lock a month or year') and immediately names the two lock kinds and the scoping unit, so an agent can distinguish it from unlock_period, list_period_locks, close_month and close_year. The reserved-seal-reason paragraph further separates it from vat_mark_filed and close_year.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says what this tool must NOT be used for: vat_filed and year_close reasons are refused, because a filed MWST period belongs to vat_mark_filed and a fiscal year to close_year. That is a clear when-not with named alternatives. It does not, however, say when to choose soft vs hard or point to unlock_period for lifting a lock.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lot_archiveA
DestructiveIdempotent

Soft-archive a lot (status archived). Refused with lot_has_balance while its derived on-hand is non-zero. Deletion is never offered; the movements that reference it keep their lot_id.

NameRequiredDescriptionDefault
lotIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint; the description adds real context on top: the operation is a soft archive rather than a delete, the exact refusal error code is lot_has_balance, and referencing movements retain their lot_id. It does not explain reversibility (whether an unarchive path exists) or how idempotencyKey is used, but the added failure-mode and referential-integrity detail is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct information (what it does, when it fails, what it does not do), with the core action front-loaded. No filler or restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behaviorally the description is solid for a small mutation tool with no output schema: state change, refusal condition, and non-deletion guarantee are all covered. However, with three required parameters at 0% schema coverage and no notes on idempotencyKey or workspace scoping, an agent still lacks the full picture needed to construct a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for the three required parameters, yet it never mentions workspaceId, lotId, or idempotencyKey. The names are largely self-evident, but no format, scoping, or idempotency-window semantics are supplied anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Soft-archive a lot") and immediately defines the resulting state ("status archived"), which distinguishes it from lot_update, lot_set_status, and lot_create in the sibling list. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Refused with lot_has_balance while its derived on-hand is non-zero" gives an explicit precondition an agent can check before invoking. It does not name a sibling alternative for the case where the precondition fails (e.g., reverting stock first, or using lot_set_status for a different status), so it stops just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lot_createA
Idempotent

Create a lot (a batch) against a lot-tracked item. number is 1-60 chars, unique per item case-insensitively (lot_number_taken); the item must be lot-tracked (else tracking_not_applicable). Optional expiryDate, manufacturedDate, supplierReference, notes and an initial status (default open). No quantity column: on-hand is always derived from movements.

NameRequiredDescriptionDefault
notesNo
itemIdYes
numberYes
statusNo
expiryDateNo
workspaceIdYes
idempotencyKeyYes
manufacturedDateNo
supplierReferenceNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, yet the description still adds substantial behavioral context: uniqueness rules with the lot_number_taken error, the tracking_not_applicable failure, and the fact that on-hand is derived from movements rather than stored. These are non-obvious traits an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and front-loaded: the purpose comes first, then constraints, then optional fields and the derived-quantity note. The semicolon-chained sentences are dense but every clause adds information; slightly more structure would earn a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the key behavioral semantics, error cases, and field options. It does not describe the return value or the role of workspaceId/idempotencyKey, leaving a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry the load, and it does for most fields: number (1-60 chars, case-insensitive per-item uniqueness), status (default open), and the optional expiryDate/manufacturedDate/supplierReference/notes. workspaceId and idempotencyKey are left implicit, keeping it short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a lot (a batch)') and defines the entity precisely as a batch against a lot-tracked item. An agent can distinguish it from siblings like lot_update, lot_set_status, and lot_archive without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear prerequisite ('the item must be lot-tracked') and the exact when-not outcome (tracking_not_applicable), effectively telling the agent when this call will fail. It does not name alternative tools (e.g., serial_create, lot_update) for related cases, so it stops short of explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lot_getA
Read-only

Read one lot by id, plus its derived on-hand (the live SUM of movements for the lot).

NameRequiredDescriptionDefault
lotIdYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, so safety is covered. The description adds valuable behavioral context: that on-hand is not a stored value but a derived live SUM of movements. This goes beyond the annotation and helps the agent understand the data semantics and potential cost (aggregation). No contradiction found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the primary action and then the key derived detail. There is no fluff. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with two required params and a readOnlyHint, the description covers the essential purpose and the notable derived value. It doesn't describe return shape or error cases, but with no output schema and a clean read operation this is not a critical gap. It is complete enough to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter meaning. It explains that the tool reads 'by id', which maps to lotId, but says nothing about workspaceId. Neither parameter has a schema descriptionheb, and the description does not clarify the role or format of workspaceId. The agent is left to infer that workspaceId is a scope qualifier.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and a specific resource ('one lot by id'), and adds a distinctive detail ('derived on-hand' with live SUM). This clearly differentiates it from siblings like lot_list and lot_search. The agent understands exactly what the tool does and for what resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when a specific lotId is known and on-hand is needed, but it does not explicitly say when to prefer this over alternatives like lot_search or inventory_on_hand_by_lot. No alternatives are named, and no when-not-to-use guidance is given. Usage is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lot_listA
Read-only

List lots, filterable by itemId, status, an expiryBefore cutoff (FEFO), and a case-insensitive search over number and supplierReference. Archived lots are hidden unless includeArchived or an explicit status is given. Each row carries its derived on-hand. Accepts a savedViewId (G00 saved-view seam).

NameRequiredDescriptionDefault
itemIdNo
searchNo
statusNo
savedViewIdNo
workspaceIdYes
expiryBeforeNo
includeArchivedNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only declare readOnlyHint=true, which the description does not contradict. The description adds meaningful behavioral context beyond the annotation: archived lots are hidden unless includeArchived or an explicit status is given, and each row carries its derived on-hand. These are useful behaviors not present in the schema or annotations. It doesn't cover pagination or ordering, but the readOnly annotation lowers the burden and the added behavior is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the core action and filters, with the archived behavior and savedViewId noted briefly. No wasted words; every clause adds information. The structure is easy to scan without being terse to the point of omitting key behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's relative complexity (7 parameters, no output schema, no enums), the description covers the main call semantics, filtering behavior, archived handling, and the saved-view seam. It does not mention output shape or pagination, though the absence of an output schema means those are under-specified; the core selection and invocation semantics are complete enough for an agent to use it correctly for typical list-and-filter purposes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the bare input schema. The description adds semantics for itemId (filter), status (also affects archived visibility), expiryBefore (FEFO cutoff), search (case-insensitive over number and supplierReference), includeArchived (overrides default hiding), and savedViewId (accepted as a saved-view seam). It doesn't explain expiryBefore's date format or the valid status values, which is a minor gap, hence 4 rather than 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('lots'), enumerates the filter dimensions (itemId, status, expiryBefore/FEFO, case-insensitive search), and distinguishes behavior from siblings like lot_search by noting the derived on-hand and archived-lot handling. The scope is clear and an agent can differentiate it from the related lot_search sibling without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: listing lots with filters, including the special FEFO cutoff and case-insensitive search. It notes the archived-lot default behavior and the includeArchived override. It does not explicitly name alternative tools (e.g., lot_search or inventory_on_hand_by_lot) for when a different tool should be chosen, so it earns a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lot_set_statusA
DestructiveIdempotent

Change a lot status: open | held | expired | closed | archived, with an optional reason. Setting closed or archived while the lot still has non-zero derived on-hand is refused with lot_has_balance (quarantine or expire it instead, which keeps the quantity). Never mints a stock movement.

NameRequiredDescriptionDefault
lotIdYes
reasonNo
statusYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true; the description goes beyond them by disclosing the specific error code (lot_has_balance), the precondition that triggers it, and the guarantee that no stock movement is created. It stops short of stating reversibility or permission requirements, which would be the remaining useful behavioral detail for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and its value set, then the failure mode, then the side-effect guarantee. No restatement of the name or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation tool with no output schema, the description covers the domain-critical parts: allowed values, the blocking precondition, the error code, and the absence of stock impact. The only gap is the required idempotencyKey, whose semantics are never mentioned anywhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the status parameter has no enum in the schema, so the description's inline value list ('open | held | expired | closed | archived') is genuinely load-bearing and it clarifies that 'reason' is optional. The other three parameters (workspaceId, lotId, idempotencyKey) get no explanation at all, notably the idempotency key, which is required and non-obvious.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Change a lot status') and enumerates the exact allowed values (open | held | expired | closed | archived). The refusal condition and the 'never mints a stock movement' clause further pin down what the tool does, so an agent can distinguish it from lot_archive or lot_update without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditional guidance: closing/archiving is refused when derived on-hand is non-zero, and names the correct alternatives ('quarantine or expire it instead, which keeps the quantity'). It does not, however, contrast itself with the sibling lot_archive, leaving the agent to infer which tool to reach for when the intent is archival.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lot_updateA
DestructiveIdempotent

Edit a lot through a descriptive patch (number if still unique, expiryDate, manufacturedDate, supplierReference, notes). The status is changed via lot_set_status, not here. Only the fields present in patch change.

NameRequiredDescriptionDefault
lotIdYes
patchNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag idempotentHint and destructiveHint, and the description adds genuinely new behavior: partial-patch semantics ("Only the fields present in patch change") and the uniqueness constraint on number ("if still unique"), which warns of a possible conflict error. It does not explain why the call is destructive or how the number change affects downstream traceability, leaving some annotation context unexplained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the verb and resource; every sentence carries distinct information (purpose, routing, patch semantics). The parenthetical "number if still unique" is compressed to the point of being slightly cryptic.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nested-patch mutation with no output schema, the description covers what changes, what doesn't, and which sibling handles the excluded field. Minor gaps remain: no guidance on clearing an optional field, on error/conflict behavior, or on what the call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It does well on the patch subfields (all five enumerated, with patch semantics spelled out), but the three required parameters workspaceId, lotId and idempotencyKey get no mention at all, and the idempotency contract is left entirely to the annotation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ("Edit a lot") plus the mechanism ("through a descriptive patch") and an enumeration of the mutable fields. It also explicitly carves out the status field, which lets an agent separate this from lot_set_status without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-not and names the alternative: "The status is changed via lot_set_status, not here." Clear context, though it says nothing about lot_create/lot_archive boundaries or prerequisites (e.g., whether an archived or reserved lot is editable).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mail_accounts_listA
Read-only

Die verbundenen Mail-Konten (P5): adapter, address, store path, enabled, and when each was last indexed, plus the supported adapter list for the connect affordance.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the safety profile, and the description adds value by specifying the exact returned fields and the additional adapter list for the connect affordance. Nothing suggests side effects, and there is no contradiction with the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence that front-loads the resource and field list with minimal waste. The unexplained 'P5' slightly reduces clarity but does not make the description verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with one parameter and no output schema, the description covers the return fields and the extra adapter list. It does not explicitly state workspace scoping or pagination, but these are minor gaps for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention the workspaceId parameter or clarify that results are scoped to the given workspace. With only one parameter, the name is self-explanatory, but the description fails to compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (connected mail accounts) and enumerates the returned fields (adapter, address, store path, enabled, last indexed) plus the adapter list. However, it lacks an explicit verb like 'list' or 'returns,' and the unexplained 'P5' prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for the connect affordance' gives an implicit usage context, and the tool name suggests listing mail accounts. But there is no explicit when-to-use guidance or comparison with alternatives like mail_connect or mail_threads_list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mail_connectA
Destructive

Verbinde einen lokalen Mail-Speicher: point TILL at the store a mail client on this machine already writes (adapter apple_mail reads .emlx, thunderbird reads Maildir and mbox). Takes NO credential and never signs in anywhere: an unreadable path answers needs_mailstore, a readable path that matches no adapter answers unknown_mail_adapter. The same store under the same address stays ONE account. CONSEQUENCE: Lets TILL read the mail store at this path on this machine; no password is asked and nothing leaves the machine. There is no disconnect yet, so the account stays connected.

NameRequiredDescriptionDefault
adapterYes
addressYes
storePathYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond destructiveHint=true: no credentials are taken and nothing leaves the machine, idempotency is spelled out ("same store under the same address stays ONE account"), and irreversibility is disclosed ("There is no disconnect yet, so the account stays connected"), which is exactly the kind of state-change consequence the annotation alone doesn't convey. The error-code taxonomy gives the agent predictable outcomes for a mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: the verb and object come first, then adapters, then failure modes, then consequences. Some content is repeated in the CONSEQUENCE sentence ("no password is asked" restates "takes NO credential"), and the mixed German/English opening costs a little clarity, but almost every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter, irreversible connect operation with no output schema, the description covers credentials, locality of data, idempotency, error returns, and the absence of a disconnect path. The main residual gaps are the role of workspaceId/idempotencyKey and what a success response looks like, but the essentials for correct invocation are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% with five undocumented parameters, so the description must carry the load. It meaningfully explains the `adapter` parameter's values (apple_mail vs thunderbird and what each reads) and touches `storePath` and `address` indirectly ("this path", "same address"), but `workspaceId` and `idempotencyKey` get no treatment at all, and required vs optional is only inferable from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: connect a local mail store ("Verbinde einen lokalen Mail-Speicher") that a local mail client already writes, naming the concrete adapters (apple_mail/.emlx, thunderbird/Maildir/mbox). An agent can distinguish it from siblings like mail_accounts_list or mail_reindex, though the untranslated German opener and awkward phrasing ("point TILL at the store") slightly blunt the first read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete selection context: pick the adapter matching the store format, and the two failure outcomes (needs_mailstore for an unreadable path, unknown_mail_adapter for a readable path with no matching adapter) effectively tell the agent how to validate and retry. It never explicitly says when NOT to use it or names a sibling alternative, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mail_drafts_listA
Read-only

Die von TILL zurückgeschriebenen Entwürfe (P5): locator, hash, draft-run provenance and reply target per draft, for one thread or across the workspace, newest first.

NameRequiredDescriptionDefault
threadIdNo
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already declaring the safety profile, the description adds meaningful behavioral context: the output fields, scope flexibility, and sort order. It does not contradict annotations and helps an agent understand what to expect from the response. It could have mentioned pagination or empty-result behavior, but for a read-only list tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the key selector and packs all relevant details. There is no wasted text, but the unexplained acronyms (TILL, P5) make it less immediately readable. Overall it is concise but could be clearer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with a simple schema and no output schema, the description covers the core return fields and scope. However, it omits details like whether the list is paginated, how workspaceId is validated, and what 'draft-run provenance' means in practice. The jargon and sparse parameter documentation leave an agent with some uncertainty.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It maps the 'one thread or across the workspace' wording to the threadId and workspaceId parameters, giving them functional meaning. However, it does not explain parameter formats, requiredness, or the meaning of additionalProperties, so the compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: listing drafts written back by TILL, with fields (locator, hash, provenance, reply target) and scope (thread or workspace). It distinguishes itself from mail_threads_list by focusing on TILL-generated drafts, though it never names the sibling. The internal references 'TILL' and 'P5' are unexplained, which slightly obscures the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: to retrieve TILL-written drafts for a single thread or across the workspace. It implies the optional threadId vs workspaceId split, and the 'newest first' ordering informs expectations. It does not explicitly mention alternatives or exclusions, so it misses the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mail_draft_writeA
Destructive

Schreibe einen Entwurf in den Entwurfsordner des Mail-Programms: renders an RFC-5322 reply (From the account address, To the counterpart, In-Reply-To the newest inbound message) into the local Drafts folder and persists locator + hash, not the body. The human reviews and sends it in their own mail app: TILL has no send verb and no SMTP anywhere (P8 by construction). One idempotency key writes exactly ONE Drafts message however often it is called; an unwritable folder answers drafts_not_writable.

NameRequiredDescriptionDefault
bodyYes
threadIdYes
inReplyToNo
draftRunIdNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the destructiveHint annotation: idempotency (one key = exactly one Drafts message), that it persists locator + hash rather than the body, and a concrete failure mode ('drafts_not_writable'). These are operational facts an agent needs and could not infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Behavior-critical facts are front-loaded and sentences are dense. The German/English duplication and internal jargon ('P8 by construction') add mild noise but do not obscure the core meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and zero param coverage, it supplies strong behavioral context (no SMTP, idempotency, error code). Some parameters and the exact return/persistence contract remain under-described, leaving minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It clarifies inReplyTo ('the newest inbound message') and the idempotency semantics of idempotencyKey, but leaves body, threadId, draftRunId, and workspaceId with no explanation anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specifies a concrete verb and resource: writes/renders an RFC-5322 reply into the local Drafts folder, and clarifies From/To/In-Reply-To wiring. The action is unmistakable, though it does not explicitly distinguish itself from siblings like draft_generate, save_draft, or draft_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames the workflow boundary: a human reviews and sends in their own mail app, because TILL has no send verb or SMTP. That tells an agent when this applies (draft-for-human-review) but does not name alternative tools or conditions for choosing them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mail_reindexA
Destructive

Lies den Mail-Speicher neu ein: walk the store and derive the index (threads and messages keyed on Message-ID), storing a locator and a sha256 per message and NEVER a body (OP6 index-never-copy). Senders matching a contact e-mail resolve to that contact; unknown senders stay indexed with none. Messages deleted in the mail client leave the index (the store is the authority); unparseable ones are skipped and counted, never fatal. Answers { indexed, skipped, removed, skippedReasons }. CONSEQUENCE: Reads the mail store again and updates the index; messages you deleted in your mail client leave it, with their drafts and writing samples, for good. The mail store itself is never changed.

NameRequiredDescriptionDefault
accountIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description discloses exactly what happens: no message bodies are stored, senders are resolved to contacts when possible, deleted messages leave the index permanently with associated drafts and writing samples, and unparseable messages are skipped and counted without failing the run. It also states the return shape and confirms the mail store itself is never changed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and every sentence adds relevant operational detail, but it is somewhat long and mixes German and English phrasing. The capitalized consequence section is useful but contributes to density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is thorough about behavior, deletion consequences, error handling, and return values, which compensates for the lack of an output schema. Its main gap is that it does not explain the required workspace and account inputs or the idempotency key.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it says nothing about workspaceId, accountId, or idempotencyKey. It does not explain their meaning, required status, or role in the operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: it re-reads the mail store and rebuilds the index of threads and messages keyed on Message-ID. This clearly distinguishes it from sibling mail tools such as mail_threads_list and mail_drafts_list, which are readers rather than index rebuilders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The implied use case is clear: rebuild the mail index from the authoritative store. However, the description never explicitly states when an agent should choose this tool over alternatives like mail_threads_list or mail_connect, leaving usage to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mail_thread_getB
Read-only

Ein Thread mit seinen Nachrichten, bodies read ON DEMAND from the mail store via each store_ref, never from SQLite. A message whose locator no longer resolves answers error message_moved while the rest of the thread still renders; a body whose re-read hash disagrees with the indexed sha256 comes back flagged stale:true.

NameRequiredDescriptionDefault
threadIdYes
workspaceIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description adds crucial behavioral context: bodies are fetched on demand from store_ref, not SQLite, and handles stale/moved messages explicitly. This goes beyond the annotation, enriching the agent's understanding of potential failure modes and data freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, ~2 sentences, well-structured, with key behavioral notes front-loaded. No unnecessary words. Slight brevity in parameter info doesn't hurt structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (on-demand fetching, error cases), the description covers behavior well, but lacks any parameter explanation and has no output schema. The agent can't know what the response contains beyond 'thread with messages'. Slightly incomplete for full usability.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for both parameters. It doesn't explain workspaceId or threadId meanings or formats at all; the agent only knows they're string IDs. This is a clear gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves a thread with its messages, specifying source details. It distinguishes from siblings like mail_threads_list, though not naming an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for fetching a specific thread's messages, but doesn't explicitly state when to choose it over mail_threads_list or other mail tools. No exclusions or alternatives named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mail_threads_listA
Read-only

Die Korrespondenz-Warteschlange (P5, computed at query time): threads with their bucket derived from newest-message direction versus newest draft (needs_reply, drafted, done; recent and all as views), filterable by account or contact. savedViewId applies a G00 saved view; its stored filters merge underneath any filter named explicitly here.

NameRequiredDescriptionDefault
bucketNo
accountIdNo
contactIdNo
savedViewIdNo
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true, the annotation already declares the tool is read-only. The description adds valuable behavioral context: buckets are computed at query time from newest-message direction versus newest draft, and savedViewId applies a saved view whose filters merge with explicitly named filters. This explains internal logic and merge behavior beyond what the annotation conveys. It does not address pagination or return format, but those are not required given the read-only nature and lack of 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the purpose and packs in details about bucket computation and saved view behavior. While concise, it uses cryptic identifiers like 'P5' and 'G00' without explanation, which may confuse an agent and reduce clarity. The structure is adequate but not fully accessible due to these unexplained codes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with five parameters and no output schema, the description covers the key aspects: what the tool returns (threads with buckets), how buckets are determined, filtering options (account/contact), and saved view behavior. It does not specify pagination, sorting, or return fields, but these are optional given the context. The description is sufficient for an agent to call the correct operation and understand the primary semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Given 0% schema description coverage, the description compensates reasonably. It explains the bucket parameter by enumerating possible values and how they are derived, and clarifies savedViewId's role in merging stored filters with explicit ones. It also mentions filterability by account or contact, giving meaning to accountId and contactId. It does not specify exact formats or whether parameters are required beyond workspaceId, but the core semantics are conveyed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists email threads with bucket classification based on message direction versus drafts. It names specific buckets (needs_reply, drafted, done) and views (recent, all), which gives concrete meaning to the operation. It does not explicitly contrast this with sibling tools like mail_thread_get or mail_drafts_list, but the purpose is clear enough to differentiate a thread-listing operation from a single-thread fetch or draft list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that the tool can filter by account or contact and apply saved views, which implies usage for retrieving threads by these criteria. However, it does not provide explicit guidance on when to prefer this tool over alternatives such as mail_thread_get (for a single thread) or mail_drafts_list (for drafts). The mention of 'recent and all as views' hints at broader querying but lacks explicit exclusions or alternate tool routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mark_batch_paidA
Idempotent

Confirm the bank executed a generated batch: posts one outgoing payment per item through A14's recordPayment (debit 2000 Kreditoren / credit the debtor bank account), each settling its own vendor bill, atomically for the whole batch. Requires confirmation:true, because marking paid must reflect a genuine bank confirmation, never a side effect. Idempotent per batch: a re-confirm under the same key replays the same result and never double-pays. CONSEQUENCE: Confirms the bank paid the batch: records one payment per bill and marks every bill in it as paid. If the bank did not pay, you reverse those payments, which reopens the bills.

NameRequiredDescriptionDefault
batchIdYes
bankTxnIdNo
valueDateYes
workspaceIdYes
confirmationYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint=false; the description goes well beyond by naming the ledger accounts posted, the per-item granularity, the all-or-nothing atomicity for the batch, and the exact consequence (every bill in the batch marked paid, and reversal reopens them). The idempotency statement adds the 'per batch, same key' mechanics rather than restating the flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the posting mechanics are front-loaded, and the CONSEQUENCE block is clearly signposted. There is mild redundancy between 'each settling its own vendor bill' and 'records one payment per bill and marks every bill in it as paid', which restates the same effect twice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-parameter accounting mutation with no output schema, the description covers the mechanism, the atomicity, the idempotency contract, the reversal consequence and the confirmation gate — enough to call it safely. It leaves the return shape, the meaning of valueDate/bankTxnId, and any permission requirements unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description has to carry the load, and it does for the risky parameters: confirmation (must be true), idempotencyKey (re-confirm under the same key replays, never double-pays), and batchId (the unit that is confirmed atomically). valueDate and bankTxnId get no mention at all, and valueDate is required, so an agent must guess its format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Confirm the bank executed a generated batch') and then pins the mechanism precisely: one outgoing payment per item via recordPayment, debit 2000 Kreditoren / credit the debtor bank account. That distinguishes it cleanly from create_payment_batch, generate_pain001, payment_batch_transmit and record_payment, which all sit near it in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear pre-condition for use: confirmation:true is required because marking paid must reflect a genuine bank confirmation, 'never a side effect.' It also implies the recovery path ('If the bank did not pay, you reverse those payments'), which points the agent toward reverse_payment territory. It stops short of naming the sibling alternatives explicitly or stating when to prefer payment_batch_transmit first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_billA
Destructive

Gleiche eine A17-Kreditorenrechnung 3-fach gegen die Bestellung und ihre Wareneingänge ab: compares, in CHF base Rappen, the value of goods RECEIVED-but-not-yet-billed at the POs own line prices against the bills base net, within a FIXED tolerance (2% or a CHF 1.00 floor, either passing). Within tolerance writes a matched po_match row, links the A17 bill_id, raises billed_qty (never above received_qty: no over-match) and, when the PO is fully billed, advances received -> closed. POSTS NOTHING: the bills expense/inventory + Vorsteuer posting is A17->A02 (P3), match_bill stores only the link. OVER tolerance BLOCKS auto-match: it PERSISTS a po_match row with status variance (the exception stays visible) and returns variance_exceeded. A user holding the post` capability may pass override:true to force an overridden match (records overridden_by). Refusals: zero receipts -> nothing_received; a bill from a different supplier -> invalid_reference; the same bill matched twice -> already_matched. match_bill is EXCLUDED from automation (a variance override is a human judgment). CONSEQUENCE: Matches the vendor bill against what the order received and marks those lines billed; a fully billed order closes. Nothing is booked, and the match can't be undone.

NameRequiredDescriptionDefault
poIdYes
actorNo
billIdYes
overrideNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag destructiveHint=true; the description goes far beyond it, disclosing exactly what mutates (po_match row, bill_id link, billed_qty capped at received_qty, received->closed), that nothing is posted, that over-tolerance persists a variance row and returns variance_exceeded, and that the match cannot be undone. This is exactly the mutation context the annotation alone does not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and tolerance rule, then behavior, override, and refusals in a logical order. Mostly dense and useful, though the trailing 'CONSEQUENCE:' sentence largely restates earlier points and the German/English mixing adds slight noise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter destructive mutation with no output schema, the description covers the critical decision points an agent needs: tolerance thresholds, the over/under branch outcomes, the override gate, refusal codes, and the fact that no ledger posting occurs. Only the peripheral params (actor, idempotencyKey) are unaddressed, which is minor against the overall richness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the parameters. It meaningfully explains override (post capability, records overridden_by) and implicitly poId/billId via the match narrative, but says nothing about workspaceId, actor, or idempotencyKey, leaving half the parameters undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: a 3-way match of an A17 vendor bill against the PO and its goods receipts, with the CHF-Rappen tolerance logic spelled out. Very clear what the tool does, but it never references the large match_three_way_* sibling family (create/override/reverse/evaluate), so an agent still has to infer which of the similar-sounding matchers to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the operational context well: it belongs to the A17->A02 posting flow, is excluded from automation, and requires the `post` capability plus override:true for a forced match. It also enumerates refusal conditions (nothing_received, invalid_reference, already_matched). No explicit when-to-use-instead-of-alternative guidance against the match_three_way_* tools, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_qr_paymentA
Read-only

Score a credit's facts against the open invoices, writing nothing: revalidates the reference (QRR mod-10 recursive / ISO 11649 mod-97, the same derivation A11 issues with), finds the invoice the reference names, and answers a confidence with the reason in words. 'high' is reserved for an exact reference AND an exact amount, where exact means the invoice's open amount or open + unpaid Mahngebühr (a Mahnung's QR part carries the invoice's own reference). Everything else is 'medium' (amount_short, amount_over, currency_differs) or 'none' (no_invoice, already_paid, ambiguous_reference, reference_invalid, no_reference). A mistyped check digit is reported as a typo and never ranks. Reads only.

NameRequiredDescriptionDefault
currencyNo
referenceNo
valueDateNo
amountMinorYes
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation by detailing the internal validation logic (QRR mod-10 and ISO 11649 mod-97), the exact conditions for 'high' confidence, and the handling of edge cases like typos in check digits. It also explains what happens in ambiguous cases ('ambiguous_reference', 'no_reference'). This adds significant behavioral context beyond just 'reads only'. However, it doesn't disclose potential side effects like performance (e.g., may be slow if many invoices) or whether it caches results, but for a read-only tool with such rich logical detail, a 4 is warranted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but very efficient: it front-loads the core action and read-only nature, then explains the algorithm, confidence levels, and edge cases in just a few sentences. Every sentence adds value, and there is no fluff. The structure flows logically from purpose to outcome classes, making it easy for an agent to parse quickly. It exemplifies concise yet comprehensive writing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters and no output schema, the description does an excellent job of explaining the main logic and expected outputs. It covers the key aspects: input validation, outcome classification, and edge cases. The only gap is that it doesn't describe the exact output structure (e.g., whether 'confidence' and 'reason' are separate fields), nor does it mention any side effects or performance considerations. Given the absence of an output schema, this incomplete output documentation is a minor but noticeable gap, preventing a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Given that schema description coverage is 0% and there are 5 parameters, the description must compensate. It does provide context for 'amountMinor' (used to check exact amount for 'high' confidence) and 'reference' (validated, used to find invoice), and indirectly mentions 'currency' through 'currency_differs' outcome. However, it does not explicitly explain the parameters 'workspaceId' (likely to scope the invoice search) and 'valueDate' (possibly relevant to date matching), leaving some ambiguity. Despite this, the description goes a long way to clarify the most important parameters, so a 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: scoring a credit's facts against open invoices to produce a confidence level and reason. It uses specific verbs ('Score', 'revalidates', 'finds', 'answers') and identifies the resource (open invoices) and the exact output type (confidence with reason). It also distinguishes itself from related tools like apply_qr_match and override_qr_match by emphasizing it writes nothing and is read-only, making its role in the QR matching workflow clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains when to use this tool: to evaluate a credit against invoices and get a confidence score. It implicitly distinguishes it from mutating actions like apply_qr_match or override_qr_match (it writes nothing), and the list of possible confidence outcomes ('high', 'medium', 'none') with their triggers provides guidance on when this evaluation is appropriate. However, it does not explicitly state when NOT to use it or name alternative tools for other scenarios (e.g., if you need to actually apply the match), so it misses a point for not providing explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_status_for_billA
Read-only

The read-only payment gate A18 / the mark-paid UI consult before settling a vendor bill. Returns the match status (unmatched | matched | partial | overridden | reversed), the active matchId when there is one, the total still-open quantity on the PO, and canPay: true only for an active matched / partial / overridden match. An unmatched bill returns canPay false (I04 default policy: a bill is not payable through the gate until matched). Writes nothing.

NameRequiredDescriptionDefault
billIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description substantially exceeds the readOnlyHint annotation by enumerating the return fields (match status, matchId, open quantity, canPay) and explaining the conditional logic for canPay. It also explicitly says 'Writes nothing', reinforcing the read-only behavior. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each packing useful detail. The purpose and return fields are front-loaded, and the policy note is appended without fluff. Slightly dense but clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description fully outlines the return shape and the canPay logic. The I04 policy note adds policy context. For a simple two-parameter read-only status check, nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain the two parameters. It only implies 'billId' refers to a vendor bill and never mentions 'workspaceId'. With zero coverage the description should compensate, but it provides no parameter-level guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns match status for a vendor bill and is explicitly described as a read-only gate for the mark-paid UI. The verb 'returns' and the specific fields it returns distinguish it from mutating siblings like match_bill or match_three_way_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the context 'consult before settling a vendor bill', which tells the agent when to call it. It does not explicitly name alternative tools or give when-not-to-use guidance, but the read-only framing strongly implies it is not for creating or modifying matches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_three_way_createA
Idempotent

AGENT-FIRST. Persist a three-way match for a vendor bill (A17) against its purchase order (I01) and goods receipts (I02) when the evaluation is inside tolerance. Pass poId to pin the SAME candidate PO the evaluation was run against; otherwise the supplier oldest open PO is chosen, so an evaluate pinned to one PO and a create with no poId can land against a different PO. The engine RE-COMPUTES the evaluation under a row guard (the evaluation snapshot passed in is stored for audit but never trusted for the decision), writes an immutable match header + one line per PO line, increments billed_qty on every matched PO line exactly once, and marks the consumed I02 receipt lines. It POSTS NOTHING: the bill posting stays A17 -> A02. Refused when there is no candidate PO (no_candidate_po), nothing is open to bill (nothing_received), the bill has no CHF base figure yet (bill_not_convertible), the evaluation is out of tolerance (out_of_tolerance: use match_three_way_override), or the bill already has an active match (match_already_exists). allowPartial defaults to the workspace policy. Idempotent under idempotencyKey. Needs the purchasing.match capability. CONSEQUENCE: Matches the vendor bill against its order and goods receipts and marks those lines billed; nothing is booked. A wrong match is reversed, and both stay on record.

NameRequiredDescriptionDefault
poIdNo
billIdYes
evaluationNo
workspaceIdYes
allowPartialNo
idempotencyKeyYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses that the engine re-computes the evaluation under a row guard, never trusts the passed snapshot for the decision, writes an immutable match header and lines, increments billed_qty exactly once, marks consumed receipt lines, and posts nothing. It also names the required capability, idempotency behavior, refusal reasons, and reversal consequence.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded and organized around purpose, critical poId behavior, engine behavior, refusals, and consequence. Every major sentence carries useful operational information, though the density is close to the upper limit for a single tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and sparse annotations, the description covers the mutation's side effects, safety behavior, idempotency, refusal cases, and reversal path thoroughly. It does not describe the return value, but otherwise gives an agent enough context to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description meaningfully compensates for the most important parameters: poId pinning semantics, evaluation snapshot handling, allowPartial defaulting to workspace policy, and idempotencyKey behavior. It is slightly less explicit about billId and workspaceId, though their meaning is implied by the purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: persisting a three-way match for a vendor bill against its PO and goods receipts, with the tolerance condition. It is clearly distinguishable from siblings such as match_three_way_evaluate, match_three_way_override, and match_three_way_reverse.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use this tool: when the evaluation is inside tolerance. It also explains the critical poId pinning behavior, warns what can happen without poId, lists refusal conditions, and routes the out-of-tolerance case to match_three_way_override.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_three_way_evaluateA
Read-only

PURE. Evaluate (never write) a three-way match for a vendor bill against its purchase order and goods receipts. Returns a structured MatchEvaluation: per PO line the ordered / received / already-billed / open-for-billing quantities, the PO unit price and extended value, the quantity variance and a line status; and at the header the summed expected value, the bill base-net that was billed, the aggregate price / value variance, the exact tolerances applied and an overall status suggestion (matched | partial | variance | nothing_received | no_candidate_po). Pass poId to pin the candidate; otherwise the supplier oldest open PO is chosen. Callable repeatedly; it writes no rows.

NameRequiredDescriptionDefault
asOfNo
poIdNo
billIdYes
receiptIdsNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, and the description reinforces it with 'PURE', 'never write', and 'writes no rows' – consistent, not contradictory. It adds meaningful behavioral detail beyond the hint: the PO selection logic, repeatability, and the exact structure of the returned MatchEvaluation, including possible overall statuses. It does not disclose error conditions or permission requirements, but for a read-only evaluation tool the transparency is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with 'PURE. Evaluate (never write)' and every sentence adds value. The lengthy enumeration of MatchEvaluation fields is justified because there is no output schema to carry that information. It could be better structured with line breaks, but it is not bloated or repetitive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description does an excellent job specifying return values, per-line and header computations, tolerances, and overall status options. The PO auto-selection rule is also covered. However, the asOf and receiptIds parameters are not addressed, and workspaceId is silently required, leaving minor gaps for a tool with 5 parameters and no schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explicitly explains poId ('pin the candidate') and billId (the vendor bill being matched), but leaves workspaceId, receiptIds, and asOf entirely unexplained. The mention of 'goods receipts' hints at receiptIds but does not clarify whether it filters or overrides them. This partial compensation lands at a 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Evaluate (never write) a three-way match for a vendor bill against its purchase order and goods receipts' – a specific verb, resource, and scope. It distinguishes itself from siblings like match_three_way_create, match_three_way_override, and match_three_way_reverse by explicitly stating this is evaluation-only, and the detailed MatchEvaluation return type makes the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear direction on PO selection: 'Pass poId to pin the candidate; otherwise the supplier oldest open PO is chosen.' This tells the agent exactly how to control behavior. It also signals repeatability ('Callable repeatedly'), implying safe pre-decision assessment, though it does not name alternative sibling tools or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_three_way_exceptionsA
Read-only

The open exception list for prioritisation or human hand-off: posted, unmatched vendor bills whose live evaluation is variance or nothing_received, with the amount at risk (the value variance in Rappen), the supplier, and the age in days. Filter by supplierId and olderThanDays. Computed live (variance evaluations are never persisted).

NameRequiredDescriptionDefault
supplierIdNo
workspaceIdYes
olderThanDaysNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint already set, the description adds meaningful behavior: results are computed live and variance evaluations are never persisted. This helps the agent understand that the list is dynamic and cannot be relied on as a stored snapshot. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, leading with the purpose before explaining filters and computation. Every sentence adds useful information with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description names the key returned attributes (amount at risk in Rappen, supplier, age in days) and explains live computation. It leaves some gaps — workspaceId semantics, pagination/ordering, and exact olderThanDays comparison — but is adequate for a simple read-only list tool with annotations covering the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains that filters are supplierId and olderThanDays, and ties olderThanDays to the age-in-days concept. However, schema description coverage is 0%, and the required workspaceId parameter is not mentioned at all. It compensates partially but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific resource — the open exception list of posted, unmatched vendor bills — and states the exact selection criteria (live evaluation is variance or nothing_received). It distinguishes itself from related siblings like match_three_way_list by emphasizing the exception/prioritisation angle and live computation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context: the tool is for prioritisation or human hand-off of open exceptions, with optional filters by supplierId and olderThanDays. It does not explicitly name alternatives or say when not to use it, but the intended use case is explicit enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_three_way_getA
Read-only

Fetch one persisted three-way match: the header, its per-PO-line rows, and the stored evaluation snapshot (the exact numbers the GUI showed when the match was accepted).

NameRequiredDescriptionDefault
matchIdYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavior beyond the readOnlyHint annotation by emphasizing that the evaluation snapshot is the exact stored numbers shown when the match was accepted, indicating it is historical rather than recomputed. It doesn't cover errors, freshness, or authorization, but it goes beyond the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense, front-loaded sentence that names the operation, the resource, and the returned sections. Every clause adds meaning and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with two required parameters and no output schema, the description adequately conveys what comes back: header, rows, and snapshot. It doesn't spell out parameter semantics or fail states, but the structure is simple enough that this does not feel incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining matchId and workspaceId. It never mentions which identifier selects the match or how the workspace scopes the lookup; only the readable parameter names make it guessable. With zero schema descriptions, this is a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Fetch') and a well-defined resource ('one persisted three-way match'), then enumerates what is returned: header, per-PO-line rows, and stored evaluation snapshot. This clearly distinguishes it from siblings like match_three_way_list and match_three_way_evaluate without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: this is for retrieving a single already-accepted, persisted match and its historical evaluation snapshot, implying the agent should use list/evaluate siblings for those other purposes. It does not name alternatives explicitly or state when not to use it, but the singular and 'persisted' wording makes the scope obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_three_way_listA
Read-only

List persisted three-way matches, newest first, filtered by billId, poId, status (one value or a list) and a created-at from / to window.

NameRequiredDescriptionDefault
toNo
fromNo
poIdNo
billIdNo
statusNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds useful behavior beyond that: ordering by newest first, the ability to pass status as a single value or list, and the meaning of from/to as a created-at window. It does not mention pagination or response shape, but the read-only safety is covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the verb and resource, then efficiently packs ordering and all filter semantics. Every clause earns its place with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main query intent and parameters, but for a list tool with no output schema it lacks guidance on pagination, result limits, or return format. Given the large sibling set and six parameters, a bit more completion would help an agent invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It maps billId, poId, status, and from/to to meaningful filters, clarifies that status accepts one value or a list, and defines from/to as a created-at window. It does not elaborate on workspaceId or date format, but the core filter semantics are present.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('List'), a precise resource ('persisted three-way matches'), and key behaviors ('newest first', filtered by billId, poId, status, and a created-at window). This clearly distinguishes it from sibling tools like match_three_way_get, match_three_way_create, and match_three_way_evaluate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you need a filtered list of persisted three-way matches rather than a single match or a mutation. However, it does not explicitly name alternatives or state exclusions, such as using match_three_way_get for a single match or match_status_for_bill for status by bill.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_three_way_overrideA
Idempotent

Force a match on an out-of-tolerance evaluation with a MANDATORY reason (min 5 chars). Pass poId to pin the SAME candidate PO the evaluation was run against; otherwise the supplier oldest open PO is chosen. Writes a permanent match header with status overridden, the reason and the overriding actor, and still increments billed_qty and marks the receipt lines. An override without a reason is refused (reason_required). The override is permanent: it can only ever be undone by match_three_way_reverse, never silently turned back into a clean match. Refused with no_candidate_po / nothing_received / bill_not_convertible / match_already_exists exactly as create. Idempotent under idempotencyKey. Needs BOTH purchasing.match AND purchasing.match_override. CONSEQUENCE: Forces the match despite differences beyond the tolerance, with your reason, and marks those lines billed; nothing is booked. Only reversing the match undoes it, and both stay on record.

NameRequiredDescriptionDefault
poIdNo
billIdYes
reasonYes
evaluationNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give idempotent/destructive hints; the description adds substantial context: it is a permanent header write, increments billed_qty, marks receipt lines, requires BOTH purchasing.match AND purchasing.match_override, is idempotent under idempotencyKey, and enumerates refusal codes (reason_required, no_candidate_po, etc.). It also discloses that nothing is booked and only match_three_way_reverse undoes it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and constraints, but the trailing CONSEQUENCE block restates permanence and side effects already covered earlier, adding some redundancy without new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema, minimal annotations, and a nested object param, the description covers triggers, permission requirements, side effects, permanence, idempotency, and error codes – everything an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description must compensate, and it does for the key params: reason is MANDATORY (min 5 chars), poId pins the same candidate PO else oldest open PO, idempotencyKey governs idempotency. The nested 'evaluation' object and billId/workspaceId roles are left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: force a three-way match override on an out-of-tolerance evaluation. It distinguishes itself from siblings by naming match_three_way_reverse as the only undo path and referencing 'create' for shared refusal codes, so an agent can tell it apart from the normal match flow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Makes the trigger explicit (out-of-tolerance evaluation) and explains the poId branch vs the default 'oldest open PO' behavior. It stops short of naming match_three_way_create as the in-tolerance alternative, referring only to 'create' implicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_three_way_reverseA
Idempotent

Reverse a matched / partial / overridden match when a material error is found. Writes a compensating record (status reversed) linked to the original, restores billed_qty on every affected PO line to its exact pre-match value, and un-marks the I02 receipt lines. It never mutates the original header or its lines (§H-AUDIT) beyond stamping the one-way reverse link. A reversed match cannot be re-activated: a fresh evaluate + create is required. A non-empty reason (min 5 chars) is mandatory (reason_required); a match that is already reversed or in a non-reversible state is refused (match_not_reversible). Idempotent under idempotencyKey. Needs the purchasing.match_override capability. CONSEQUENCE: Reverses the match and restores the billed quantities; the original match stays on record as reversed. To match again, you run a fresh check and match.

NameRequiredDescriptionDefault
reasonYes
matchIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses what actually happens beyond the annotations: a compensating record with status reversed is written, billed_qty is restored to exact pre-match values on every affected PO line, I02 receipt lines are un-marked, and the original header/lines are never mutated beyond the reverse link. Adds idempotency semantics, a required capability (purchasing.match_override) and the specific error codes (reason_required, match_not_reversible). Consistent with destructiveHint=false and idempotentHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and mechanics, then constraints, then an explicit CONSEQUENCE block that an agent can scan quickly. The final CONSEQUENCE sentences partially restate earlier material (restoring billed quantities, needing a fresh evaluate + create), which is redundant but defensible as a summary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description tells the agent what gets produced (a compensating record marked reversed, linked to the original) and what state the system is left in. For a four-parameter mutation tool with these annotations, nothing essential for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry the parameters, and it covers three of four meaningfully: reason (non-empty, min 5 chars, error code reason_required), idempotencyKey (retry safety), and matchId implicitly via 'reverse ... a match' and the one-way link. workspaceId is never mentioned, so the coverage is strong but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (reverse) plus the resource and the exact states it applies to ('matched / partial / overridden match'), and the triggering condition ('material error'). It is clearly distinguishable from match_three_way_create, match_three_way_override and match_three_way_evaluate, which appear as siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context ('when a material error is found') and the follow-up path ('a fresh evaluate + create is required', 'you run a fresh check and match'), plus refusal conditions for already-reversed or non-reversible matches. It does not explicitly contrast this with match_three_way_override, so the choice between correcting vs reversing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_abandon_planA
DestructiveIdempotent

Close a plan as abandoned and delete its Testmandant for good, through the same guarded path as discard_testmandant, and only the Testmandant these books created: a copy of the books whose plan still points at the original's Testmandant drops its own link and deletes nothing, and a Testmandant that already went productive is never deleted. testmandantDiscarded is true only when a workspace was deleted. Belege for any step that reached live are retained (OR 958f), so abandoning never deletes the evidence of what was committed. After any commit this verb requires commit_migration. CONSEQUENCE: Abandons the data migration and deletes the trial workspace these books created for good, while it is still a trial; one that went productive is your books and stays. Belege of committed steps stay.

NameRequiredDescriptionDefault
planIdYes
confirmedNo
workspaceIdYes
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive and idempotent behavior, and the description adds substantial context: what is permanently deleted, what is never deleted (productive Testmandants), what happens to copied books, when testmandantDiscarded is true, that Belege for live steps are retained, and the post-commit dependency on commit_migration. 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and necessary safeguards, but the CONSEQUENCE section repeats points already made earlier, especially that a productive Testmandant stays and that Belege of committed steps remain. Those repetitions reduce conciseness without adding new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive migration tool with no output schema and 0% schema description coverage, the description does well on consequences and preconditions but is incomplete for invocation. An agent understands what will happen but receives no help with required parameters such as confirmed and idempotencyKey, which are central to calling the tool safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description provides no explanation of any of the four parameters (planId, confirmed, workspaceId, idempotencyKey). It does not say what confirmed means, why idempotencyKey is required, or how workspaceId relates to the plan, leaving the agent to infer invocation details entirely from bare parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: closing a plan as abandoned and deleting its Testmandant. It also distinguishes the action from discard_testmandant and from cases where the Testmandant has gone productive, so an agent can tell what this tool is for without inspecting siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the guarded path shared with discard_testmandant, clarifies that only the Testmandant created by these books is affected, notes that a copy drops its link instead, and states that after any commit the verb requires commit_migration. It does not explicitly compare against every sibling such as migration_close_plan, but the applicable context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_apply_map_templateB
DestructiveIdempotent

Apply a Zuordnungsvorlage to a plan's maps and report the deltas: applied, unmatched (targets this workspace lacks), new (source accounts the template does not cover) and conflicts. A hand-set entry is never overwritten; the hand-set value wins.

NameRequiredDescriptionDefault
planIdYes
templateIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, so safety is structurally covered. The description adds genuinely non-obvious behavior: hand-set entries are never overwritten and win over the template — a critical constraint that materially tempers the destructive hint. It also names the four delta categories returned, though it says nothing about permissions or scope of the write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the action stated first and the delta/conflict semantics second; no filler. Slightly compressed wording ('new', 'conflicts') leaves terms to be parsed from a single clause, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 0% schema coverage, the description does useful work by enumerating the return categories and the hand-set precedence rule. However, for a destructive, four-parameter mutation it leaves parameter meaning and the exact scope of what gets written unexplained, so it is only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so all four parameters (workspaceId, planId, templateId, idempotencyKey) carry no documented meaning. The description only implicitly ties the operation to a plan and a template; it never explains what idempotencyKey does or how workspaceId scopes the operation, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: applying a mapping template (Zuordnungsvorlage) to a plan's account maps, plus enumerating the resulting delta categories. This is distinguishable from siblings like migration_save_map_template or migration_set_map in substance, though the description never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the sequence (a template must exist and a plan must be in progress), but there is no explicit statement of when to call this instead of migration_set_map, migration_get_map, or migration_suggest_map. No prerequisites or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_check_stepA
Idempotent

Run the Eröffnungsprüfung for a step: every applicable control (trial balance balanced and per-account against the declared source, open AR/AP against their control accounts, each bank opening against the camt.053 OPBD, the VAT position at the Stichtag, row counts, document integrity, the export date against the Übernahmestichtag), persisted as an append-only snapshot whose hash a commit approval binds to. Idempotent: unchanged inputs return the stored snapshot. clean means every control passed or was waived; a failed or undeclared control refuses the commit.

NameRequiredDescriptionDefault
planIdYes
stepIdYes
againstNo
workspaceIdYes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral detail beyond the annotations: it lists the controls evaluated, explains that results are persisted as an append-only snapshot bound to a commit approval by hash, clarifies idempotency semantics for unchanged inputs, defines what clean means, and states that failed or undeclared controls refuse the commit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and avoids filler. It is dense because one sentence contains a long parenthetical enumeration of controls, but every part conveys relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the behavioral contract well, which is important for this complex check tool. However, with no output schema and 0% schema description coverage, it leaves parameter meanings and the structure of returned snapshot/check results underspecified for an agent invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for all five parameters. It only vaguely references running checks 'for a step' and does not explain workspaceId, planId, stepId, idempotencyKey, or the optional against parameter, leaving parameter semantics almost entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and scope: running the Eröffnungsprüfung for a migration step, including the control categories and append-only snapshot persistence. It is not merely tautological, but it does not explicitly name or distinguish itself from sibling tools such as migration_preview_step, migration_list_checks, or migration_commit_step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage before commitment by stating that a clean result enables commit and failed/undeclared controls refuse it. However, it does not explicitly say when to use this tool versus migration_preview_step, migration_list_checks, or migration_commit_step, nor does it state exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_close_planA
DestructiveIdempotent

Close a finished Datenübernahme, moving it from live to closed (the state the machine declared but nothing could reach). Legal only from live; refuses, naming the first blocker, while any step is non-terminal or any G11 control is failed. A close is the human judgment that the übernahme is finished, so it needs a confirmation and is denylisted from automation. Idempotent; writes no domain row and posts nothing (it stamps the plan only). CONSEQUENCE: Marks the data migration as finished, once every step is done and no check has failed. A closed migration cannot be reopened; its record stays.

NameRequiredDescriptionDefault
planIdYes
confirmedNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that the call writes no domain row and posts nothing (only stamps the plan), is idempotent, refuses with the first named blocker, and — critically — that a closed migration cannot be reopened. That last point is what makes destructiveHint=true legible to an agent rather than a bare flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Preconditions and consequences are front-loaded and the prose is dense and informative. The trailing 'CONSEQUENCE:' sentence largely restates the opening claim about closing a finished migration, which is the one redundant stretch.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation with no output schema, it covers state machine, preconditions, irreversibility, idempotency, and side-effect footprint. The gap is parameter-level: two required identifiers are undocumented anywhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It implies the `confirmed` boolean ('needs a confirmation') and idempotency semantics for `idempotencyKey`, but says nothing about workspaceId or planId (e.g. whether they are IDs, slugs, or resolvable names).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Close a finished Datenübernahme') plus the exact state transition (live → closed) and disambiguates the resulting state from anything reachable elsewhere. An agent can distinguish this from migration_abandon_plan or migration_commit_step without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit legality gates: only from live, only once all steps are terminal, only when no G11 control is failed, and notes it requires human confirmation and is denylisted from automation. It does not name the alternative tool (e.g. abandon) that applies when those preconditions fail, so routing is implied rather than complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_commit_stepA
Idempotent

Commit a step into the live books, behind the six-condition gate (checked, no failed/not_asserted control, no unresolved conflict, an approval bound to the check hash for a money-path class, commit_migration held, and a G04 backup on record). A migrated document posts nothing: a money-path class establishes opening balances through A04's single entry. Idempotent: a double-commit posts once. CONSEQUENCE: Moves this step's migrated data into your live books. You can roll the step back later; that books correcting entries, and the commit stays on record.

NameRequiredDescriptionDefault
planIdYes
stepIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint annotation by disclosing the gate semantics, the money-path peculiarity (opening balances established through A04 rather than a document post), and the rollback contract (rollback books correcting entries and the commit stays on record). The consequence is called out explicitly and front-loaded. Nothing in the text contradicts destructiveHint=false: data is moved, not deleted, and reversal is documented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and scope, then the gate conditions, then a labeled CONSEQUENCE block. Dense but every clause carries operational meaning. The parenthetical gate enumeration is long but is the core safety information, so it earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and only hint-level annotations, the description covers the important unknowns: preconditions, idempotency, and the reversibility/consequence profile. Remaining gaps are the parameter meanings and any signal about failure behavior or return payload when the gate rejects the call, but the operational picture is otherwise complete for a high-stakes commit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description explains none of the four required parameters (workspaceId, planId, stepId, idempotencyKey). It only indirectly gestures at stepId ('this step') and idempotencyKey ('a double-commit posts once'), leaving planId and workspaceId entirely undefined. With no schema-level documentation, this is a real gap the description should have filled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with its exact scope: 'Commit a step into the live books.' It is clearly distinguished from adjacent migration siblings (trial load, preview, rollback) by naming what it does (posts migrated data live) versus what it does not (a migrated document posts nothing; rollback books correcting entries). An agent can tell this apart from migration_trial_load_step or migration_rollback_step without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description spells out the precondition set for invocation in concrete terms (checked, no failed/not_asserted control, no unresolved conflict, hash-bound approval for money-path classes, commit_migration held, G04 backup on record). This tells the agent when it is legal to call. It stops short of naming the sibling tools to run first (e.g. migration_check_step, migration_record_approval) or stating what to do when the gate fails, so it is clear context without explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_create_planB
Idempotent

Create a Datenübernahme plan for a source system as at an Übernahmestichtag. A FUTURE Stichtag is accepted: the plan is prepared ahead of its date (scope, map, trial load, check), the plan view carries cutoverPending, and only migration_commit_step and go_productive refuse cutover_in_future until the date arrives. The plan is a scoped, resumable, auditable object, not an import.

NameRequiredDescriptionDefault
localePackNo
cutoverDateYes
workspaceIdYes
sourceSystemYes
idempotencyKeyYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint, and the description adds substantial context beyond them: the plan is scoped, resumable and auditable, it carries a cutoverPending state, and the future-date refusal is deferred to two named downstream tools. It stops short of covering permissions or the role of idempotencyKey in retries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences with no filler; the core create action and the future-date caveat come first, and the 'not an import' clarification is a useful closing distinction. Sentence two is long and packed with domain vocabulary, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutable, idempotent 5-parameter tool with no output schema, the description covers the main trap (future cutover dates) but not what is returned (a plan id or handle to resume from) nor the semantics of most parameters, leaving gaps an agent would hit on first invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description carries the full burden, yet it only adds meaning for cutoverDate (future dates accepted, yielding cutoverPending) and gestures at sourceSystem. workspaceId, localePack, and especially idempotencyKey — which matters given idempotentHint=true — are left completely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: creating a migration (Datenübernahme) plan for a source system relative to a cutover date, and explicitly contrasts the plan object with 'an import'. The German domain terms and the missing pointer to the read-side siblings (migration_get_plan, migration_list_plans) keep it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clarifies one important usage condition — that a future Stichtag is allowed here and that only migration_commit_step and go_productive will refuse it — which is implied guidance on sequencing. But it never says when to call this versus migration_discover_source, migration_list_source_adapters, or migration_list_plans, so selection among siblings still requires inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_create_testmandantA
Idempotent

Provision the Testmandant for a plan: a disposable trial workspace (workspace.kind = sandbox) that behaves identically to a real one, composed from A00 create_workspace and linked to the plan so every migration_trial_load_step targets it. Idempotent per plan: a second call returns the existing Testmandant, never a second workspace; a plan already live refuses with plan_already_live. The user-facing word is Testmandant, never "Sandbox".

NameRequiredDescriptionDefault
planIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, and the description usefully operationalizes that: a second call returns the existing Testmandant rather than creating a second workspace, and the operation is scoped per plan. It also discloses the plan_already_live rejection, which annotations cannot express. It stops short of saying what is returned or whether the sandbox is later destroyed by another tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the definition before the idempotency and error semantics, and no filler. The closing terminology rule (use 'Testmandant', never 'Sandbox') is slightly left-field but is a real output convention that affects agent-produced text, so it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating provisioning tool with no output schema and no parameter descriptions, the definition covers the create/idempotency/error surface well but leaves the agent guessing at input semantics and the shape of the returned Testmandant. Adequate to call correctly only if the agent can infer the parameters from names alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three required parameters, so the description carries the full burden and does not meet it. 'Linked to the plan' loosely maps to planId and 'idempotent per plan' hints at idempotencyKey, but workspaceId is never explained — it is genuinely ambiguous whether it is the parent workspace or the new sandbox — and no format or constraint is given for any parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (provision the Testmandant), defines what that resource actually is (a disposable trial workspace with workspace.kind = sandbox), and names the upstream primitive it is composed from (create_workspace). An agent can distinguish it from discard_testmandant, get_testmandant, and create_demo_workspace without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit preconditions and the failure mode ('a plan already live refuses with plan_already_live') and explains the downstream consumer (every migration_trial_load_step targets it), which tells the agent where this fits in the migration flow. It does not name the sibling to use for cleanup or for reading an existing Testmandant, so the when-not guidance is only partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_declare_control_totalB
Idempotent

Declare an expectation for one Eröffnungsprüfung control: the figure the old system said (a per-account trial-balance total, the open AR or AP total, the VAT position at the Übernahmestichtag), in integer Rappen against a scope (an account number, an IBAN, or workspace). A control nobody declared reports "nicht geprüft" and never green; declaring reopens the control until the next check.

NameRequiredDescriptionDefault
kindYes
scopeYes
planIdYes
stepIdNo
workspaceIdYes
declaredMinorYes
idempotencyKeyYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations: declaring reopens the control until the next check, and undeclared controls never turn green. This is important state-effect information. It does not cover permissions, failure modes, or what happens on repeated calls beyond the idempotentHint annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the core action. The parenthetical examples and second sentence carry useful information, though the first sentence is dense and the parameter coverage gaps make some brevity costly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a migration-control declaration with 7 parameters, no output schema, and only partial annotations, the description gives enough to understand the central action and its state effect. It remains incomplete on several required parameters and on alternatives or prerequisites, which an agent may need in order to invoke it reliably.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage across 7 parameters, the description must compensate but only partially does. It explains declaredMinor as integer Rappen and scope as an account number, IBAN, or workspace, but leaves planId, kind, stepId, workspaceId, and idempotencyKey unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: declaring an expectation for one Eröffnungsprüfung control total. It gives concrete examples of what a control total can be (per-account trial balance, open AR/AP, VAT position), making the purpose clear, but it does not explicitly distinguish this action from sibling migration controls such as check or waive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the explanation that undeclared controls stay 'nicht geprüft' and declaring reopens a control until the next check. However, there is no explicit guidance on when to use this instead of migration_waive_control, migration_check_step, or other migration tools, and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_diff_testmandant_to_liveA
Read-only

What differs between the Testmandant and an existing live workspace of the same UID, per data class: the row counts on each side, so the choice between going productive and running against the live workspace is informed. No live workspace of this UID returns {live:null}. This read touches TWO tenants and demands membership of EACH (forbidden otherwise): it is the migration family's one deliberate two-workspace read. It never merges.

NameRequiredDescriptionDefault
planIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses that the read touches two tenants and requires membership in each, that a missing live workspace returns {live:null}, and that the operation never merges anything. These are meaningful behavioral details 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

All four sentences earn their place: main output, null edge case, cross-tenant authorization behavior, and non-mutation guarantee. The most important semantic is front-loaded, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The behavior is richly described, but the tool cannot be correctly invoked from this description alone because neither required parameter is semantically defined. There is also no output schema, and the return shape is only described conceptually as row counts per data class.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it never explains the two required parameters, workspaceId and planId. It references 'same UID' and 'Testmandant' without mapping them to the actual parameters, and planId is entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool computes: differences in row counts per data class between the Testmandant and a live workspace of the same UID. It also differentiates this tool from other migration-family tools by calling it 'the migration family's one deliberate two-workspace read.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: it informs the choice between going productive and running against the live workspace. It also implicitly excludes other migration tools by emphasizing this is the only deliberate two-workspace read, but it does not explicitly name alternatives or list when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_discover_sourceA
Read-only

Classify uploaded source files for a Datenübernahme: per file the detected adapter, the data classes it can produce, a row count, a header sample, a confidence and the file's own as-of date (asAt) where the format carries one. Pass override to FORCE a format when auto-detection got it wrong: override.adapter pins a registered adapter id, override.encoding re-decodes (utf-8, latin1, windows-1252) and override.delimiter re-splits (comma, semicolon, tab). Reads blobs back through E00 and writes zero rows to any ledger.

NameRequiredDescriptionDefault
planIdNo
fileIdsYes
overrideNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, and the description adds critical behavioral information not covered by annotations: it reads blobs through E00 and writes zero rows to any ledger. This reassures that the operation is safe for the system state, complementing the read-only annotation. There is no contradiction; the description explains the side-effect-free nature of the classification process.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with a single paragraph that front-loads the core purpose and outputs, then explains the override mechanism and ends with side-effect notes. Every sentence adds value, but the structure could be improved by separating the override details into a list. Overall, it's efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (nested objects, multiple files, overrides) and the absence of an output schema, the description covers most essential aspects: what it does, what it returns per file, how to correct errors, and side effects. The main gap is the lack of explanation for 'planId' and the exact return format beyond mentions. But it's reasonably complete 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. The description explains 'override' in detail (pinning adapter, re-decoding with specific encodings, re-splitting with delimiters) and mentions 'fileIds' and 'workspaceId' indirectly ('uploaded source files'). However, 'planId' is not mentioned, nor are the exact formats of the parameters. The description adds value for 'override' but leaves 'planId' unexplained, which is a gap given low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: classifying uploaded source files for a Datenübernahme, with specific outputs (detected adapter, data classes, row count, etc.). The verb 'classify' and the resource 'uploaded source files' are specific and distinguish it from other migration tools like migration_rollback_step or migration_readiness. Although sibling tools are numerous, this one's purpose is unique among the migration family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool: for classifying source files during a Datenübernahme, and it describes the override parameter as a corrective action when auto-detection fails. It doesn't explicitly state when not to use it or name alternatives, but the migration sibling tools like migration_list_source_adapters or migration_preview_step suggest alternative purposes. The context is clear enough for an agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_export_checkA
Read-only

Export the Prüfbericht for one check: every control with its declared and computed figures, its status, every waiver and its reason, the source files with their sha256 and as-of date, and the check hash, as a locale-neutral artifact (raw integer Rappen, ISO dates) a Treuhänder can file. It joins the A25 filing export set rather than becoming a second export mechanism.

NameRequiredDescriptionDefault
formatNo
checkIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the exact output composition: controls with declared/computed figures, status, waivers with reasons, source files with sha256 and as-of date, and check hash. It also specifies the locale-neutral format (raw integer Rappen, ISO dates). This goes well beyond the readOnlyHint annotation, explaining the artifact's nature and purpose for filing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence that front-loads the core purpose ('Export the Prüfbericht for one check') before listing details. It is efficient, though slightly long; every phrase adds value by specifying content and format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully explains what the output contains and its purpose, which is helpful given no output schema. However, it omits parameter semantics, potential errors, prerequisites (e.g., check must exist), and any rate limits or size constraints. The complexity is moderate, but the missing parameter details leave an agent uncertain about how to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for parameter meanings, but it does not mention any of the three parameters (format, checkId, workspaceId). checkId and workspaceId are somewhat inferable, but 'format' is entirely unexplained. The description offers no guidance on parameter values or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exports a specific report (Prüfbericht) for a single check, enumerating its contents (controls, waivers, source files, check hash). It distinguishes itself from sibling tools like migration_get_check (which presumably retrieves check data) and other export tools by framing it as a filing artifact that joins the A25 export set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: when a locale-neutral, filable export of a check's audit report is needed for A25 filing. It explicitly says it 'joins the A25 filing export set rather than becoming a second export mechanism,' providing contextual differentiation from other exports. However, it doesn't mention when not to use it or alternative tools like migration_get_check for simple retrieval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_get_checkA
Read-only

Read one persisted Eröffnungsprüfung: every control with its declared and computed figures in Rappen, its status (passed, failed, not_asserted, not_computable, waived), and every waiver with its recorded reason. The snapshot is append-only: this is the record an approval was bound to.

NameRequiredDescriptionDefault
checkIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond the readOnlyHint annotation: it specifies that the snapshot is append-only and that it represents the record an approval was bound to. This tells the agent the data is immutable and historical, which is not evident from the annotation alone. It does not contradict the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, but each packs essential information. The first sentence lists the expected contents, and the second adds the append-only nature and purpose. It is front-loaded with the core action and resource, making it easy to scan. No redundant words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (it returns a detailed snapshot with multiple fields) and the lack of an output schema, the description provides a good overview of what to expect. It mentions all key elements: controls, figures, statuses, waivers, and reasons. However, it does not mention potential pagination, error conditions, or why a check might not be found, which could be relevant. But for a read operation with a clear purpose, it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and there are only two parameters: workspaceId and checkId. The description mentions the check but not the workspace, so it does not add semantic detail for the parameters. However, the parameter names are self-explanatory: workspaceId likely identifies the workspace, and checkId identifies the check. The description's mention of 'one persisted Eröffnungsprüfung' implies checkId is the primary identifier, but it does not add beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a persisted Eröffnungsprüfung and lists the exact contents: controls with declared/computed figures in Rappen, statuses, and waivers with reasons. It distinguishes itself from sibling tools like migration_check_step and migration_list_checks by focusing on reading a single check with full detail. The verb 'Read' and the specific resource 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for retrieving a persisted check, likely after approval or for audit. It mentions 'append-only' and 'the record an approval was bound to,' suggesting it is used for historical reference. However, it does not explicitly state when to use this vs. migration_check_step or migration_list_checks, nor any conditions for when not to use it. The context is clear enough for an agent to infer typical usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_get_extraction_guideA
Read-only

Read one extraction guide for a source system: every item with what to export, where it lives, the expected formats, the data classes it feeds, quirks and its tactic-ladder rung (1 native export, 2 report-based, 3/4 browser companion (gated), 5 the Datenherausgabe letter). An unknown source system returns the generic guide with fellBack:true; pass strict:true to require an exact match. Includes the deletion clock and the letter template. Describes the software, not any workspace.

NameRequiredDescriptionDefault
strictNo
sourceSystemNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals a safe read operation, and the description adds meaningful behavioral context: fallback to a generic guide with fellBack:true, strict matching behavior, and the inclusion of the deletion clock and letter template. This goes beyond the annotation by explaining edge-case behavior and return semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured: it front-loads the core purpose, then details contents, fallback behavior, strict mode, and scope clarification. Every sentence adds information; there is no filler or repetition of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description covers the key behaviors an agent needs: what the guide contains, fallback behavior, strict matching, and scope. It doesn't describe the exact return structure, but the description's enumeration of contents (formats, data classes, quirks, tactic-ladder rung, deletion clock, letter template) gives sufficient context 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It explains sourceSystem (identifies the source system, unknown values fall back to generic guide) and strict (requires exact match). This is meaningful semantic context beyond the bare schema types. It doesn't explicitly name the parameters, but the behavior described maps clearly to them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('one extraction guide for a source system'), and enumerates the guide's contents (what to export, where it lives, expected formats, data classes, quirks, tactic-ladder rung). It also distinguishes itself from the sibling migration_list_extraction_guides by focusing on reading a single guide rather than listing guides.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains the fallback behavior for unknown source systems, the strict parameter to require an exact match, and what the guide includes (deletion clock, letter template). It also clarifies the tool describes the software, not any workspace, which helps an agent decide when to use it. While it doesn't name an alternative tool explicitly, the sibling list includes migration_list_extraction_guides, and the description's focus on 'one extraction guide' versus listing guides provides clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_get_manifestA
Read-only

Read a plan export manifest: its items with status, counts and evidence, the completeness (open count over the denominator, not_used excluded) and the deletion clock as a date with the days remaining. Accepts a saved view (savedViewId) over the checklist items ("Offene Exporte", "Blockiert"); an explicit status wins over the stored one. Completeness and the deadline are computed over the whole manifest, never the filtered view. A plan with no manifest returns manifest:null so the surface can offer to create one.

NameRequiredDescriptionDefault
planIdYes
statusNo
savedViewIdNo
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is transparent about the read-only nature (consistent with readOnlyHint=true) and discloses key behaviors: the effect of filtering on computed metrics, the precedence of explicit status, and the null return when no manifest exists. This adds significant context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and information-dense, with each sentence serving a purpose: purpose statement, parameter behavior, computation scope, and edge case handling. It is well-structured and front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential aspects: what it returns, how parameters affect output, and a notable edge case. It does not explicitly mention that planId and workspaceId are required (though the schema does), and it omits potential error scenarios beyond the null manifest. Given the absence of an output schema, it adequately informs an agent of the tool's behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description compensates by explaining savedViewId and status in detail, including their roles and precedence. It does not explicitly describe planId and workspaceId, but these are standard identifiers and likely self-explanatory in context. Overall, it adds meaningful value over the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Read a plan export manifest' and elaborates on the specific data returned (items, status, counts, completeness, deletion clock). It distinguishes this from siblings like migration_get_plan or migration_set_manifest by focusing on the manifest read operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete usage guidance on how savedViewId and status interact ('an explicit status wins over the stored one') and clarifies that completeness and deadline are computed over the whole manifest, not the filtered view. It does not explicitly contrast with alternative tools, but the parameter behavior is well explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_get_mapA
Read-only

Read a plan's map and its completeness: blocking unmapped accounts (non-zero balance), ignorable ones (zero balance), many-to-one collapses and template conflicts. complete:true is what lets the Datenübernahme step advance.

NameRequiredDescriptionDefault
kindYes
planIdYes
workspaceIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces that with 'Read' rather than contradicting it. It adds meaningful behavioral detail beyond the annotation by describing what the result contains and how 'complete:true' gates the next migration step.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the action and resource, and the second adds the key gating consequence. The only minor issue is the untranslated 'Datenübernahme' jargon, which may obscure the meaning for an agent not familiar with the migration domain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With three required parameters, 0% schema description coverage, and no output schema, the description is not complete enough for an agent to reliably call the tool. It explains what the map contains, but leaves 'kind' and workspace/plan identifier semantics undefined and does not describe the response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the bare parameters workspaceId, planId, and kind. It never explains kind, workspaceId, or how to identify the plan beyond the phrase 'a plan's map', leaving required parameter semantics essentially undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('a plan's map'), and enumerates the meaningful output categories: blocking unmapped accounts, ignorable accounts, many-to-one collapses, template conflicts, and the completeness flag. It does not explicitly contrast itself with siblings like migration_get_plan or migration_get_check, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: the tool is for checking a plan's map and its completeness, and the 'complete:true' flag is what lets the Datenübernahme step advance. This implies when to call it, but it does not state exclusions or name alternatives such as migration_suggest_map or migration_set_map.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_get_planA
Read-only

Read a plan, every step with its state, the six-phase journey and nextAction, the resume answer and the plan surface's single primary action. Accepts a saved view (savedViewId) over the step list; an explicit dataClass/state filter wins over the stored one. Resume is a read and never a re-run of prior steps.

NameRequiredDescriptionDefault
stateNo
planIdYes
dataClassNo
savedViewIdNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint=true, and the description reinforces this by explicitly stating 'Resume is a read and never a re-run of prior steps.' This adds critical context beyond the annotation, clarifying a potential misunderstanding about the 'resume' concept. The description also discloses the filter-priority behavior (explicit filter wins over saved view), which is behavioral context not in the schema. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph covering all key points: what is read, the savedViewId behavior, filter override, and the resume caveat. It is front-loaded with the main purpose. Slightly verbose in listing the six-phase journey and nextAction, but each item adds clarity. No unnecessary fluff, though it could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool reads a complex plan with many components, the description covers the main return elements and key behaviors (savedViewId, filter override, resume semantics). There is no output schema, so the description carries full weight for return values; it lists the key items. It could mention whether the response includes step-level details like status codes or error handling, but for a read tool, this is adequate. It also doesn't discuss pagination or large plan handling, but that's minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. The description clarifies the semantics of savedViewId (filter over the step list) and mentions dataClass/state as filters, but it doesn't detail the exact format or meaning of each parameter. For required workspaceId and planId, it's clear they identify the plan. However, it omits how state and dataClass values should be formatted or what they represent beyond being filters. With five parameters and zero schema help, this is a moderate gap, but the description does add value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a migration plan and lists the specific components it returns (steps, six-phase journey, nextAction, resume answer, primary action). It distinguishes itself from sibling tools like migration_list_plans and migration_check_step by focusing on a single plan's full detail. The verb 'Read a plan' is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the read-only tool for a single plan, and contrasts with migration_list_plans (listing) and migration_rollback_step (acting). It explains the savedViewId behavior and the filter override rule, giving clear context. However, it doesn't explicitly state when to use an alternative like migration_get_check or migration_readiness, though sibling names suggest those are for checks and readiness.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_get_testmandantA
Read-only

Read the Testmandant for a plan: its workspace id, its kind (demo|sandbox|live), the steps trial-loaded into it, and the plan's last Eröffnungsprüfung id. A plan with no Testmandant returns {none:true}.

NameRequiredDescriptionDefault
planIdYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation is present, and the description adds meaningful behavior beyond it: it states the return fields, the allowed kind values, and the {none:true} sentinel when no Testmandant exists. This gives the agent concrete expectations without contradicting the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler: the read action is front-loaded, the return contents are compactly enumerated, and the edge case is stated at the end. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with a simple two-string schema, the description covers the return shape and the no-testmandant case well. The main gap is the lack of explicit parameter meaning, which keeps it just short of fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not define either input parameter. 'For a plan' hints at planId, but workspaceId is never explained, leaving required-string parameter semantics mostly to guessing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb ('Read'), identifies the resource ('Testmandant for a plan'), and enumerates the exact fields returned, including the edge case. This clearly distinguishes it from sibling operations like migration_create_testmandant, migration_diff_testmandant_to_live, and discard_testmandant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It is clear this is the read-only retrieval tool for a plan's Testmandant, and the context is fairly obvious. However, there is no explicit guidance about when to choose it over related siblings or when not to use it; usage is implied rather than directly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_list_checksA
Read-only

List a plan's Eröffnungsprüfungen, newest first, optionally for one step or one run kind (testmandant or live). Accepts a saved view (savedViewId) over the check history; an explicit stepId/against filter wins over the stored one.

NameRequiredDescriptionDefault
planIdYes
stepIdNo
againstNo
savedViewIdNo
workspaceIdYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint: true, and the description adds ordering (newest first) and filter precedence (explicit stepId/against wins over saved view). These are useful but modest additions. It does not disclose pagination, response format, or any edge cases, though for a read-only list tool this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no redundancy. The core action is front-loaded, followed by essential filtering and precedence rules. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main aspects: what is listed, ordering, optional filters, saved view interaction, and precedence. Given it is a read-only list tool with no output schema, it is sufficiently complete for an agent to invoke correctly. Minor gaps like pagination behavior are not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the full burden. It clarifies stepId, against (run kind: testmandant or live), and savedViewId, including precedence. workspaceId and planId are left to inference but are standard and obvious from the tool name. The description compensates well for the missing schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists a plan's Eröffnungsprüfungen (opening checks) newest first, with optional filters. The verb+resource is specific and unambiguous, though it doesn't explicitly differentiate from sibling tools like migration_get_check (which fetches a single check) or migration_readiness. The German term may be opaque but is domain-specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains optional filtering by step or run kind, and the saved view precedence, giving context for when to use these options. However, it does not explicitly state when not to use this tool or name alternatives, leaving the agent to infer from the tool name and sibling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_list_extraction_guidesA
Read-only

List the extraction guides TILL ships (one per source system, generic and bexio first), each with its label, item count and whether a browser companion has cleared its gates (hasCompanion). Describes the software, not any workspace.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavioral context: it lists per source system, orders 'generic and bexio first', and includes a boolean indicating whether a browser companion has cleared its gates. It does not, however, describe the full return format or any potential edge cases (e.g., what happens if no guides exist), but this is a minor gap given the simple read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the verb and resource, immediately provides the ordering rule, then lists the returned fieldsamerican. The final scoping sentence ('Describes the software, not any workspace') is a valuable clarification that prevents confusion with workspace-scoped list tools. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with no parameters and no output schema, the description covers the essentials: what is listed, the ordering, the fields returned, and the scope. It does not mention pagination or a maximum result count, but given the nature of 'extraction guides' (likely a limited set), this is not a critical gap. Overall, the information provided is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters)Skip, so the schema already fully documents all inputs. With 100% schema coverage and no parameters, the description has no obligation to explain parameters. The baseline for 0 parameters is 4, and the description adds no confusing parameter-related information, so a 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List'), the resource ('extraction guides'), and key output details (label, item count, hasCompanion). It also scopes itself ('Describes the software, not any workspace'). While it does not explicitly name sibling alternatives, the level of specificity is high enough for an agent to distinguish it from migration_get_extraction_guide or other migration tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given about when to use this tool versus alternatives. There is no mention of prerequisites, context (e.g., before a migration), or exclusions. The only implicit cue is the name and the mention of 'extraction guides' in the migration domain, which suggests a read-only listing operation but leaves the agent to infer the appropriate triggering conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_list_locale_packsA
Read-only

List the registered locale packs (target chart, tax-code set, parse conventions, statutory anchors). Switzerland (ch) always ships. Describes the software, not any workspace.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes that this is a safe read, and the description adds context beyond the annotation: it guarantees Switzerland always appears in results, clarifies that no workspace context is involved, and reveals the conceptual contents of a locale pack. This usefully shapes agent expectations about the response despite the absence of an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler. The purpose is front-loaded, followed by a factual guarantee (Switzerland always ships) and a scope boundary, each sentence earning its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only listing with no output schema, the description covers purpose, result composition, guaranteed entries, and scope. The only notable omission is the exact return format, but the enumerated locale-pack components largely compensate by implying what the response will contain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4 and there is nothing for the description to document. The empty schema already fully covers parameter semantics, and the description correctly implies a parameterless call by stating only what the tool does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb and resource ('List the registered locale packs') and defines the resource by enumerating its components (target chart, tax-code set, parse conventions, statutory anchors). The closing scope clause ('Describes the software, not any workspace') helps differentiate it from workspace-scoped migration siblings, though no sibling is explicitly named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'not any workspace' clause gives an implicit exclusion, signaling this tool reports software-level facts rather than workspace state. However, there is no explicit when-to-use guidance, no named alternative, and no context such as 'call before starting a migration' to help an agent choose it over related migration listing tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_list_map_templatesA
Read-only

List this operator's Zuordnungsvorlagen, optionally filtered by source system or map kind. Accepts a saved view (savedViewId) over the template list; an explicit filter wins over the stored one.

NameRequiredDescriptionDefault
kindNo
savedViewIdNo
workspaceIdYes
sourceSystemNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description is consistent with that. It adds useful behavioral detail beyond annotations by explaining that a saved view can be applied and that an explicit filter takes precedence over the stored view.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two focused sentences with no wasted words. The primary action and filters are front-loaded, followed by the saved-view precedence caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool, the description covers the core operation, filters, and saved-view behavior, but gaps remain: workspaceId is not explained, kind values are unspecified, and there is no mention of result shape or pagination. Since the schema has no property descriptions, the description needed to compensate more than it does.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to sourceSystem, kind, and savedViewId by mapping them to filters and a saved view, which matters given 0% schema coverage. However, workspaceId, the only required parameter, is not explained beyond its name, and allowed values for kind are not described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear operation, listing the operator's mapping templates, with optional filters by source system or map kind. The resource is specific enough to distinguish it from sibling tools like migration_apply_map_template and migration_save_map_template, though it does not explicitly name a sibling. Use of the German term 'Zuordnungsvorlagen' adds mild ambiguity but the intent is still recognizable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is used to list templates and that saved views can refine the listing, which gives some usage context. It does not explicitly state when to prefer this over related migration mapping tools or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_list_plansA
Read-only

List this workspace's Datenübernahme plans, optionally by status. Accepts a saved view (savedViewId) over the roster; an explicit status wins over the stored one. Workspace-scoped like every other read: the cross-client Treuhänder roster composes N of these over A23's memberships and is NOT a read that reaches across the tenant fence.

NameRequiredDescriptionDefault
statusNo
savedViewIdNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'List' and 'read'. It adds meaningful context beyond the annotation by clarifying the workspace scope and the saved-view precedence behavior. It does not discuss rate limits, auth, or side effects, but the readOnlyHint covers safety and the added scope details are valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably compact with a clear front-loaded purpose, but the third sentence introduces domain-specific jargon (Datenübernahme, Treuhänder, A23, tenant fence) that is dense and potentially confusing to an agent without migration-specific context. It is not fully concise and may distract from the core usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and zero schema description coverage, the description is the primary source. It explains the key parameters and workspace scope, but it does not mention allowed status values, pagination, return format, or what constitutes a saved view. These are notable gaps for a list operation, especially without an output schema to compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for parameter semantics. It explains status (optional filter), savedViewId (saved view over the roster), and workspaceId (workspace scope, implied by 'this workspace's'). It also adds a precedence rule: explicit status wins over the saved view's stored status. This goes beyond the bare schema and provides actionable guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists this workspace's migration plans, optionally filtered by status. It also distinguishes itself from cross-tenant aggregations by explicitly stating it is workspace-scoped and not a read that crosses the tenant fence, which separates it from potential sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is a per-workspace read and not a cross-tenant operation. It implies when to use it (listing plans in one workspace) and when not (when you need a composite cross-client view), but it does not explicitly name an alternative tool. The guidance is clear but lacks an explicit exclusionary pointer to a specific sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_list_source_adaptersA
Read-only

List the source formats TILL can read for a Datenübernahme, each with the published documentation it was written from (cleanRoomSource). Describes the software, not any workspace.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds context about the output contents ('each with the published documentation it was written from') and clarifies that it pertains to software, not a workspace. This goes beyond the annotation but does not disclose other behavioral aspects like return format, pagination, or error conditions. Given the simple nature of the tool, the added context is sufficient for a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences with no filler. The core action and resource are front-loaded, and the second sentence adds a clarifying scope note. Every word earns its place, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list operation with no output schema, the description adequately conveys what the tool returns (source formats with their documentation) and its non-workspace scope. It does not describe pagination or limits, but these are unlikely to be critical for a simple enumeration. The information provided is 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description is not required to explain any. The schema is empty and there is nothing to add beyond the tool's purpose. The baseline for zero-parameter tools is 4, and the description meets that expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a clear resource ('source formats TILL can read for a Datenübernahme'). It also adds a clarifying detail about the scope ('Describes the software, not any workspace'), which helps distinguish it from workspace-specific tools. However, it does not explicitly name sibling tools, so it misses the highest differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, typical use cases, or conditions that would select this over related migration tools like migration_discover_source or migration_create_plan. The only implied usage is that it is a listing operation, but no explicit context is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_preview_stepA
Read-only

Dry-run a step: classify every source row willCreate, willSkip (an exact match on the class match key) or willConflict (a match with differing fields), with a sample and any row errors. Writes NOTHING anywhere; an unresolved conflict blocks the commit.

NameRequiredDescriptionDefault
planIdYes
stepIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'Writes NOTHING anywhere', which is consistent. It also adds the behavioral consequence that an unresolved conflict blocks the commit, which is not in the annotations and is valuable context. It does not describe return format or edge cases, but for a read-only dry-run with annotations covering safety, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. It front-loads the core action ('Dry-run a step'), explains the classifications, and then states the key safety guarantee and consequence. Every sentence contributes value, and it is well-structured for quick parsing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a dry-run tool with no output schema, the description covers the essential aspects: what it does, what it returns (sample and row errors), and the impact on commit. It does not describe preconditions (e.g., step must exist) or how to interpret the classifications, but given the tool's simplicity and the presence of readOnlyHint, it is fairly complete. A missing element is any note about the need to run this before commit, which is implied by the conflict-blocking statement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has three required parameters (workspaceId, planId, stepId) with no descriptions (coverage 0%). The tool description does not explain the meaning of these parameters or how they relate to each other, nor does it provide context on how to obtain them. While the names are intuitive, the lack of any elaboration means the agent must rely on naming conventions alone, which is insufficient for 0% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: a dry-run that classifies each source row into willCreate, willSkip, or willConflict, and returns a sample and row errors. It also explicitly notes that it writes nothing, distinguishing it from commit-style operations. The purpose is unambiguous and specific, and it stands apart from sibling migration tools like migration_commit_step or migration_trial_load_step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: before committing a migration step, as a preview to identify conflicts. It explicitly mentions that an unresolved conflict blocks the commit, signaling the need to run this and resolve conflicts first. It does not explicitly name alternatives, but the context is clear and the safety property (writes nothing) makes it the appropriate pre-commit check.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_readinessA
Read-only

Read the go-live checklist: every step with its state, the backup precondition, and for each open item the actor who must move it (du, ein Agent, das System). Ready means every included step is verified and no control is failed or not_asserted.

NameRequiredDescriptionDefault
planIdYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation indicates a safe read operation; the description adds value by specifying exactly what the tool returns (step states, backup precondition, actor assignment) and defines the 'ready' condition. This goes beyond the annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action, and efficiently conveys the checklist's content and the readiness criterion. No wasted words; every sentence contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool, it explains the output content and the readiness definition, but it omits any explanation of the parameters and does not mention potential edge cases (e.g., empty checklist, missing plan). The lack of parameter documentation is a notable gap, so completeness is only moderate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage for the two required parameters (workspaceId, planId). The description does not explain what these parameters represent or their format, forcing the agent to infer from context. Given low coverage, the description fails to compensate, leaving a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Read' and the resource 'go-live checklist', and elaborates on its contents (steps, states, backup precondition, actors). It is distinct from sibling migration tools which perform actions (rollback, abandon, check) rather than a read-only overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for checking readiness but does not explicitly state when to use this versus sibling tools like migration_get_check or migration_list_checks. It lacks explicit alternatives or exclusions, relying on inference from the sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_record_approvalA
Idempotent

Bind a human approval to a check result: a row for exactly (stepId, checkHash). Every return of the step to the mapped state voids it, so an agent cannot commit the import after a human approved a different result. CONSEQUENCE: Records your approval of this step's current check result, which lets the step be committed to your live books. The approval holds for this result only; a rollback voids it.

NameRequiredDescriptionDefault
planIdYes
stepIdYes
checkHashYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes meaningfully beyond the idempotentHint/destructiveHint annotations by disclosing the binding semantics: the approval is valid only for the exact (stepId, checkHash) pair, and any rollback of the step voids it, preventing an agent from committing after a human approved a different result. That is genuine behavioral context; it omits permission/auth requirements and the response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core binding rule, then consequence, then scope. Slightly redundant: the opening 'row for exactly (stepId, checkHash)' and the closing 'The approval holds for this result only' restate the same guarantee.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation-style approval tool with no output schema, the description covers intent and invalidation well but leaves out what a successful call returns, how idempotencyKey interacts with repeated calls, and whether a human actor must be present. Enough to avoid misuse, not enough for confident end-to-end use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 required params, so the description carries the burden. It explains checkHash and stepId as an exact pair, but says nothing about workspaceId, planId, or the idempotencyKey (despite the idempotentHint annotation), leaving three parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Bind a human approval to a check result: a row for exactly (stepId, checkHash).' This is far more precise than the name alone. It stops short of naming a sibling (e.g., migration_waive_control vs migration_check_step) to differentiate, relying on the indirect mention that commit is otherwise forbidden.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the tool is for recording approval of 'this step's current check result' so that the step 'can be committed.' There is no explicit when-not guidance (e.g., how it differs from migration_waive_control or when to call migration_check_step first) and no alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_rollback_stepA
Idempotent

Reverse a committed step through A02 reversing entries and archive master rows through their owning verbs. Never a delete: posted entries are append-only. The step returns to the mapped state and the approval is voided. When the opening reversal is refused (a locked period), the rollback refuses with that reason and the step stays committed. After any commit this verb requires commit_migration. CONSEQUENCE: Reverses what this migration step put into your live books with correcting entries and archives its records. The reversals stay on record; after a new check, you can commit the step again.

NameRequiredDescriptionDefault
planIdYes
stepIdYes
confirmedNo
workspaceIdYes
idempotencyKeyYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it explains that nothing is deleted, posted entries are append-only, correcting entries persist on record, the approval is voided, and a locked period causes a refusal rather than a partial rollback. The explicit 'CONSEQUENCE' framing is exactly the kind of disclosure a mutation tool needs. Minor loss for the unclear commit_migration relationship.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The behavioural core is front-loaded and useful, but the final 'CONSEQUENCE' block largely restates'correcting entries and archives its records' and 'the step returns to the mapped state' from earlier sentences. The locked-period sentence and the re-commit sentence are the only new content in the tail, so some trimming is warranted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description carries the reversal semantics well, but with five undocumented parameters and only a hint-level annotation set, an agent still lacks what it needs on inputs (notably 'confirmed') and on what the call returns. Adequate for behaviour, incomplete for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description names no parameters at all. Names like workspaceId/planId/stepId are inferable, but the optional 'confirmed' boolean — presumably a confirmation gate for a reversal on live books — is neither mentioned nor explained anywhere, leaving real semantic work undone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reverse a committed step') and names the mechanism (A02 reversing entries, archive master rows through their owning verbs), which clearly separates it from migration_commit_step and migration_check_step. The closing sentence 'this verb requires commit_migration' is ambiguous — it is unclear whether it means the step must have been committed first or that another call is needed afterward — which slightly muddies an otherwise precise purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete conditions: it applies after a commit, it refuses when the opening reversal hits a locked period and leaves the step committed, and the step can be re-committed after a new check. It never explicitly contrasts itself with migration_check_step, migration_preview_step or migration_abandon_plan, so the routing guidance is descriptive rather than exclusionary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_save_map_templateB
DestructiveIdempotent

Save a plan's finished maps as a Zuordnungsvorlage for this operator, reusable across client workspaces. Balances and every other client figure are stripped: a template carries only source labels, source account numbers and target ids.

NameRequiredDescriptionDefault
nameYes
kindsYes
planIdYes
workspaceIdYes
sourceSystemYes
idempotencyKeyYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, so the description is not required to explain those traits. It adds useful behavioral context by explaining that balances and all client figures are stripped, and that the template carries only source labels, source account numbers, and target ids.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no wasted text. The main purpose is front-loaded, and the stripping/contents explanation directly follows.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a save operation with six fully undocumented required parameters, no output schema, and a destructive annotation, the description leaves important calling details unspecified. It gives the high-level purpose and data-stripping behavior but does not explain parameter usage, prerequisites around plan completion, or side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across six required parameters, so the description should compensate but does not. It explains the conceptual content of the template but never clarifies the meanings or expected values of workspaceId, planId, name, sourceSystem, kinds, or idempotencyKey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: saving a plan's finished maps as a reusable template for this operator. It is clear what the tool creates, but it does not explicitly name sibling tools such as migration_apply_map_template or migration_list_map_templates to distinguish itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'finished maps' implies the tool should be used only after mapping is complete, and 'reusable across client workspaces' gives the intended context. However, there are no explicit when-to-use/when-not-to-use instructions or references to alternative tools like migration_set_map.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_set_manifestA
Idempotent

Instantiate the export-completeness manifest for a plan from its source-system guide, one item per guide row at status open. Idempotent on its key; an existing manifest is not reset (recorded statuses survive), only sourceAccessUntil is refreshed. sourceAccessUntil is the deletion-clock deadline, a contract fact to verify against your own terms.

NameRequiredDescriptionDefault
planIdYes
workspaceIdYes
idempotencyKeyYes
sourceAccessUntilNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the idempotentHint/destructiveHint annotations by spelling out the exact semantics: an existing manifest is not reset, recorded statuses survive, and only sourceAccessUntil is refreshed on re-invocation. It also explains that sourceAccessUntil is a deletion-clock deadline to verify against terms, which is contract-level context an agent could not get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler, and the primary action is front-loaded before the idempotency and deadline caveats. It is dense with domain jargon ('export-completeness manifest', 'source-system guide') that costs some first-read clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter, no-output-schema mutation tool, the description covers behavior and one key parameter well but omits where the guide and plan come from (the migration_list_extraction_guides / migration_create_plan siblings) and says nothing about what is returned or how failures surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It explains sourceAccessUntil in depth and implies idempotencyKey ('idempotent on its key'), but planId and workspaceId get no meaning at all, leaving half the parameter surface undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb and resource: 'Instantiate the export-completeness manifest for a plan from its source-system guide, one item per guide row at status open.' This clearly separates it from migration_set_manifest_item (single-item mutation) and migration_get_manifest (read), though it never names those siblings explicitly to route the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent must infer that this is called after a plan and extraction guide exist, and that per-item changes belong to migration_set_manifest_item. No explicit when-to-use, prerequisites, or alternative is stated; the idempotency note hints at re-invocation safety but doesn't define call conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_set_manifest_itemA
DestructiveIdempotent

Record one manifest item: status (open, exported, not_used, blocked), the E00 fileId(s), a row count, a date range and a note. A cross-workspace fileId refuses (H-TENANT); a date range whose end precedes its start refuses. Idempotent on its key. not_used drops the item from the completeness denominator.

NameRequiredDescriptionDefault
noteNo
dateToNo
itemIdYes
planIdYes
statusYes
fileIdsNo
dateFromNo
rowCountNo
workspaceIdYes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint; the description adds real value beyond them by naming two refusal conditions (H-TENANT cross-workspace fileId, end-before-start date range) and explaining that not_used affects the completeness denominator. It does not spell out that re-recording an item replaces prior values, which would explain the destructiveHint, but is otherwise informative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with what is recorded and followed by constraints. Every sentence adds information; the only cost is heavy domain jargon (E00, completeness denominator) that assumes an informed caller.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, no-output-schema write tool it documents the write behavior, refusal cases, idempotency and status semantics well, but omits the meaning/relationship of the core identifiers (workspaceId, planId, itemId) that an agent must supply correctly. Adequate but with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description must carry all param meaning, and it covers status values, fileIds as E00 fileIds, rowCount, the date range, note, and idempotencyKey implicitly ('idempotent on its key'). It leaves workspaceId, planId, and itemId entirely unexplained, so compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Record') and resource ('one manifest item'), then enumerates the payload fields including the status enum values. It is distinguishable from the sibling migration_set_manifest (whole manifest) and migration_get_manifest (read), though it never explicitly says 'in a migration plan'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the migration-manifest context and 'not_used drops the item from the completeness denominator' hint at when to pick that status, but there is no explicit when-to-use/when-not or comparison to migration_set_manifest or migration_set_map. No prerequisites or workflow placement are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_set_mapA
DestructiveIdempotent

Persist a migration map for a plan. Every target is validated against the live chart (A01) and tax codes (A05) before anything is written; one unknown target rejects the whole map, and overlapping tax validity windows are refused naming both.

NameRequiredDescriptionDefault
kindYes
planIdYes
entriesYes
ruleDefaultNo
workspaceIdYes
idempotencyKeyYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: targets are validated against live chart (A01) and tax codes (A05) before any write, one unknown target rejects the whole map (all-or-nothing), and overlapping tax validity windows are refused with both named. Annotations cover idempotent/destructive, so the remaining gap is that permissions and the idempotencyKey's replay semantics aren't described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the purpose front-loaded and the validation contract following immediately. Every clause carries information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the validation rules well, which is the hardest part. But with six parameters at 0% schema coverage and no output schema, the description should explain what kind, ruleDefault, entries, and idempotencyKey mean and what is returned on success. That omission makes it only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description leaves nearly every parameter unexplained. Only 'plan' (planId) and 'target' (entries) are gestured at; kind, ruleDefault, workspaceId, idempotencyKey, and the entries array shape are undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Persist a migration map for a plan'), which is clearly distinct from read-only siblings like migration_get_map and advisory ones like migration_suggest_map. It stops short of naming a sibling explicitly, so it doesn't fully earn a 5 on differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the atomic-validation semantics: the agent can infer this is the write step after previewing. However, it never says when to prefer this over migration_save_map_template or migration_apply_map_template, nor what prerequisites (e.g. plan must exist in a given state) apply.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_set_scopeA
Idempotent

Scope a plan per data class, one step per included class. Defaults come from discovery; a class outside first scope is returned in unavailable[] with its owning spec named, never silently absent. Excluding a class removes its step, so it can never import by accident.

NameRequiredDescriptionDefault
planIdYes
classesYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish idempotentHint=true and destructiveHint=false, and the description adds real behavioral context beyond that: classes outside the first scope appear in unavailable[] with their owning spec named, and excluding a class removes its step so it cannot import accidentally. That is meaningful disclosure about output shape and side effects, though it does not cover what happens to steps that were already committed or how re-invocation interacts with existing steps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences that front-load the core action and then explain the two non-obvious consequences (unavailable[] reporting and step removal). No filler, though the phrase 'owning spec named' is slightly jargon-heavy for an agent without context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter migration mutation with no output schema, the description covers the key behavior and the notable edge case, but omits prerequisites (does the plan need to exist in a particular state?), the effect on already-executed steps, and any sense of what the call returns on success. Adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does add real meaning to the pivotal 'classes' parameter (included vs excluded, one step per class, out-of-scope classes routed to unavailable[]). However planId, workspaceId, and idempotencyKey receive no treatment at all, so compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Scope a plan per data class, one step per included class') and explains the resulting structure, which is far more informative than the bare tool name. It does not explicitly contrast itself with nearby siblings such as migration_set_map or migration_preview_step, so sibling differentiation is left to the reader.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Defaults come from discovery' hints that migration_discover_source is a prerequisite, but the guidance is implicit rather than stated as a condition. There is no explicit statement of when to call this versus migration_set_map, migration_create_plan, or migration_preview_step, and no mention of plan state requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_suggest_mapA
Read-only

Propose a migration map (column, account, tax or currency) for a plan, naming which source produced it (adapter preset, locale pack, saved template or fuzzy match). Writes nothing: the caller always confirms via migration_set_map.

NameRequiredDescriptionDefault
kindYes
planIdYes
headersNo
dataClassNo
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description aligns with the readOnlyHint annotation by saying 'Writes nothing', and adds context about the proposal nature and the confirmation step. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The core purpose and the critical 'writes nothing' behavior are front-loaded, making it immediately actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a proposal tool with no output schema and only three required parameters, the description provides the essential workflow but leaves the semantics of headers and dataClass unexplained. Given the parameter coverage gap, it is not fully complete for an agent to call it correctly without additional inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only touches on 'kind' (via the map types) and 'plan' (implicitly planId). The parameters headers, dataClass, and workspaceId are not explained. Since there is zero coverage, the description should compensate but does not fully explain the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb 'propose' with a clear resource 'migration map', and enumerates the map types (column, account, tax, currency) and sources. It clearly distinguishes itself from the sibling migration_set_map by noting it writes nothing, so an agent can tell it apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states the tool writes nothing and that the caller confirms via migration_set_map, which implies the proper workflow: use this to propose, then confirm with the setter. It doesn't name other alternatives like migration_discover_source, but the confirmation path is clearly indicated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_trial_load_stepA
Idempotent

Trial-load a step into the plan's Testmandant (G12), through the same code path the live commit uses, differing only in target workspace. Records the row-level outcomes and writes nothing to the live books. Idempotent on its key.

NameRequiredDescriptionDefault
planIdYes
stepIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds meaningful context: it targets the plan's Testmandant, uses the same code path as live commit, records row-level outcomes, and writes nothing to live books. It does not cover permissions or error behavior, but the core safety profile is well communicated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the action and target, and each sentence adds useful context. There is no redundant or filler language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a migration trial-load tool with no output schema, the description explains the core behavior and safety property but does not say what the tool returns or how row-level outcomes are surfaced. Combined with undocumented parameters, an agent has enough to attempt the call but not a complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It provides semantic hints for plan, step, target workspace, and an idempotency key, but it does not map these to the four named parameters or explain formats and constraints, leaving some inference required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Trial-load a step' into the plan's Testmandant, and distinguishes it from live commit by saying it uses the same code path but a different target workspace. An agent can tell this is a trial-load operation that records outcomes without touching live books.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to test a migration step safely before a live commit, and notes that it writes nothing to live books. However, it does not explicitly name an alternative such as migration_commit_step or migration_preview_step, nor does it state when-not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migration_waive_controlA
Idempotent

Set one control aside with a RECORDED reason, which becomes part of the check and of the Prüfbericht. A waiver without a reason is refused (waiver_needs_reason), empty string included; a waived control reports "waived", never "passed", and readiness renders "bereit, mit N Ausnahmen" rather than plain ready. A passed control cannot be waived. CONSEQUENCE: Sets this migration check aside with your reason, which goes into the check report; it reads waived, never passed. The waiver stays on record; declaring the figure again reopens the check.

NameRequiredDescriptionDefault
reasonYes
controlIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover idempotency and non-destructiveness; the description adds substantial behavioral context beyond that: the reason is persisted into the check and the Prüfbericht, empty-string reasons are rejected with waiver_needs_reason, the control reports 'waived' and never 'passed', readiness renders 'bereit, mit N Ausnahmen', and the waiver persists until the figure is re-declared. These are exactly the state consequences an agent needs before mutating a migration check.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The leading sentence is well front-loaded, but the 'CONSEQUENCE:' block restates nearly the same content ('Sets this migration check aside with your reason, which goes into the check report; it reads waived, never passed'), which is redundant filler. The untranslated 'Prüfbericht' also adds friction for an agent reading English context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the return-state burden, and it does describe the resulting status and readiness rendering well. The remaining gap is parameter-level: nothing explains controlId/workspaceId format or idempotencyKey usage. Otherwise an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and all four parameters are required, but the description only explains 'reason' (non-empty, recorded, refused if missing). controlId, workspaceId and idempotencyKey carry no meaning beyond their names, and idempotencyKey is only indirectly hinted at by the idempotentHint annotation. Useful partial compensation, but three of four parameters remain unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Set one control aside with a RECORDED reason', plus the domain effect (it becomes part of the check and the Prüfbericht). It clearly separates the 'waived' outcome from 'passed', which is the key distinction in this family of migration-check tools. It never names or contrasts an explicit sibling (e.g. migration_check_step or migration_declare_control_total), so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete exclusion — 'A passed control cannot be waived' — and states the precondition ('waiver without a reason is refused, empty string included'), which tells the agent when calling would fail. It lacks explicit routing to alternatives such as re-running the check or declaring the total instead, so guidance is clear but not complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

month_end_checklistA
Read-only

A month-end close checklist (period YYYY-MM): dangling drafts (A02), open debtors (A16), open creditor bills (A17) and a MWST preview (A07), each with drill-down ids. Writes nothing; FX revaluation is reported as not_available until A22 builds it.

NameRequiredDescriptionDefault
periodYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares the tool is non-mutating, and the description strengthens this with 'Writes nothing.' It also adds useful behavioral nuance beyond the annotation: FX revaluation is reported as not_available until a later step builds it, and each checklist item carries drill-down ids. This is meaningful context for an agent deciding whether the expected output exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and information-dense: it states the resource, the period format, the checklist items, the drill-down capability, the read-only nature, and the one availability caveat. No sentence is wasted, and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only checklist tool with two simple parameters, the description covers the key facts an agent needs: what the checklist contains, how the period is formatted, that no writes occur, and that FX revaluation may be unavailable. There is no output schema, so a slightly more explicit return structure would help, but the description is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no descriptions for either parameter, and the description compensates for the period parameter by specifying the YYYY-MM format. However, the required workspaceId parameter is left entirely to inference. Since schema coverage is 0%, the description does not fully carry the parameter-documentation burden, though the most non-obvious parameter is addressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a month-end close checklist scoped to a YYYY-MM period and enumerates its specific contents (dangling drafts, open debtors, open creditor bills, MWST preview). It lacks an explicit verb like 'returns or lists, and does not explicitly contrast with sibling checklist_* tools, but the resource and scope are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'month-end close checklist' and the mention that FX revaluation is not_available until A22 builds it, which hints at ordering. However, there is no explicit statement of when to use this tool versus generic checklist tools (checklist_get, checklist_start) or when not to use it, so the agent must infer the intended calling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_archiveB
Destructive

Archiviere eine Benachrichtigung (US-G06.2): unread oder read wird archived (reading first is not required), reversible via the Archiv filter. Self-scoped: a foreign item answers notification_not_found; archiving an archived item is a successful state assertion.

NameRequiredDescriptionDefault
workspaceIdYes
idempotencyKeyNo
notificationIdYes

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond the destructiveHint annotation: self-scoped access means a foreign item returns notification_not_found, and archiving an already-archived item succeeds as a state assertion (idempotent behavior). It also notes reversibility via the Archiv filter, which softens the destructive hint without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the description is a single dense sentence, but the '(US-G06.2)' spec reference and mixed German/English add noise without helping an agent act. Nothing is padded, but it reads as internal-ticket prose rather than agent instructions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the state machine, scoping, and idempotency of the operation, which is good for a 3-param mutation with no output schema. However, the total absence of parameter documentation and any mention of auth/permission requirements leaves gaps for a write tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, yet it only implies notificationId semantics ('a foreign item answers notification_not_found'). workspaceId and idempotencyKey are completely unaddressed, leaving two of three parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (archive a notification) and describes the state transition (unread/read → archived), so it's clearly distinct from notifications_mark_read or notifications_list. It doesn't explicitly name a sibling, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Reading first is not required' tells the agent it can archive directly without a prerequisite step, and the reversibility note hints at when restoration is used. It doesn't route between siblings (e.g., mark_read vs archive) or explain when archiving is preferred over deleting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_deliverA
DestructiveIdempotent

Stelle ein Ereignis in den Posteingang zu (the OP8 action target a G01 rule names, US-G06.1): validates the event against the single automation-event registry, resolves the recipient's notification preference (exact event row, else the * wildcard, else the built-in default: inbox on), and inserts ONE unread inbox_item, or answers delivered:false reason muted when the recipient silenced the moment (never an error). An entityKind/entityId pair links back to the source record (OP3, workspace-scoped). Nothing is ever transmitted here: outbound channels are the digest's OP4 business. CONSEQUENCE: Puts a notice into this person's TILL inbox; nothing leaves TILL. It cannot be taken back, but they can mark it read or archive it.

NameRequiredDescriptionDefault
eventYes
userIdYes
entityIdNo
entityKindNo
workspaceIdYes
summaryParamsNo
idempotencyKeyYes
summaryI18nKeyYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, setting a lower bar. The description still adds real value: the registry validation, the preference-resolution fallback chain (exact row, then * wildcard, then default inbox-on), the single unread inbox_item, and the delivered:false/reason muted non-error outcome, all consistent with the destructive hint ('cannot be taken back'). However, the annotation already flags irreversibility and idempotency, so much of the disclosure is elaboration rather than new behavioral signature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause, which is good, but the sentence is a single sprawling run-on with stacked parentheticals and internal codes (OP8/G01/US-G06.1/OP3/OP4). The closing consequence sentence repeats the 'nothing leaves TILL' idea already stated mid-description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation with no output schema, the description does well on side effects, the muted outcome, and cross-record linkage, which substitutes for the missing output schema. It falls short on the summary content parameters and idempotency key, and does not state permission or auth requirements for writing into another user's inbox.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 8 parameters, so the description must compensate. It explains event (validated against the registry), userId (recipient preference lookup), and the entityKind/entityId link back to the source record, but says nothing about summaryI18nKey, summaryParams, or idempotencyKey — the very parameter that makes the idempotent hint meaningful. Half the surface remains undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening clause states a specific verb and resource ('Stelle ein Ereignis in den Posteingang zu' = place an event into the inbox) and frames it as the action target of an automation rule. It clearly separates itself from outbound delivery ('outbound channels are the digest's OP4 business'), so an agent can tell it apart from notifications_run_digest. The internal jargon (OP8, G01, US-G06.1, TILL) dilutes but does not obscure the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the context in which this tool is invoked (the action target named by a G01 automation rule) and gives an explicit exclusion: nothing is transmitted here, outbound channels belong to the digest. It also explains the muted case. It does not, however, contrast with the other notifications_* siblings (list, mark_read, set_preference) beyond the digest.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_listA
Read-only

Der Posteingang (P5, US-G06.2): the caller's own inbox items newest first, each with its query-time day grouping, plus the live unreadCount (the bell figure). Self-scoped structurally: userId must be the caller's own (forbidden otherwise). status filters unread|read|archived, bucket filters to one ISO day, savedViewId applies a stored G00 view over the inbox_item kind (its filters merge underneath explicit ones).

NameRequiredDescriptionDefault
bucketNo
statusNo
userIdYes
savedViewIdNo
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses substantive behavior: ordering is newest-first, day grouping happens at query time, unreadCount is live, userId is enforced to be the caller's own, and savedView filters merge underneath explicit filters. This is exactly the kind of behavioral context that helps an agent predict 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but not bloated; every clause adds information about scope, ordering, grouping, unread count, or filtering. The internal codes (P5, US-G06.2, G00) are somewhat cryptic but appear to be product identifiers rather than filler. A bit more structural formatting could improve readability, but the content is efficiently packed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter tool with no output schema, the description covers most operational essentials: what is returned (inbox items, day grouping, unreadCount), ordering, self-scoping, and all meaningful filters. Gaps include the role of workspaceId, default behavior when optional filters are omitted, and any pagination or result-limit caveats. Still, the description is substantially complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the parameter semantics burden. It explains status values (unread|read|archived), bucket as a single ISO day, savedViewId as a stored filter overlay, and the userId self-scoping rule. The one gap is workspaceId, which is required but never described; bucket's exact string format is also only implied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: it lists the caller's own inbox items, ordered newest first, with day grouping and the live unreadCount. It also distinguishes itself from surrounding notification tools by emphasizing self-scoping and read-only listing behavior. Even without naming a sibling, the 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: this is the read-only inbox listing tool, structurally scoped to the caller; userId must be the caller's own. It explains how filters narrow results (status, bucket, savedViewId), which tells an agent when this tool is appropriate. It stops short of explicitly naming alternatives or adding a when-not-to-use statement, but the context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_list_preferencesA
Read-only

Die Benachrichtigungs-Einstellungen (P5, US-G06.3): the three wildcard rows first (stored where a row exists, the built-in default where none does: inbox on, email and push off), then every stored per-event override, plus the registry's known events so a panel renders each at its inherited default rather than an empty screen. Reading another user's preferences asserts manage_members.

NameRequiredDescriptionDefault
userIdYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses meaningful behavior: the ordering (wildcard rows first, then per-event overrides), the fallback to built-in defaults (inbox on, email and push off), the inclusion of registry-known events, and the authorization requirement (manage_members) when reading another user's preferences. No annotation 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence mixing German and English, with a long parenthetical about defaults and a trailing permission note. Every clause adds information, but the structure is clunky and not front-loaded with a clear verb; it could be split into separate sentences for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description covers the essential return semantics: wildcard rows, per-event overrides, registry-known events, and the fallback defaults, along with the authorization nuance. It does not specify exact response field names or pagination, but for a straightforward read tool the described structure is largely sufficient 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.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry parameter meaning. It partially explains userId by noting that reading another user's preferences asserts manage_members, but it never explicitly defines workspaceId or states that userId identifies the user whose preferences are returned. The meaning of both parameters is largely left to inference from the tool name and context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explains that the tool returns notification preference rows: wildcard defaults first, then per-event overrides, plus registry-known events for panel rendering. This clearly identifies it as a list/read operation for notification settings, though it never uses an explicit verb like 'returns' and does not name sibling tools to distinguish itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: the results are structured so a settings panel can render each event at its inherited default instead of an empty screen. It also gives an access-control guideline for reading another user's preferences (requires manage_members). However, it does not mention when to use an alternative tool such as notifications_list or notifications_set_preference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_mark_all_readA
Destructive

Alle als gelesen markieren (US-G06.2): clears the caller's whole unread set in one call and answers how many rows moved. Self-scoped structurally: userId must be the caller's own (forbidden otherwise).

NameRequiredDescriptionDefault
userIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations and schema, specifying that the tool clears the 'whole' set and returns the row count. It also reinforces the self-scoping boundary which is essential for behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief yet highly effective, front-loading the core functionality and including key behavioral constraints in a highly readable, two-part format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is exceptionally complete. It clarifies what the tool does, what the agent should know about its execution (row count return), and critical security boundaries, providing everything needed for accurate invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite having 0% schema description coverage, the description provides high semantic value by defining the critical constraint around 'userId' (must be the caller's own). This is essential context for using the required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the action ('clears the caller's whole unread set'), the resource (unread notifications), and the specific output ('answers how many rows moved'). This is unambiguous and distinguishes the function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides critical usage boundaries, most notably the security constraint: 'userId must be the caller's own (forbidden otherwise).' This explicit scope constraint prevents incorrect tool usage and potential security issues.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_mark_readA
Destructive

Markiere eine Benachrichtigung als gelesen (US-G06.2): unread wird read und read_at gestempelt. Self-scoped: a foreign user's item answers the same notification_not_found a nonexistent one does; an ARCHIVED item is outside the mutable set and is refused the same way. Marking an already-read item read is a successful state assertion.

NameRequiredDescriptionDefault
workspaceIdYes
idempotencyKeyNo
notificationIdYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the lone destructiveHint annotation: it names the state change and the read_at stamp, declares self-scoping with foreign items returning the same notification_not_found as nonexistent ones, explains that archived items are outside the mutable set and refused identically, and clarifies that re-marking a read item succeeds. This is exactly the error/idempotency context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and state change, then the scoping and error semantics, with no filler. The requirement tag "(US-G06.2)" and dense semicolon chaining cost it a perfect score but do not obscure meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the behavioral picture is unusually complete (success, not-found, archived, repeat-call cases). However, with 0% schema coverage and an undocumented idempotencyKey, an agent still cannot tell what to pass for that parameter or what workspaceId must reference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters, so the description carries the full burden, yet it explains none of them. workspaceId and notificationId are only inferable from context, and idempotencyKey is never mentioned even though the description discusses idempotent re-reads — a notable omission given the parameter exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Markiere eine Benachrichtigung als gelesen") plus the exact state transition (unread -> read with read_at stamped). The singular object implicitly separates it from notifications_mark_all_read, and the archived-item exclusion separates it from notifications_archive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the agent can infer this is the single-item read-marking tool, but no sentence says when to choose it over notifications_mark_all_read, notifications_archive, or notifications_list. It also omits preconditions such as whether the caller must own the notification (only the negative case is described).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_run_digestA
DestructiveIdempotent

Erzeuge eine Zusammenfassung (OP4, US-G06.4): gathers the recipient's inbox items in the window whose preference opted the outbound channel (email|push) into a digest cadence, renders ONE local digest artifact, and persists the digest_run honesty record. The OSS core wires no transmitter, so the answer is always transmitted:false with the reason named (cloud_tier, or empty when the window held nothing: an empty digest is never transmitted). channel inbox answers digest_channel_required. Running another user's digest asserts manage_members. CONSEQUENCE: Gathers this person's notices for the period into one digest for email or push; TILL itself transmits nothing yet. The digest stays on record and cannot be undone.

NameRequiredDescriptionDefault
userIdYes
channelYes
periodEndYes
periodStartYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate idempotency and destructiveness; the description adds substantial context beyond that: no transmitter is wired in the OSS core, so transmitted is always false with a named reason, empty windows are never transmitted, channel 'inbox' returns digest_channel_required, and cross-user execution asserts manage_members. The statement that the digest 'stays on record and cannot be undone' aligns with destructiveHint=true and clarifies the consequence. The remaining gap is that the return shape beyond transmitted/reason is not described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is bloated with internal spec identifiers and redundant consequence restatement ('Gathers this person's notices... TILL itself transmits nothing yet' repeats earlier points). It is front-loaded with the core action, but the mixed-language phrasing and duplicated warnings consume space without adding decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation that persists a record with no output schema, the description covers the important behavioral facts: no external transmission, named failure reasons, the empty-window case, the inbox channel error, and cross-user authorization. Parameter-level details (idempotency key semantics, timestamp formats) are incomplete, but the operational picture is otherwise sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It gives meaning to several parameters: recipient (userId/workspaceId implied by 'another user's digest'), window (periodStart/periodEnd), and channel values 'email|push' plus the special 'inbox' case. It does not explain idempotencyKey behavior or date formats, leaving meaningful gaps for 6 required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: gathering a recipient's inbox items for a window, rendering one local digest artifact, and persisting a digest_run record. This clearly distinguishes it from delivery/listing siblings such as notifications_deliver and notifications_list. The inclusion of internal spec codes (OP4, US-G06.4) and mixed German/English phrasing adds noise but does not obscure the core purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: it applies when a recipient's preference has opted a channel into a digest cadence, and 'channel inbox answers digest_channel_required' signals an invalid-input case. However, it never explicitly says when to choose this over notifications_deliver or notifications_list, and the preconditions (preference must already be configured) are only indirectly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_set_preferenceA
Destructive

Setze eine Benachrichtigungs-Einstellung (US-G06.3): upserts one (recipient, event, channel) row; event omitted writes the * wildcard row every unlisted event falls back to. channel is inbox|email|push (invalid_channel otherwise); the in-app inbox is ALWAYS instant, so any other cadence on it answers inbox_is_always_instant. Setting another user's preference asserts manage_members (an admin configuring a teammate's defaults); your own needs only membership. The agent seat sets only its own: another user's answers capability_forbidden, reason needs_a_person.

NameRequiredDescriptionDefault
eventNo
digestNo
userIdYes
channelYes
enabledYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry destructiveHint=true, yet the description discloses the upsert/overwrite behavior, the wildcard-row fallback semantics, the authorization model (manage_members for third-party users), and three distinct error outcomes (invalid_channel, inbox_is_always_instant, capability_forbidden). This is substantial context the agent could not obtain from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the core upsert behavior comes first, then constraints and error codes as parenthetical asides. The German ticket reference 'US-G06.3' and the language mixing add minor noise, and the run-on structure with nested parentheses takes effort to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, sparse annotations and zero schema descriptions, the description covers the essentials an agent needs: authorization, valid channel values, wildcard behavior, and failure modes. Only the digest/idempotencyKey parameters remain unexplained, which is a modest gap rather than a blocker.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate; it does so well for the two highest-risk parameters by supplying the channel enum (inbox|email|push) and the event-omitted wildcard rule. However, digest, idempotencyKey, workspaceId and the meaning of enabled=false are never explained, leaving part of the seven-parameter surface undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a precise verb and resource: 'Setze eine Benachrichtigungs-Einstellung' / 'upserts one (recipient, event, channel) row', which makes the single-row upsert semantics concrete. It doesn't explicitly name notifications_list_preferences as the read-only alternative, so the differentiation from the sibling is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'event omitted writes the * wildcard row every unlisted event falls back to' explains a non-obvious usage mode, and the permission section states exactly when the call is allowed versus rejected (manage_members for another user's preference, membership for your own, capability_forbidden/needs_a_person for the agent seat). The when-not conditions are explicit and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

onboard_clientA
Idempotent

Onboard a new client workspace (ein neues Mandat) in one call: mints the workspace via create_workspace with its Kontenrahmen KMU chart, seeds the tax codes and sets the VAT method when vatMethod and vatAccounting are given together, and seats the operator as accepted owner (A24). Idempotent per key: replaying returns the existing workspace, never a duplicate client.

NameRequiredDescriptionDefault
nameYes
legalFormNo
vatMethodNo
baseCurrencyNo
vatAccountingNo
idempotencyKeyYes
fiscalYearStartNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations already declare idempotency and non-destructiveness, the description adds substantial behavioral detail: it mints the workspace with the Kontenrahmen KMU chart, seeds tax codes, seats the operator as accepted owner (A24), and explains that replaying returns the existing workspace rather than creating a duplicate. This is exactly the kind of context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence with no wasted words; the core action is front-loaded, followed by mechanics and idempotency. It is appropriately sized for a composite onboarding tool, though the parenthetical German gloss and codes like 'A24' add density without explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a composite mutation tool with seven parameters and no output schema, the description covers the essential mechanics, conditional behavior, and replay semantics. It does not explain what a successful first call returns beyond the replay case, and four parameters remain undocumented, leaving minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for seven parameters, so the description must carry the full burden. It meaningfully explains the vatMethod/vatAccounting interplay and the idempotencyKey behavior, but leaves name, legalForm, baseCurrency, and fiscalYearStart completely undefined. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource—'Onboard a new client workspace'—and distinguishes this composite operation from its underlying primitive by noting it 'mints the workspace via create_workspace' and seeds additional configuration. An agent can tell what this does and how it differs from create_workspace or bootstrap_workspace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clarifies that this is a one-call composite ('in one call') and specifies a conditional rule: 'sets the VAT method when vatMethod and vatAccounting are given together.' It does not explicitly state when to choose onboard_client over create_workspace or bootstrap_workspace, but the composite framing gives a clear context for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

override_qr_matchA
Idempotent

The manual decision on any queue row, applied included (US-A21.4). Name the correct invoiceId to re-point (an applied row is first corrected by an A14 reversing payment, §H-AUDIT, then re-applied to the named invoice), or an action: 'unmatch' returns the row to open (reversing first when applied), 'dismiss' marks it as not a customer payment (book it via journal entry instead). Overriding an APPLIED row always requires confirmed=true: it moves money, and the auto-apply dial never covers an override. NOT automatable (D77): reversing a settlement and re-pointing money between debtors is a judgment no stored rule may make. The row keeps the reversal chain and the audit stamp: who overrode what, and when. CONSEQUENCE: Points the received payment at another invoice or takes it out of the match; an applied match is first reversed with a correcting entry. You can change it again; every booking stays visible.

NameRequiredDescriptionDefault
actionNo
creditIdYes
confirmedNo
invoiceIdNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give idempotentHint and destructiveHint=false; the description adds substantial context: money movement, mandatory confirmed=true for applied rows, an A14 reversing entry before re-application, retained reversal chain and audit stamp, and explicit reversibility ('You can change it again; every booking stays visible'). That is consistent with destructiveHint=false since nothing is deleted, but the description never says what the call returns or what happens on a rejected/ambiguous row.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and structured by branch, then consequence and audit. It is long but dense; the main deduction is repetition — the reversing-then-re-applying behavior is stated in the opening sentence, again in the 'unmatch' clause, and a third time under CONSEQUENCE.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a money-moving mutation with no output schema, the description covers consequences, audit trail, reversibility, and the confirmed gate thoroughly. The remaining gap is return/error behavior — with no output schema the description is the only place that could say what a successful or rejected override yields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across six parameters, so the description carries the full burden. It does well on the non-obvious ones — documents the 'unmatch'/'dismiss' action values, the meaning of invoiceId, and the confirmed=true rule — but creditId, workspaceId, and idempotencyKey are never explained, leaving the required creditId (the queue-row identifier) to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource — the manual override decision on a QR match queue row — and enumerates the three outcomes (re-point to invoiceId, 'unmatch', 'dismiss'). It also distinguishes itself from the automated path ('the auto-apply dial never covers an override'), so an agent can separate it from apply_qr_match / set_qr_auto_apply without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit per-branch guidance: use invoiceId to re-point, 'unmatch' to return a row to open, 'dismiss' when it is not a customer payment (book via journal entry instead). It also states the hard precondition — confirmed=true for any APPLIED row — and flags the operation as NOT automatable (D77), which tells the agent this must be a human-judgment call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pause_recurring_scheduleA
DestructiveIdempotent

Pause a schedule: the tick stops selecting it, immediately. Already paused settles to the same answer; an ended schedule refuses with schedule_ended.

NameRequiredDescriptionDefault
scheduleIdYes
workspaceIdYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint; the description adds real value on top by specifying the idempotent outcome ('already paused settles to the same answer') and the exact failure mode ('refuses with schedule_ended'). It omits permissions/authorization needs and does not mention that resume_recurring_schedule reverses it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses, front-loaded with the effect before the edge cases; nothing is padded. 'Settles to the same answer' is slightly oblique phrasing that costs a beat of parsing but is not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description never indicates what a successful pause returns or whether the schedule object comes back changed. Combined with undocumented parameters and no reversal pointer, an agent has enough to call it but not a full picture of the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both required parameters (workspaceId, scheduleId), and the description says nothing about them—no ID format, no scoping rules, no note on what additionalProperties allows. With no schema documentation, the description was the only place to compensate and it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (pause) and resource (schedule) plus the concrete effect: 'the tick stops selecting it, immediately.' That effect wording separates it semantically from resume/end, but it never names those siblings, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context: pausing halts tick selection right away, re-pausing is a no-op, and an already-ended schedule returns schedule_ended. It does not say when to prefer end_recurring_schedule or resume_recurring_schedule instead, so the alternative-selection guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

payment_batch_transmitA
DestructiveIdempotent

Hand a generated A18 pain.001 payment batch to a bank channel that uploads payments. The EBICS channel downloads statements only: a batch whose debtor account is routed over EBICS is refused upload_disabled before anything is sent (upload the pain.001 in eBanking and release it there). A batch whose account is routed over the managed bLink rail (A37) is submitted there, P8-gated (confirm=true). With no channel it returns needs_bank_channel and the file path stands. Never marks anything paid (paid comes from the camt debit). Posts nothing. CONSEQUENCE: Submits the payment batch to your bank over the connected channel; TILL can't call it back. It marks nothing as paid: that comes from booking the bank debit or confirming the batch as paid.

NameRequiredDescriptionDefault
batchIdYes
confirmNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true, and the description earns its keep on top of that by stating the submit is irreversible ("TILL can't call it back"), naming the exact refusal/error codes (upload_disabled, needs_bank_channel), and clarifying that nothing is marked paid and nothing is posted. It stops short of explaining how idempotencyKey deduplicates retries, which is the one behavior the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose leads, channel branches follow, and the CONSEQUENCE block is clearly marked, so the shape is good for a multi-branch tool. The cost is duplication: "Never marks anything paid (paid comes from the camt debit). Posts nothing." is restated almost verbatim in the CONSEQUENCE paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and destructive/idempotent annotations already present, the description supplies the missing decision-critical context: routing preconditions, refusal codes, and irreversibility. What it omits is what a successful transmit returns and what batch state results, which matters for a mutation whose follow-up is left to camt booking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden. It explains confirm=true only in the bLink branch, leaving batchId, workspaceId and idempotencyKey entirely undefined in both schema and prose, so an agent gets no guidance on key format or retry semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource: handing a generated A18 pain.001 batch to a bank channel that uploads payments. That scope cleanly separates it from generate_pain001 (which produces the file), create_payment_batch (which assembles it) and mark_batch_paid (which settles it), without the agent needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It spells out the branches that determine whether the call is right: EBICS-routed debtor accounts are refused with upload_disabled and the pain.001 must instead be uploaded and released in eBanking; bLink/A37 accounts are submitted there and require confirm=true; no channel yields needs_bank_channel and the file stays put. Both the when and the when-not, plus the manual fallback, are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

payroll_handoff_exportA
Idempotent

Export the employee master (E02) plus the mutations since the last export, as a LOCAL artifact for an external payroll provider. format is csv or json (default json). The artifact is stored via E00 and linked to a payroll_handoff record; it NEVER transmits (OP4). AHV numbers are included only when the actor holds hr.sensitive; when they are not, the artifact is produced WITHOUT them and both the artifact header and the result say so ({ahvIncluded:false, ahvExcludedReason:'missing_hr_sensitive'}), never a silent omission (revDSG Art. 6). The first export is the full master with an empty mutations section; a re-run with no changes yields mutationCount:0. Refuses with no_employees when the roster is empty. Posts nothing.

NameRequiredDescriptionDefault
formatNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: discloses local-only storage via E00, linkage to a payroll_handoff record, no transmission (OP4), AHV gating by hr.sensitive with explicit header/result flags, and refusal conditions. This is exactly the behavioral context an agent needs for a sensitive export.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and then layers behavioral and edge-case details efficiently. It is dense but every sentence carries useful information; minor verbosity around the AHV disclosure could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description explains key result fields (ahvIncluded, ahvExcludedReason, mutationCount), refusal behavior, and storage linkage. For a three-parameter export tool with annotations, this is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It fully explains format (csv/json, default json) but leaves workspaceId and the required idempotencyKey undocumented, so only partial compensation is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: exporting the employee master plus mutations as a local artifact for an external payroll provider. The scope (local, never transmitted) and data source (E02) distinguish it clearly from sibling tools like list_payroll_handoffs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Establishes the context (external payroll provider) and key edge-case behaviors (first export is full master, re-run yields mutationCount:0, refuses when roster empty). It does not explicitly name an alternative sibling or state when not to use it, but the intended use is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipeline_stages_upsertA

Lege eine Phase an oder bearbeite sie (§6b): name, sort, the default probability (0 to 100, validated here, the one place a default enters), and the outcome flag (won or lost) that makes entering the stage terminal through deals_mark. Pass stageId to patch, omit it to append. The stage names are workspace data; the stage-to-status derivation stays fixed mechanism (§6b Fixed).

NameRequiredDescriptionDefault
nameNo
sortNo
outcomeNo
stageIdNo
pipelineIdYes
probabilityNo
workspaceIdYes
idempotencyKeyNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false provided, the description carries real weight and adds material context beyond the annotation: probability is validated to 0-100 "here", it is the single entry point for the default, and the outcome flag drives terminal behaviour through deals_mark while stage-to-status derivation remains fixed mechanism. It does not disclose whether patching overwrites unspecified fields, which matters for an update path, so it is strong but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The mutation intent and the field list are front-loaded in the first clause, and the patch/append rule follows immediately, so the important content is not buried. The trailing §6b and "§6b Fixed" references consume space without conveying meaning to an agent that lacks the spec.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter write tool with no output schema and only a single boolean annotation, the description should say more about which fields are required for create versus patch and what idempotencyKey does. The core mechanics are explained, but required-field behaviour and the scope of a patch are left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does explain name, sort, probability (0-100, validated), outcome (won/lost) and stageId (patch vs append). It says nothing about workspaceId, pipelineId, or idempotencyKey — three of eight parameters — leaving required-parameter roles and retry/idempotency semantics undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete verb+resource pair ("Lege eine Phase an oder bearbeite sie" = create or edit a stage) and enumerates the fields it governs, so the agent knows exactly what domain object is being written. It does not name or differentiate itself from the obvious sibling pipelines_upsert, and the §6b cross-references are opaque without the external spec, which keeps it below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit mode selection: "Pass stageId to patch, omit it to append", which is exactly the branching an agent needs to choose between update and create. It also notes that the outcome flag makes stage entry terminal via deals_mark, hinting at downstream behaviour, but it names no alternative tool and gives no exclusion criteria for when to use this versus pipelines_upsert.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipelines_upsertA

Lege eine Pipeline an oder benenne sie um (§6b, the OP10 flexible surface for pipeline shape): pass pipelineId to rename, omit it to create. The stage set itself is edited per stage through pipeline_stages_upsert.

NameRequiredDescriptionDefault
nameNo
pipelineIdNo
workspaceIdYes
idempotencyKeyNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

destructiveHint=false is consistent with a create/rename surface, and the description adds useful scope information (this tool does not touch the stage set). However it says nothing about permissions, whether a rename is reversible, or what happens when creating without a name, which matters since only workspaceId is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The branch rule is front-loaded and short, but the parenthetical '(§6b, the OP10 flexible surface for pipeline shape)' is internal jargon that costs tokens without helping tool selection, and the mixed German/English phrasing adds friction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation with no output schema and no parameter descriptions, the description covers the main create-vs-rename decision but leaves idempotencyKey, the name requirement, and the response shape unaddressed. Adequate to call, incomplete to call confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate; it does explain pipelineId's dual meaning, which the schema does not. But idempotencyKey is never explained and the name parameter's role (required for create? optional for rename?) is only implied, leaving half the parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (Pipeline) and the two operations it performs (create, rename), with a precise discriminator: pass pipelineId to rename, omit to create. It also explicitly carves out stage editing to the sibling pipeline_stages_upsert, so an agent can separate the two without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an actionable branch rule (pipelineId present = rename, absent = create) and names the alternative tool pipeline_stages_upsert for editing the stage set. It stops short of stating prerequisites or when not to use it at all, but the operating condition is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_amendment_applyA

Wende eine Änderung an und erzeuge die nächste PO-Version (OP14): supersedes the current active version, updates the live purchase_order + po_line to the amended values (received_qty and billed_qty on surviving lines are NEVER touched), mints version N+1 (active) with the frozen snapshot, and RE-RENDERS the outbound PO artifact carrying the new revision. P8: it returns { transmitted:false } and never emails the supplier on its own; an amended commitment reaches the supplier only through the approval dial. Applies from draft or pending_approval. Refuses qty_below_received / line_has_receipts / no_effective_change (a refusal writes zero rows). Idempotent on ROWS: a replay under the same idempotencyKey creates NO second version. CONSEQUENCE: Applies the change and makes the next version of the purchase order with a new PDF; TILL emails nothing itself. The earlier version stays on record; a further change is a new amendment.

NameRequiredDescriptionDefault
actorNo
amendmentIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false in annotations, the description carries the load and does it well: it discloses that received_qty/billed_qty on surviving lines are never touched, that refusals write zero rows, that replay under the same idempotencyKey mints no second version, and that the previous version stays on record. It even discloses a return fragment ({ transmitted:false }) and the PDF re-render side effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The operative content is front-loaded, which is good, but the trailing 'CONSEQUENCE:' sentence restates the opening almost verbatim ('new version with a new PDF', 'emails nothing itself' echoes 'never emails the supplier on its own'), and the mixed German/English phrasing plus the garbled 'TILL emails nothing itself' add noise rather than information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and zero schema description coverage, the description covers effect model, refusal codes, idempotency and the withheld side effect (supplier email) thoroughly. What is still missing is the meaning of workspaceId/actor and any authorization requirement, so it falls just short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate and only partly does: idempotencyKey gets real semantics ('a replay under the same idempotencyKey creates NO second version') and amendmentId is implied by 'Wende eine Änderung an'. workspaceId and actor are never mentioned, leaving half the parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (apply an amendment, mint PO version N+1) and enumerates the concrete side effects: superseding the active version, updating live purchase_order/po_line, re-rendering the PO artifact. This distinguishes it clearly from neighbours like po_amendment_preview, po_amendment_submit and po_revise without the agent needing to open a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit preconditions ('Applies from draft or pending_approval') and explicit refusal triggers (qty_below_received / line_has_receipts / no_effective_change), plus the key when-not: it never emails the supplier, that only happens through the approval dial. It does not name sibling tools such as po_amendment_preview or po_amendment_cancel as alternatives, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_amendment_cancelA

Verwirf eine Entwurfs- oder eingereichte Änderung (OP14): status -> cancelled, the live PO untouched, and a new amendment may then be started. An already-applied amendment cannot be cancelled (invalid_transition); a further corrective amendment is required. Idempotent.

NameRequiredDescriptionDefault
actorNo
reasonNo
amendmentIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry destructiveHint=false, so the description does the heavy lifting: it discloses the resulting state (status -> cancelled), that the live PO is untouched, that a new amendment can subsequently be started, the failure mode for applied amendments, and that the call is idempotent. That is a full side-effect and error profile for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and dense with no filler: the happy path, the blocking state, and the idempotency guarantee each get exactly one clause. The German/English mix slightly hurts scanability but costs no length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation with no output schema and only a single weak annotation, the description covers state machine and failure semantics well enough to call it safely. What is missing is any guidance on the three optional parameters (actor, reason, idempotencyKey), which the agent must guess from names alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description must compensate and largely does not: workspaceId, actor and reason are never mentioned, and amendmentId is only obliquely referenced as "eine Änderung". The single word "Idempotent" gestures at idempotencyKey behavior but does not tell the agent the parameter exists or how it is used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (cancel/discard) and resource (a draft or submitted PO amendment, "OP14") and distinguishes the eligible states from the applied state. It stops short of naming the nearest sibling (po_amendment_reject) so the agent must infer cancel-vs-reject, and the opening clause is in German while the rest is English.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use (draft or submitted amendments) and when-not (already-applied amendments raise invalid_transition) plus a stated alternative path (start a further corrective amendment). No sibling tool is named, so the exclusion is expressed as a state condition rather than a routing decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_amendment_previewA
Read-only

Zeige die Auswirkung einer Änderung, bevor sie angewandt wird (OP14, P5, pure): per-line before/after qty and unit price, the committed-value delta in Rappen, and the violation list (qty_below_received when a line would fall below its received quantity, line_has_receipts when a received line would be removed). Nothing is written. The same impact the apply enforces, so preview and apply never disagree.

NameRequiredDescriptionDefault
amendmentIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description states 'Nothing is written' and 'pure,' directly confirming no side effects. It also discloses exactly what the preview computes, including violation semantics and the consistency guarantee with apply. This is strong behavioral disclosure for a read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then efficiently packs output details, side-effect guarantees, and consistency semantics. The inline tags 'OP14, P5, pure' are opaque and add little for an agent, but the overall structure remains focused and information-dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two required parameters and no output schema, the description supplies the key return values and behavior needed for an agent to understand the tool. It omits details such as exact response shape or whether the amendment must be in a draft state, but these are minor given the tool's read-only preview role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain workspaceId or amendmentId or how they relate to the amendment being previewed. The parameter names are fairly self-explanatory, which prevents a score of 1, but no parameter-level guidance is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it shows the impact of an amendment before it is applied, with detailed outputs like per-line before/after quantities, unit price, committed-value delta, and violations. It clearly distinguishes itself from the application step and sibling tools such as po_amendment_apply.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the intended use explicit: call this to see the effect before applying and trust that it matches the eventual apply behavior. It contrasts with the apply tool by stating 'Nothing is written' and 'preview and apply never disagree,' though it does not enumerate exclusions or compare with all other amendment siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_amendment_rejectA

Lehne eine Änderung als Genehmiger ab (OP14): status -> rejected with a mandatory reason, the live PO untouched. Allowed from draft or pending_approval; an applied amendment cannot be rejected (invalid_transition). A missing reason is invalid_input. Idempotent.

NameRequiredDescriptionDefault
actorNo
reasonYes
amendmentIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the single destructiveHint=false annotation: it declares the outcome state, that the live PO is untouched, the idempotency guarantee, and the two named error codes. It stops short of describing authorization requirements or the response payload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the action and its effect, then preconditions, then failure modes. No filler and nothing repeated from structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only one annotation, the description still covers transition semantics, allowed source states, error codes, and idempotency. Only the remaining undocumented parameters and the return value keep it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description carries the burden. It clarifies that reason is mandatory and that its absence yields invalid_input, and 'Idempotent' hints at idempotencyKey, but workspaceId, amendmentId, and actor remain unexplained in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (reject), the resource (a PO amendment), and the acting role (approver), plus the resulting state transition 'status -> rejected'. It is clearly distinguishable from po_amendment_apply, po_amendment_cancel, and po_amendment_submit in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit preconditions: allowed from draft or pending_approval, and any other state (applied) yields invalid_transition. That is a genuine when/when-not pair, but it does not explicitly point to the sibling to use instead when the amendment is already applied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_amendment_startA

Beginne eine Änderung an einer gesendeten oder teilweise erhaltenen Bestellung (OP14): opens a DRAFT amendment linked to the current active version. No live PO data is mutated yet. Materialises version 1 first if needed (US-I01.1). A PO that is draft/closed/cancelled is refused (invalid_transition); a PO with no open quantity left is nothing_open; a second amendment while one is already draft/pending_approval is amendment_in_progress (one open amendment per PO). Off the money path (P3); idempotent.

NameRequiredDescriptionDefault
poIdYes
actorNo
reasonNo
workspaceIdYes
idempotencyKeyNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply destructiveHint=false, so the description carries most of the burden and does it well: no live PO data mutated, version 1 materialised if needed, one open amendment per PO, off the money path, idempotent. The enumerated error codes are concrete behavioral disclosure an agent can act on.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then preconditions and error taxonomy in a single dense line; there is little filler. The German preamble duplicates the following English clause and is the only real waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behaviorally thorough for a mutation tool with no output schema — the agent knows what state results and which errors arise. But with 5 undocumented parameters the agent still cannot tell what actor or reason are for, or what workspaceId must be.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Five parameters with 0% schema description coverage, and the description explains none of them — poId, actor, reason and workspaceId are entirely undefined. 'Idempotent' is the only hint pointing at idempotencyKey, and even that is behavioral rather than semantic.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'opens a DRAFT amendment linked to the current active version', scoped to sent or partially received POs. It is clearly distinguishable from read-side siblings (po_amendment_preview, po_version_get) by the 'draft amendment' framing, though it never names a sibling to route away from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Unusually explicit about when it is NOT allowed: draft/closed/cancelled PO → invalid_transition, nothing open → nothing_open, second concurrent amendment → amendment_in_progress. What's missing is the positive alternative: it never says whether to use po_revise, po_amendment_update_lines or po_amendment_preview instead for other amendment needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_amendment_submitA

Reiche eine Änderung zur Genehmigung ein (OP14, draft -> pending_approval): for a workspace that gates material amendments before they become the live commitment. Requires a valid, effective impact (a zero-delta amendment is no_effective_change; a blocking violation is returned by its code). Only a DRAFT amendment can be submitted (invalid_transition). Idempotent.

NameRequiredDescriptionDefault
actorNo
amendmentIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the lone destructiveHint=false annotation: it discloses the draft -> pending_approval transition, the requirement for a valid effective impact, specific failure modes (no_effective_change, invalid_transition, blocking violation code), and that the operation is idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and state transition, and each sentence adds useful context about gating, preconditions, and failure behavior. It is dense and mixed-language, but still appropriately sized with little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the state transition, gating context, preconditions, and error modes well. However, with no output schema, 0% schema description coverage, and four parameters, it omits parameter-level guidance and return/approval-flow details that would help an agent invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are four parameters, but the description does not explain workspaceId, amendmentId, actor, or idempotencyKey. It only indirectly hints at workspace and amendment concepts and mentions idempotency, leaving most parameter meaning undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and state transition: submits an amendment for approval, moving draft -> pending_approval. This clearly distinguishes it from siblings like po_amendment_start, po_amendment_update_lines, po_amendment_apply, po_amendment_cancel, and po_amendment_reject.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the usage context: it is for a workspace that gates material amendments before they become live commitments. It also states key preconditions (valid effective impact, only DRAFT amendments can be submitted), though it does not explicitly name alternative tools for different amendment states.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_amendment_update_linesA
Destructive

Setze die Änderungspositionen einer Entwurfs-Änderung (OP14): replaces the amendments set of change operations. Each op is change (edit a live lines qty/unitPriceRappen/description; a field left out keeps the live value), add (a new line: itemId or free-text description, qty > 0, unitPriceRappen >= 0), or remove (drop an open line). Only a DRAFT amendment is editable (invalid_transition otherwise). A poLineId that is not a live line of this PO is not_found; an unknown itemId is invalid_reference; qty <= 0 is invalid_qty. Validated as a batch: a refusal writes zero rows.

NameRequiredDescriptionDefault
actorNo
changesNo
amendmentIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description details multiple failure modes (not_found, invalid_reference, invalid_qty) and behavioral semantics, such as fields left out retaining live values. Furthermore, the crucial detail about batch validation (a refusal writes zero rows) provides high-fidelity execution context not present in structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense, highly efficient single block of text. It moves logically from high-level purpose to operational details, validation logic, and batch processing, ensuring every word adds necessary functional value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the extreme complexity of the operation (managing atomic changes within an amendment), the description provides all necessary constraints (state, validation, operation rules) for an agent to call it correctly without needing external documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by acting as a functional schema guide. It explains the purpose of the `changes` array, details the required fields for each operation type ('add' vs 'change'), and defines the relationship between input fields (e.g., 'itemId' vs 'description').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool's function: to replace the amendment's set of change operations (OP14). It specifies the core actions possible within this tool—change, add, or remove—making its purpose highly specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides critical operational constraints by stating that only a DRAFT amendment is editable. This explicitly guides the agent on the correct time and state to invoke the tool, effectively defining its proper usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_cancelA

Storniere eine Bestellung (draft|sent -> cancelled): ONLY while nothing has been received. A cancelled PO keeps its rows (H-AUDIT, documents are trail, not trash). Cancelling a PO with any receipt is refused with has_receipts (use po_close_short instead); a non-draft/sent PO is refused (invalid_transition).

NameRequiredDescriptionDefault
poIdYes
actorNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the single destructiveHint annotation, it discloses that rows are retained (audit-trail semantics), the two failure modes with their error codes (has_receipts, invalid_transition), and the routing when receipts exist. This is exactly the behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the state transition, then layers audit semantics and refusal rules, all high-value. The mixed German/English phrasing and error codes make it slightly dense but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with only a non-destructive annotation and no output schema, the description covers preconditions, failure modes, and side effects well. The only real gap is the undocumented parameters, which the description doesn't address.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning, but it names none of the four parameters (poId, workspaceId, actor, idempotencyKey). An agent gets no guidance on actor or idempotencyKey semantics, which are non-obvious.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Storniere/cancel), resource (Bestellung/PO), and explicit state transition (draft|sent -> cancelled). This makes it immediately distinguishable from sibling po_close_short and the amendment tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly defines the only valid precondition (nothing received) and names the alternative (po_close_short) for the receipts case. It also enumerates the refusal condition for non-draft/sent POs, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_close_shortA
Destructive

Schliesse die Restmenge einer Bestellung (sent -> closed): waives the remaining open quantity of a partially received PO. The backorder is explicitly waived, never silently dropped; the PO keeps all its rows (H-AUDIT). A non-sent PO is refused (invalid_transition).

NameRequiredDescriptionDefault
poIdYes
actorNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond destructiveHint=true by explaining exactly what is waived, that the backorder is explicitly waived rather than silently dropped, that all PO rows are retained for audit, and that non-sent POs are refused. This is strong disclosure for a destructive state transition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the operation and state transition, followed by behavioral guarantees and refusal behavior. The German lead-in is slightly redundant with the English explanation but does not waste meaningful space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The behavioral and transition semantics are well covered for a destructive mutation, but with no output schema and 0% schema description coverage, the description should also clarify parameter roles such as idempotencyKey and actor. It is adequate on purpose and behavior but incomplete on invocation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters, so the description must carry parameter meaning. It implies poId through the PO concept but says nothing about workspaceId, actor, or idempotencyKey, leaving most parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: closing the remaining quantity of a purchase order, with the exact transition sent -> closed. It also clarifies that this waives a backorder on a partially received PO, which distinguishes it from broader siblings like po_cancel.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: the PO must be sent and partially received, and a non-sent PO is refused with invalid_transition. It does not explicitly compare against alternatives such as po_cancel or po_amendment_cancel, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_getA
Read-only

Lies eine Bestellung mit Positionen (bestellt / erhalten / verrechnet / offene Menge), ihren Wareneingängen und den 3-Way-Match-Sätzen. The one read that shows the whole PO -> receipt -> match chain for a single order.

NameRequiredDescriptionDefault
poIdYes
savedViewIdNo
workspaceIdYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds meaningful behavioral detail: it reveals exactly what data the tool returns, including positional quantities, goods receipts, and 3-way-match sets, and scopes it to a single order. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, with the first sentence listing the concrete data blocks and the second sentence summarizing the end-to-end chain. There is some redundancy between the German enumeration and the English chain summary, but both sentences contribute useful framing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-order read, the description adequately names the main contents and the chain scope. However, it leaves savedViewId unexplained and, with no output schema, offers no indication of result shape or pagination behavior. It is workable but not fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description does not explain workspaceId, poId, or savedViewId. The context only implies poId identifies the order, while savedViewId remains entirely unexplained. The description fails to compensate for the undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a read operation ('Lies') on a single purchase order and enumerates the included data: positions with ordered/received/billed/open quantities, goods receipts, and 3-way-match sets. The phrase 'the whole PO -> receipt -> match chain' differentiates it from more narrowly scoped PO or match tools, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is the read to use when the complete PO-to-receipt-to-match chain for a single order is needed. It does not explicitly list alternatives or conditions to avoid, but 'the one read that shows the whole ... chain' provides a strong selection signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_listA
Read-only

Liste die Bestellungen (P5): filter by status or supplier. Each row carries the number, status, currency, totals and expected date. savedViewId support rides G00`s saved-view seam on the po customization surface.

NameRequiredDescriptionDefault
statusNo
savedViewIdNo
workspaceIdYes
supplierContactIdNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description does not contradict that. It adds that each row carries specific fields and that savedViewId is supported, providing some behavioral context beyond the annotation. However, it does not disclose pagination or sorting behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, concise and front-loaded with the primary action. The second sentence introduces savedViewId with somewhat cryptic language ('G00`s saved-view seam'), which may reduce clarity, but overall it is brief.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides the key filter options and lists the fields returned, but lacks details on pagination, sorting, or the required workspaceId. Given that there is no output schema and only readOnlyHint annotation, the description could be more complete 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain parameter roles. It explains status and supplierContactId as filters, and mentions savedViewId support. It does not explain workspaceId, which is required, but that is often self-evident. This adds value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists purchase orders (P5) and specifies available filters (status, supplier). It distinguishes from other PO operations by indicating a list function, though it does not explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage for listing orders with optional filters, but does not explicitly state when to use this vs. other PO tools (e.g., po_get for a single order). No exclusion criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_open_linesA
Read-only

Liste die offenen Mengen / Lieferrückstände (P5): every PO line with received_qty < qty on a SENT PO, with open_qty = qty - received_qty. An agent polls this to chase a supplier after a partial delivery. An empty list is not an error.

NameRequiredDescriptionDefault
savedViewIdNo
workspaceIdYes
supplierContactIdNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint: true, which is consistent. The description adds valuable behavior context: 'An empty list is not an error' and explains how open_qty is computed. This goes beyond the annotation by clarifying edge-case semantics and the data source condition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero fluff. The core definition is front-loaded, followed by a practical use case and an edge-case note. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core behavior (list open lines, computation, empty list handling) but omits explanation of the optional parameters, which are not self-explanatory from the schema. For a read-only list tool, this is a moderate gap; an agent might misuse savedViewId or supplierContactId without guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%: the description does not mention any parameters (savedViewId, supplierContactId) beyond workspaceId being implicitly required. Since the schema has no descriptions, the tool description must compensate, but it doesn't explain what these optional parameters do or how they filter results. This is a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: lists open quantities / delivery backlogs on PO lines. It precisely defines the filter (received_qty < qty on SENT PO) and the computed open_qty. This clearly distinguishes it from siblings like po_list, po_get, and po_revise, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states a use case: 'An agent polls this to chase a supplier after a partial delivery.' This gives clear context for when to invoke it. It does not mention alternatives or when not to use it, but the specific scenario is sufficient guidance for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_reviseA

Revidiere eine gesendete Bestellung (sent -> draft, die Revise-Kante): snapshots the current header + lines into po_revision (append-only, H-AUDIT), increments revision, and re-opens the PO as a draft for editing via po_upsert. received_qty and billed_qty survive untouched (they belong to receipts/matches). The re-send rides the P8-gated po_send, so a revision can never leak to the supplier without the dial. Only a SENT PO is revisable (draft/received/closed/cancelled -> invalid_transition). Idempotent: a replay yields one snapshot + one increment.

NameRequiredDescriptionDefault
poIdYes
actorNo
reasonNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the single destructiveHint=false annotation, it discloses the append-only po_revision snapshot, the revision counter increment, that received_qty/billed_qty are preserved because they belong to receipts/matches, the P8 gate on re-send, the invalid_transition failure mode, and idempotent replay semantics. This is exactly the mutation-behavior disclosure an agent needs and does not contradict the annotation since no existing data is destroyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The state transition is front-loaded and each sentence adds a distinct fact (snapshot, preserved quantities, gate, precondition, idempotency) with no filler. The German/English code-switching ('Revidiere eine gesendete Bestellung', 'die Revise-Kante') slightly slows parsing but does not add length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-changing tool with only destructiveHint annotated and no output schema, the description covers the audit trail, the state gate, the quantity preservation rule, and the re-send gate — enough to call it safely. Only the caller-supplied metadata parameters (actor, reason) are left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden; it does add meaning for idempotencyKey ('a replay yields one snapshot + one increment') and implicitly for poId via the state gate. It says nothing about actor, reason, or workspaceId, which remain guesswork, so compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource plus the exact state transition it performs (sent -> draft), and immediately frames the edge as snapshot + revision increment + reopen for editing via po_upsert. An agent can distinguish it from po_list/po_get/po_send without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The precondition is stated precisely ('Only a SENT PO is revisable', with draft/received/closed/cancelled returning invalid_transition), which is strong when-to-use guidance and names the sibling that carries the follow-up (po_send). The gap is that it never contrasts itself with the po_amendment_* family, which is the most plausible alternative for changing a committed PO, so an agent must infer that distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_grant_createA

Gib einem Kunden Portal-Zugang frei: mint a scoped, expiring, tokened grant for a C00 contact. scopes is an explicit entity list ([{kind:"invoice"|"quote"|"document", id}] or {kind:"all_invoices"}); every id must be THIS contact's own record (invalid_scope otherwise, H-TENANT + per-contact fence). The token is CSPRNG >=256-bit; only its SHA-256 hash is stored, and the row carries NO usable link. The one-time link is returned once as tokenOnce/localLink and is never re-derivable. expiresAt in the past is refused; longer than the 90-day max is CLAMPED and flagged (clamped:true). Created as a DRAFT (P8, D157): the link opens nothing until portal_grant_send activates it, so a draft can be prepared freely. Customer grants only: kind is not an input, and any kind other than customer is refused (invalid_input field kind); a supplier link is vendor_portal_grant. Posts nothing (OP4: mints the local artifact and stops, hosted:false/reason:cloud_tier).

NameRequiredDescriptionDefault
actorNo
scopesYes
contactIdYes
expiresAtYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite sparse annotations, the description discloses key behavior: token generation, SHA-256 hash storage, no stored usable link, one-time tokenOnce/localLink return, expiry clamping, draft state, tenant fencing, and no posting. These are exactly the operational details an agent needs beyond the destructiveHint annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded, starting with the core action and then covering scope rules, token behavior, expiry, draft state, customer-only restriction, and posting behavior. Every sentence adds decision-relevant information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex creation tool with no output schema and low schema coverage, the description is exceptionally complete: it explains scope constraints, token lifecycle, expiry handling, draft activation via portal_grant_send, sibling exclusions, and return semantics. An agent has enough context to invoke it correctly and avoid common misuse.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries most parameter meaning and does so well for scopes and expiresAt: it explains the scope object shape, per-contact ownership constraint, past-expiry refusal, and 90-day clamp. It does not explain workspaceId, actor, or idempotencyKey, leaving some gaps for a six-parameter schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it mints a scoped, expiring, tokened portal grant for a C00 contact. It also explicitly distinguishes the customer grant from the supplier path by naming vendor_portal_grant, so an agent can identify the correct tool among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly says the grant is created as a DRAFT and opens nothing until portal_grant_send activates it, which tells the agent when to use this tool versus the send tool. It also states customer grants only and routes supplier links to vendor_portal_grant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_grant_listA
Read-only

Liste die Portal-Freigaben (P5): every grant, optionally per contact, each with its derived status (draft/active/revoked/expired) and its hosted:false truth (the same shape an agent and the panel both see). savedViewId applies a saved view (G00): its stored filters merge underneath any filter named explicitly here.

NameRequiredDescriptionDefault
contactIdNo
savedViewIdNo
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds that it returns derived statuses (draft/active/revoked/expired) and the hosted:false truth, and that the shape matches what agents and the panel see. This provides useful behavioral context about the output without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundancy. It front-loads the main purpose and then explains the optional filter behavior. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the output shape (status, hosted:false truth), the same shape as agent/panel, and saved view behavior. It does not mention pagination or sorting, but for a listing tool with readOnlyHint, it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains the semantics for contactId (optionally per contact) and savedViewId (applies saved view with filter merging), but does not mention workspaceId, which is the only required parameter. Since schema coverage is 0%, the description compensates partially but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists portal grants (P5), optionally per contact, with derived status and hosted:false truth. The verb 'Liste' and resource 'Portal-Freigaben' are specific, and it distinguishes itself from sibling tools like vendor_portal_grants_list by focusing on the portal grants context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it is a general listing tool for portal grants, with optional contact filtering and saved view application. However, it does not explicitly state when to use this tool versus alternatives like vendor_portal_grants_list, nor does it provide exclusions or specific conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_grant_revokeA

Widerrufe einen Portal-Zugang: stamps revoked_at so any resolve of the token now denies. The row is NEVER deleted (the grant history is the revDSG access trail). Revoking an already-revoked grant is a no-op returning the original state. Not destructive: it revokes, it does not delete.

NameRequiredDescriptionDefault
actorNo
grantIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint=false annotation: explains the row is never deleted because the grant history is the revDSG access trail, that revoked_at is stamped so resolves deny, and that repeats are idempotent no-ops. This is exactly the mutation/audit/idempotency context an agent needs, and it is consistent with the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Opens with the action and mechanism, then layers on audit/idempotency details in four compact sentences. Minor redundancy: the final 'it revokes, it does not delete' restates the earlier 'row is NEVER deleted', but the emphasis serves the safety point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the behavioral picture (non-destructive, audit-preserving, idempotent) is well covered. But with two required parameters at 0% schema coverage, the description leaves a real gap on what workspaceId/grantId must contain and any auth requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description documents none of the four parameters. It touches on idempotency behavior but never explains grantId, workspaceId, or the actor field, so the agent must infer everything from parameter names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (revoke) and resource (a portal grant/access) and explains the exact mechanism: stamps revoked_at so token resolution denies. It is easily separable from siblings like portal_grant_create or portal_resolve, though it never explicitly names the closest alternative (vendor_portal_revoke) for contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The task is implied (revoke a portal access) and the idempotency note ('revoking an already-revoked grant is a no-op returning the original state') tells the agent it's safe to retry. However there is no explicit when-not-to-use guidance or comparison to alternatives like vendor_portal_revoke or portal_grant_send.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_grant_sendA
Destructive

Sende den Portal-Link (P8 outbound, draft-gated): hands the grant link over and ACTIVATES it (draft -> active); until this runs, the draft link opens nothing (D157). Confirm-gated: needs_confirmation without confirmed:true, for humans and agents alike, and the draft stays dead. A re-send keeps the first sentAt. OP4 boundary: no transport in the MIT core, so it degrades honestly to sent:false/reason:cloud_tier and the token is NOT re-derivable here (the operator received the one-time link at create). A revoked or expired grant is refused before any write. CONSEQUENCE: Activates the customer's portal link: from now on it opens the records it names, and TILL itself emails nothing. You can revoke the access, but what they saw can't be taken back.

NameRequiredDescriptionDefault
grantIdYes
confirmedNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond destructiveHint: true by explaining activation consequence, irreversibility, confirmation requirement, re-send sentAt behavior, cloud-tier degradation, and that the token cannot be re-derived. It also states that revoked/expired grants are refused before any write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the remaining sentences mostly carry operational details about gating, failure modes, and consequences. It is dense and includes internal codes/jargon (P8, D157, OP4), which slightly reduces clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex irreversible activation tool with no output schema, the description covers the state transition, confirmation gate, edge cases, degraded transport behavior, and user-visible consequence. The agent has enough context to invoke it correctly, with parameter naming handled by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It explicitly clarifies confirmed:true and implies idempotent re-send behavior via sentAt, but does not explain workspaceId or grantId, leaving key required parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific action (send/activate the portal grant link) and the draft->active state transition, which distinguishes it from portal_grant_create and portal_grant_revoke. The phrase 'until this runs, the draft link opens nothing' 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains when the tool is needed (a draft grant link is dead until activation) and when it refuses (revoked/expired grants), plus the confirm gate. It does not explicitly name sibling alternatives, but the context and exclusions are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_quote_acceptA
Destructive

Nimm eine Offerte über das Portal an (US-F02.3): fence-checks the token (the quote must be in scope AND belong to the grant's contact) then DELEGATES to C02's real accept (the A10 sent -> accepted transition) with actor portal:. F02 owns no quote state and hand-rolls no invoice. Idempotent via idempotencyKey: a same-key re-accept returns the original, never a second acceptance (no double-issue). C02's own errors (invalid_transition on a non-sent quote, quote_expired) surface unchanged. A refused accept writes zero rows. Token-authenticated, pre-workspace: no workspaceId. CONSEQUENCE: Accepts the quote through the customer's portal link, which makes it binding and spends that link. An accepted quote cannot be withdrawn or revised; the next step is turning it into an order or invoice.

NameRequiredDescriptionDefault
tokenYes
quoteIdYes
idempotencyKeyNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the destructiveHint annotation: idempotency contract (same-key re-accept returns the original, no double-issue), error passthrough (invalid_transition, quote_expired surface unchanged), and the guarantee that a refused accept writes zero rows. The consequence block states plainly that acceptance is binding and non-reversible — exactly the behavior destructiveHint=True signals.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the delegation, and nearly every clause carries new information (flags, errors, auth, consequence). It is long and mixes German and English, and the consequence paragraph partly restates the 'spends that link' point already implied, costing some tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything an agent needs to call this safely: auth model, scope constraints, delegation target, error surface, idempotency, and irreversibility. No output schema exists, and the description at least states what a replayed call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description must carry the parameters, and it does for two of three: token is defined by its fence-check semantics (quote in scope AND belonging to the grant's contact) and idempotencyKey by its replay guarantee. quoteId is only implied ('the quote must be in scope', 'non-sent quote'); its format/identification is not spelled out.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource (accept a portal quote) with explicit scope: token-authenticated, pre-workspace, portal grant context. It clearly distinguishes itself from the internal accept by naming C02/quotes_accept as the delegate that actually performs the transition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context unmistakable (customer portal link, token required, no workspaceId) and routes state-changing semantics to C02 rather than duplicating them. It does not explicitly state the inverse case — e.g. use quotes_accept for internal/workspace-side acceptance — so it stops short of a full when/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_resolveA
DestructiveIdempotent

Löse einen Portal-Token auf (the single verb the hosted page calls; agents call it to test a grant end to end): hashes the presented token, loads the grant, enforces expiry/revocation and the THREE FENCES (workspace -> contact -> scope), and returns ONLY the scoped read model: invoices (number, dates, total + open amount from A11/A14, QR reference read verbatim), quotes (C02 state), documents (E00 metadata). An expired or revoked token, a draft not yet activated by portal_grant_send (D157), or one scoped to another contact, returns grant_denied indistinguishably (no oracle). Token-authenticated, pre-workspace: no workspaceId. Computes no money, posts nothing; every resolve/denial lands in audit_log.

NameRequiredDescriptionDefault
tokenYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotent/destructive annotations: discloses the three-fence evaluation order, that denials are returned as an indistinguishable grant_denied (no oracle), that it is token-authenticated pre-workspace with no workspaceId, and that every call writes to audit_log (which reconciles the destructiveHint=true even though it 'posts nothing'). This is exactly the security and side-effect context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the verb and core action, then layers in fences, return model, and failure semantics. Dense but every clause carries information; the parenthetical cross-references (A11/A14, C02, E00, D157) are compact but assume internal vocabulary an agent may not share.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-param, no-output-schema tool this is thorough: it enumerates the returned read model field by field (invoices, quotes, documents), spells out the denial conditions, and notes no money is computed and nothing is posted. An agent knows what it gets back and how failures manifest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one parameter at 0% schema coverage, the description carries the burden and mostly does: it explains the token is hashed, is a portal token, and that no workspaceId is required because resolution is pre-workspace. It still doesn't state token format length or how to obtain one, keeping it just under full marks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resolve) and resource (portal token), then enumerates exactly what it does: hash the token, load the grant, enforce expiry/revocation and the three fences, and return a scoped read model. It is clearly distinguished from siblings like portal_grant_send (activation) and portal_grant_revoke.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the when: it is the single verb the hosted page calls and agents use it to test a grant end to end, and it points to portal_grant_send (D157) as the prerequisite that must have happened first. It stops short of naming a full alternative-tool comparison, but the usage context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_sendA

Sende die Bestellung an den Lieferanten (draft -> sent, P8 draft-gated): renders the outbound PO PDF ARTIFACT and STOPS. It returns { artifactRef, transmitted:false } and NEVER emails the supplier on its own: transmission needs the approval dial (Pattern P8/OP4). A zero-line PO cannot leave draft (no_lines); a non-draft PO is refused (invalid_transition). CONSEQUENCE: Marks the purchase order as sent and makes its PDF for you to pass on; TILL emails nothing itself. To change it afterwards, you revise it or cancel it.

NameRequiredDescriptionDefault
poIdYes
actorNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false in annotations, the description carries the load and does it well: it discloses the state mutation, that it STOPS and never emails on its own, the returned payload { artifactRef, transmitted:false }, and named error codes. The approval-gating requirement (P8/OP4) is precisely the kind of behavioral context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core behavior is front-loaded, but the 'never emails' point is repeated three times ('NEVER emails the supplier on its own', 'CONSEQUENCE: ... TILL emails nothing itself'), and the German/English mixing adds noise. Trimming the duplication would make it sharper without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers outcomes, error modes, and gating well enough to call it safely. What it omits is parameter-level guidance and any note on permissions/authorization for the actor field, leaving half the invocation contract to guesswork.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters, and the description never explains poId, workspaceId, actor, or idempotencyKey. Idempotency in particular matters for a state-transition tool the agent may retry, and it is left entirely undocumented in both schema and prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (send the PO to the supplier) and pins the exact state transition (draft -> sent) while clarifying that the real output is a rendered PDF artifact, not an email. This lets an agent separate it from siblings like send_invoice, po_close_short, or po_revise without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States preconditions explicitly: only draft POs, zero-line POs fail with no_lines, non-draft POs are refused with invalid_transition, and transmission requires the approval dial (P8/OP4). It also points to the follow-up path ('you revise it or cancel it') but does not name the concrete sibling tools po_revise/po_cancel.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

post_entryA
Idempotent

Post a balanced double-entry journal entry (business sources only; reversal/close are separate tools). Instead of lines, template { standardId, asks } books a Vorlage (a Buchungsregel of scope manual, list_bank_standards): asks { legIndex: amountMinor } fills its asked legs (gross on a taxed leg), a same leg copies the asked leg it names, the rest leg balances the entry on its own side, and the lines are composed and judged exactly as compose_entry with that template answers them (the entry text defaults to the Vorlage name). Template refusals: rule_not_found, rule_invalid (an account or code the Vorlage names is no longer valid: archived, now a Bankkonto ledger, a code gone; invalidReason says which), wrong_scope (a bank rule), ask_missing, rest_is_zero, rest_changes_side; lines and template together are invalid_input. CONSEQUENCE: Books this in your accounts. If it is wrong, you correct it with a new correcting entry; both stay visible.

NameRequiredDescriptionDefault
refNo
dateYes
linesNo
sourceYes
entryIdNo
templateNo
descriptionNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

This description is extremely detailed, outlining the internal mechanism of the template filling process, listing specific failure modes (e.g., 'rule_not_found', 'wrong_scope'), and detailing the post-execution consequence of incorrect postings.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While highly informative, the description is extremely dense and long, reading more like internal technical documentation than an efficient guide. Its packed nature prevents a higher score here.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool description is comprehensively complete, covering the business rules, execution flow, template behavior, error handling, and correction policy, leaving no operational gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since schema coverage is 0%, the description must compensate fully. It succeeds by explaining the specific role of the `template` object and how it drives the creation and balancing of the `lines`, adding crucial logical context to the input parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the action ('Post a balanced double-entry journal entry') and defines its primary scope ('business sources only'). It further distinguishes itself from siblings by explicitly noting that reversal and closing are handled by separate tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear conditional usage by explaining that the input `template` structure is different from standard line entry, referencing the composition logic of the `compose_entry` tool to guide the user.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

post_fx_revaluationA
Idempotent

Post the period-end UNREALISED currency gain/loss as a balanced entry (source fx) plus its next-period reversal, atomically. The unrealised difference books to account 6949 against each revalued position, and the entry auto-reverses on the first day of the next period so the REALISED figure at settlement (A14/A18) is never double-counted. Idempotent per periodEnd: a re-post with the same key replays, a different key returns already_posted, a zero-diff period posts nothing. Refuses needs_rate when any open FC position lacks a closing rate, and period_locked for a locked target period (A03). CONSEQUENCE: Books the period-end currency gain or loss, with its automatic reversal on the first day of the next period. If it is wrong, you revert the run with correcting entries; the originals stay visible.

NameRequiredDescriptionDefault
periodEndYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotent/destructive annotations: atomic multi-entry posting, auto-reversal on the first day of the next period, target account 6949, double-count avoidance at settlement, and a full idempotency matrix (same key replays, different key returns `already_posted`, zero diff posts nothing). The CONSEQUENCE sentence discloses the mutation and that corrections require manual correcting entries with originals left visible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its accounting effect, then conditions, then consequences – a sensible order with no filler. The closing CONSEQUENCE sentence restates the reversal already described and is only partly earning its space, so not a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only two annotations, the description supplies everything an agent needs: refusals, error-ish return tokens, atomicity, reversal timing, account mapping, and recoverability. Nothing material is missing for a correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden; it explains that idempotency is scoped per `periodEnd` and defines `idempotencyKey` behaviour precisely (replay vs `already_posted`). `workspaceId` is left undocumented but is self-evident from context, keeping this short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (post), a specific resource (period-end unrealised FX gain/loss entry), and the exact side effect (balanced entry with source `fx` plus next-period reversal). It is clearly distinguishable from siblings like fx_revaluation (preview), fx_revaluation_reverse, and post_entry.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies the correct moment (period-end) and gives concrete preconditions that gate use: refuses `needs_rate` without closing rates and `period_locked` for a locked period. It never names an alternative sibling (e.g. fx_revaluation preview) or an explicit 'do not use when' clause, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

post_vendor_billA
Idempotent

Post an existing draft bill to the ledger (bucht die Kreditorenrechnung). The figures are recomputed from the stored input at the supply date, so a draft that sat across a rate change or a VAT-method change books what is correct now rather than what a stale preview cached. Refuses already_posted with the entry the bill already carries, and period_locked when the bill date falls in a locked period. CONSEQUENCE: Books the vendor bill in your accounts. If it is wrong, you void the bill, which books a correcting entry; both stay on record.

NameRequiredDescriptionDefault
workspaceIdYes
vendorBillIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it explains that figures are recomputed from stored input at the supply date so rate or VAT-method changes are honored, enumerates the two error outcomes, and states the consequence plus the correction path (void books a correcting entry, both stay on record). This is exactly the kind of non-obvious mutation semantics an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then rationale, then error conditions, then a flagged CONSEQUENCE block. Every sentence carries information, though the recomputation rationale is somewhat verbose for the value it adds to an invocation decision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should say what a successful post returns (e.g. the entry created) but only describes the already_posted error payload. Combined with undocumented parameters, an agent knows why and when to call this but not precisely what to expect back or what to put in each field.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters (workspaceId, vendorBillId, idempotencyKey) have 0% schema description coverage, and the description adds nothing about them. Most notably, the idempotencyKey is never explained despite idempotentHint=true, leaving the agent to guess how retries are deduplicated. This is a clear compensation gap given the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Post an existing draft bill to the ledger'), reinforced by the German term 'bucht die Kreditorenrechnung'. It is immediately distinguishable from create_vendor_bill and void_vendor_bill in the sibling list, and it makes clear this operates on a pre-existing draft rather than creating one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Post an existing draft bill' implies the precondition that a draft must already exist (created via create_vendor_bill), and the description names the two refusal conditions (already_posted, period_locked), which tells the agent when the call will fail. It does not explicitly name alternatives or say when not to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_upsertA

Lege eine Bestellung an oder bearbeite sie: a purchase order (its OWN D02 document, reusing Pattern P7 on purchase_order.status, NOT an A10 document kind) on a C00 supplier contact with D00 item lines. Each item line is priced once via resolveSupplierPrice (latest supplier valid_from, else the item cost price) unless an explicit unitPriceRappen is given, and its expected tax code resolved once through A05 (H-VAT-TRACE), then snapshotted on the po_line. POSTS NOTHING and touches no stock: the financial effect stays on the A17 vendor bill (P3). A EUR order snapshots the CHF/txn fx_rate (H-FX). Passing poId edits an existing DRAFT (a sent PO is refused with invalid_transition; changes go through po_revise). A line may carry projectId, a B00 project tag for the B03 Projekterfolg (reporting only: it prices nothing; B03 reads it for accrued/committed purchase cost). A supplier that is not a C00 contact, or a line with an unknown itemId or projectId, is refused (invalid_reference); qty <= 0 is invalid_qty.

NameRequiredDescriptionDefault
noteNo
poIdNo
actorNo
linesNo
currencyNo
workspaceIdYes
idempotencyKeyNo
supplierContactIdNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry destructiveHint=false, and the description goes well beyond that: it discloses that nothing is posted, no stock is touched, the financial effect lives on the A17 vendor bill, prices and tax codes are resolved once and then snapshotted on the line, and a EUR order snapshots the fx_rate. It also enumerates the refusal conditions (invalid_reference, invalid_qty, invalid_transition), which is exactly the behavioral context an agent needs before mutating.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded, which is good, but the body is a single dense run of internal codes (D02, P7, C00, D00, A05, H-VAT-TRACE, A17/P3, B00/B03) that require outside knowledge and slow parsing. Little is wasted in the strict sense, yet the mixed German/English and code-soup phrasing hurts scanability for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation with no output schema and near-zero annotation coverage, the description covers the essentials: side effects, snapshot timing, validation failures, and the draft-only edit constraint. What it does not address is what comes back (created/updated PO identifier or full object) and how idempotencyKey behaves, which are the remaining gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning, and it does so for the high-stakes ones: poId semantics (edit draft only), supplierContactId must be a C00 contact, line-level unitPriceRappen overriding resolveSupplierPrice, projectId as a reporting-only B00 tag, qty <= 0 rejection, and currency triggering CHF/txn fx snapshotting. It leaves workspaceId, note, actor, idempotencyKey, taxCode and description unexplained, which keeps it short of a 5 at 0% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening clause gives a specific verb and resource in one shot: create or edit a purchase order, and immediately scopes it ("its OWN D02 document ... NOT an A10 document kind") so it cannot be confused with the generic document tools. It also names po_revise as the path for changes to a sent PO, which separates it from the nearest sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states precisely when this applies (new order, or poId to edit an existing DRAFT) and when it does not (a sent PO is refused with invalid_transition; changes go through po_revise). The only omission is that po_send/po_cancel framing is implied rather than spelled out, which is minor given po_revise is explicitly routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_version_diffB
Read-only

Vergleiche zwei Versionen derselben Bestellung (OP14, P5): the exact header- and line-level changes (qty, price, description, added, removed, tax) between two versions, in a structured form for GUI and agents. Pure. Two versions of DIFFERENT purchase orders are refused (invalid_reference); an unknown version id is not_found.

NameRequiredDescriptionDefault
toVersionIdYes
workspaceIdYes
fromVersionIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint=true, so the description does not need to restate read-only, but it adds 'Pure.' which reinforces that. More importantly, it discloses error behaviors (refusing different purchase orders with invalid_reference and unknown version ids with not_found), which is valuable behavioral context beyond the annotations. It also lists the types of changes captured, giving agents a preview of the output focus.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loads the core purpose. However, it mixes German and English and includes the ambiguous word 'Pure.', which adds minor noise. Overall it is reasonably concise and structured, but could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should describe the return structure. It mentions 'structured form' and lists the fields (qty, price, description, added, removed, tax), but does not specify the exact JSON shape, nesting, or how changes are represented (e.g., old/new values). It also does not explain how version IDs are obtained or what workspaceId is for. The error cases are covered, but key operational details are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate by explaining parameters. It only mentions 'two versions' without explicitly mapping fromVersionId, toVersionId, and workspaceId. There is no explanation of parameter formats, required relationships, or how to obtain version IDs. This is a significant gap given the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool compares two versions of the same purchase order and lists the specific change dimensions (qty, price, description, added, removed, tax). It specifies the resource and action, but does not explicitly name sibling tools like po_version_get, so it does not fully distinguish from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for comparing versions, but does not explicitly state when to use it over related tools (e.g., po_version_get, po_version_list). It does mention error conditions (invalid_reference for different POs, not_found for unknown IDs), which helps agents decide when the tool is applicable, but there is no explicit guidance on alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_version_getB
Read-only

Lies eine einzelne, eingefrorene PO-Version (OP14, P5): the full immutable snapshot (header + lines) of ONE version, exactly as it stood when that version became active. The Treuhänder-Rekonstruktion of the commitment at a point in time (OR 957a). A version id from another workspace is refused (not_found, §H-TENANT).

NameRequiredDescriptionDefault
versionIdYes
workspaceIdYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, which the description aligns with. The description adds the immutable snapshot behavior and the cross-workspace rejection (not_found). However, it does not mention potential rate limits, authentication requirements, or what happens on non-existent versions beyond the cross-workspace case. It adds some value but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core purpose. It packs a lot of information into three sentences with no fluff. The only minor issue is the mixed-language phrasing and the parenthetical §H-TENANT, which might be less clear to a general agent, but overall it is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with two parameters, the description covers the core behavior. However, given the lack of output schema and parameter descriptions, it could benefit from explaining the return structure or stating that versionId is opaque. The cross-workspace behavior is covered, but other error cases are not. It is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the schema itself provides no descriptions for the two parameters. The description indirectly refers to workspaceId via the cross-workspace note but does not provide explicit syntax or format for versionId or workspaceId. It adds a little meaning but leaves the agent to infer parameter purposes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (read a single frozen PO version) and the resource (PO version snapshot). It distinguishes from siblings by emphasizing immutability and the full snapshot. However, it does not explicitly name a sibling like po_get or po_version_list, so differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (to reconstruct commitment at a point in time, matching OR 957a) but does not explicitly state when not to use it or provide alternatives. It hints at the cross-workspace refusal, but usage guidance is more implicit than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

po_version_listB
Read-only

Liste die Versionshistorie einer Bestellung (OP14, P5): the ordered version trail (1..N) of a purchase order, each row carrying its number, status (active | superseded), the amendment reason that produced it, actor, timestamp and the frozen sent artifact. Materialises version 1 on first touch, so a legacy D02 PO created before I01 shows a complete history. An empty PO id is refused (not_found).

NameRequiredDescriptionDefault
poIdYes
workspaceIdYes

TDQS

B3.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotation Contradiction: annotations declare readOnlyHint=true, but the description states the tool 'Materialises version 1 on first touch', which is an explicit side effect that creates a version row. Even though the description is otherwise transparent about the materialisation and error behavior, this direct conflict with the read-only annotation forces a score of 1.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with purpose, itemizes the row fields, and adds materialisation and error behaviour in a compact paragraph. The bilingual repetition and domain-specific codes (OP14, D02, I01) add mild noise, but every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with two obvious parameters, the description covers the returned row fields, the lazy materialisation effect, and the empty-id refusal. It lacks an explicit return contract and workspaceId semantics, but these are minor gaps given the description's detail and the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only adds that an empty PO id is refused and does not explain the semantics or format of poId or workspaceId. The general reference to a purchase order gives some context, but the description does not map clearly to both required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description leads with a concrete verb and resource: 'Liste die Versionshistorie einer Bestellung' and clarifies it as 'the ordered version trail (1..N) of a purchase order'. This clearly defines a list-versions operation and differentiates it from siblings like po_version_get or po_version_diff by describing the full trail and row contents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when it applies (listing all versions of a PO, including legacy POs) and gives a useful constraint (empty PO id refused). However, it does not explicitly mention alternatives or state when to use po_version_get/diff instead, leaving some selection logic to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prefs_getA
Read-only

Read one of the calling person's own preferences by key (for example appearance.theme): the value in force, the default and whether it is the default. An unknown key is unknown_pref, with the key it most likely meant as suggestion and the known keys.

NameRequiredDescriptionDefault
keyYes
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered; the description goes further by disclosing the return payload (value in force, default value, whether it is the default) and the failure contract (unknown_pref with a suggested near-match and the known keys). That error-shape disclosure is genuinely useful and not derivable from structured fields, though nothing is said about the workspace scoping behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the action and resource, then the return payload and error behavior. No filler; slightly compressed phrasing ('the value in force, the default and whether it is the default') but each clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with no output schema, the description supplies return-value meaning and the unknown-key error contract. The only material gap is the undocumented workspaceId parameter; otherwise an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for both parameters. The description compensates well for `key` (example format, unknown-key handling) but says nothing about the required `workspaceId`, leaving an agent to guess which workspace's preferences are read.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'Read one of the calling person's own preferences by key', plus a concrete example key (appearance.theme). 'One ... by key' implicitly separates it from prefs_list, but the sibling is never named, so the differentiation is inferred rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: read a single preference when you already know its key. There is no explicit statement of when to use this versus prefs_list (enumerate all) or prefs_set/prefs_reset, and no note on whether workspaceId must already be known.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prefs_listB
Read-only

List the calling person's own preferences (Meine Einstellungen), optionally one area: per preference the key, the value in force, the default, isDefault, the value schema, the scope (person: the same in every workspace; workspace: this workspace only), the area, en and de-CH label, description and per-value labels. A preference with no stored value reads its default. Never returns another person's preferences. An unknown area is unknown_pref_area.

NameRequiredDescriptionDefault
areaNo
workspaceIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers safety, and the description adds useful behavior: the return-field inventory, the default fallback when no value is stored, the privacy boundary, and the unknown-area error name. It does not cover auth or rate-limit concerns, but it meaningfully exceeds the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, and each later sentence adds a distinct fact: default fallback, privacy boundary, and error behavior. The field enumeration is dense, but it is justified because there is no output schema to document return values.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool without an output schema, the description usefully documents the returned fields and key behaviors. However, with zero schema descriptions it leaves workspaceId semantics and area format unexplained, so an agent still lacks full parameter context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain both parameters. It partially clarifies the optional 'area' parameter (one area at a time; unknown area returns unknown_pref_area) but says nothing about the required workspaceId or any area format details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: list the calling person's own preferences, optionally one area, and reinforces scope with 'Meine Einstellungen' and 'Never returns another person's preferences'. It is clear what the tool does, though it does not explicitly distinguish itself from siblings such as prefs_get or settings_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: retrieving one's own preferences, optionally narrowed by area, and it states the own-person boundary. However, it gives no explicit guidance versus alternatives like prefs_get, prefs_set, prefs_reset, settings_list, or notifications_list_preferences.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prefs_resetA
DestructiveIdempotent

Return the calling person's own preference to its default, either one key or every preference of one area (exactly one of key or area). Removes only the caller's own stored values; nothing stored means nothing changes. Answers the keys it reset. The way back is prefs_set.

NameRequiredDescriptionDefault
keyNo
areaNo
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint; the description adds the reason for destructiveness (only the caller's own stored values are removed, and nothing stored means no change) and discloses the return content ('answers the keys it reset') despite no output schema. It does not discuss permissions or whether defaults can be reinstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences with no filler; the operation, the constraint, the safety note, and the inverse tool are all front-loaded in that order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a small mutation tool with hint annotations, the description covers scope, edge cases, return content, and the inverse operation. The only missing piece an agent needs to call it correctly is the meaning of the required workspaceId.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden. It usefully explains that key and area are mutually exclusive alternatives, but the required workspaceId parameter is never mentioned, leaving one of three parameters completely undefined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Return the calling person's own preference to its default') plus the exact scope of the operation (one key or one area). It is clearly separable from the sibling prefs_set, which it explicitly names as the inverse.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives the mutual-exclusion rule ('exactly one of key or area') and routes the agent to prefs_set as the way back. It gives clear context but does not address when to prefer this over the analogous settings_reset tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prefs_setA
DestructiveIdempotent

Set one of the calling person's own preferences (a look or arrangement, never anything the books do; workspace behaviour is settings_set). value must fit the key's schema exactly (invalid_pref_value otherwise; an unknown key is unknown_pref with a suggestion). Setting the value already in force changes nothing. Changes only the caller's own value. The way back is prefs_set to previousValue, which the answer names, or prefs_reset.

NameRequiredDescriptionDefault
keyYes
valueYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: no-op on identical value (consistent with idempotentHint), caller-scoped only, and the two error outcomes (invalid_pref_value, unknown_pref with a suggestion) including the returnable previousValue. It never explains the overwrite/irreversibility implied by destructiveHint=true, though it does disclose the recovery route, so the gap is modest rather than contradictory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and the sibling exclusion, then layers errors and undo paths; every clause carries information. Slightly dense with stacked parentheticals, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-required-parameter mutation with no output schema, the description covers scope, validation errors, no-op behavior, and reversal, which is most of what an agent needs. The unaddressed workspaceId and the unexplained destructiveHint are the remaining gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden: it explains that value must conform to the key's own schema and that an unknown key yields unknown_pref, which is genuinely useful. However the third required parameter workspaceId is never mentioned, and no key format or value examples are given, so compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Set one of the calling person's own preferences") plus a scope restriction ("a look or arrangement, never anything the books do") that separates it from the sibling settings_set by name. An agent can route between prefs_set and settings_set without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative for the excluded case ("workspace behaviour is settings_set") and points to prefs_reset and a prefs_set-back-to-previousValue call as the undo paths. When-to-use, when-not-to-use, and alternatives are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_feedbackB
DestructiveIdempotent

Write a feedback report to ~/.till/feedback and return a mailto link for it. TILL cannot send: the report is handed to the operator to send from their own mail client. CONSEQUENCE: Writes your feedback report, with diagnostics if you include them, to a file on this machine and returns a mail link for it. TILL sends nothing; once you send it, it cannot be called back.

NameRequiredDescriptionDefault
kindNo
localeNo
messageYes
subjectYes
clientErrorNo
workspaceIdYes
idempotencyKeyYes
includeDiagnosticsNo

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds context the annotations cannot convey: it writes to ~/.till/feedback on this machine, TILL sends nothing, and the report cannot be called back once mailed. That is exactly the value-add expected when annotations exist. It stops short of saying what a repeat call does to an existing file, which matters given a file write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first two sentences are front-loaded and earn their place, but the 'CONSEQUENCE:' sentence restates them almost verbatim ('Writes ... returns a mail link ... TILL sends nothing'), which is material redundancy in a short description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, annotating the return value as a mailto link was necessary and is done. But for a mutation tool with 8 undocumented parameters and a nested object, the description leaves too much of the calling contract unspecified to be complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 8 parameters, so the description must carry the burden. It only indirectly touches includeDiagnostics ('with diagnostics if you include them') and implies subject/message; workspaceId, idempotencyKey, kind, locale, and the nested clientError object are entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (write a feedback report) plus the non-obvious artifact returned (a mailto link), which clearly separates it from sender-style siblings. It never names preview_feedback or list_feedback, so the boundary with the read-only feedback siblings is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'TILL cannot send: the report is handed to the operator' explains the delivery model, from which an agent can infer this is the tool for submitting feedback. But it does not say when to use this versus preview_feedback, and gives no prerequisite or exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_periodA
Idempotent

Ready a period for the Treuhänder's review: builds one packet (review coverage, draft count, unmatched bank items from the camt and QR queues, open debtors, MWST preview) and leaves machine flags on anomalies it detects (a duplicate-looking posting, a line missing a tax code where the account declares a default). It never approves, locks, or exports: those stay human acts. Idempotent per period, a re-run refreshes the packet and never duplicates a flag.

NameRequiredDescriptionDefault
periodYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the description's idempotency statement reinforces rather than adds. It does add real behavioral context beyond the annotations: it discloses the side effect of leaving machine flags on detected anomalies (duplicate-looking postings, missing tax codes against account defaults) and the refresh-not-duplicate re-run semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the action and packet contents, followed by the exclusion clause and idempotency note. The parentheticals earn their place by naming concrete anomaly types, though the second sentence is somewhat compressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the work of describing the return: a single packet enumerating its five sections, plus the flags it leaves behind. It stops short of saying how the packet or flags are returned/where they surface, and leaves the parameter contract unaddressed, so it is strong but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three required parameters (workspaceId, period, idempotencyKey) have zero schema description coverage, so the description carries the full burden and largely fails it. Only "per period" hints at period scoping; workspaceId and the required idempotencyKey are never explained, including whether the key must be unique per period or shared across re-runs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ("Ready a period") plus the exact packet contents it assembles (review coverage, draft count, unmatched bank items, open debtors, MWST preview), and explicitly excludes approve/lock/export, which separates it from close_month, lock_period and export_journal. An agent can identify the tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It frames the trigger clearly (preparing a period for the Treuhänder's review) and states the boundary case: "It never approves, locks, or exports: those stay human acts." It does not name the specific sibling tools that perform those acts, so the agent must infer close_month/lock_period/export_journal, which keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_bank_opening_balanceA
Read-only

Show what set_bank_opening_balance WOULD post for a Bankkonto, in the workspace base currency, without posting anything: the base amount, the rate it converted on, and the two legs (the Bankkonto's verknüpftes Konto against 9100 Eröffnungsbilanz). It runs the posting's own arithmetic, so the FIGURE cannot disagree, and it answers the same refusals the posting answers for the state it reads (needs_account for a missing or archived 9100, currency_mismatch, opening_balance_already_set, needs_fx_rate, period_locked). It is not a promise about the posting. It checks no capability, so a caller without the post right gets the full figure here, and at set_bank_opening_balance that caller is refused permission_denied at every amount, including the zero one that books no journal entry; that refusal is not always the FIRST one, because an unknown Bankkonto, an opening balance already set, or (above zero only) a missing 9100 is answered before the capability is consulted, and an idempotencyKey that replays an already-completed call still replays. It also holds no state, so a period locked, a 9100 archived or another actor posting in between still refuses there. Takes no idempotency key and can never post: use it before Buchen, because a posted opening balance is immutable and its only correction is a reversing entry.

NameRequiredDescriptionDefault
dateYes
fxRateNo
currencyNo
amountMinorYes
workspaceIdYes
bankAccountIdYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint:true, but the description discloses much more: the tool never posts, holds no state, checks no capability, is not a promise about the posting, and mirrors specific refusal conditions such as needs_account, currency_mismatch, and period_locked. No contradiction with the read-only annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long and dense, but every sentence contributes distinct operational facts: posting dry-run, refusal parity, no capability check, no state, no idempotency key, immutability of posted balances. It is front-loaded with the core purpose and the later details are earned given the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a preview tool with no output schema, the description states exactly what the preview returns (base amount, rate, two legs), which error conditions it mirrors, and the critical caveat that it is not a promise about the posting. An agent has sufficient operational and safety context to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not systematically explain any parameter. It provides loose context by mentioning the base amount, conversion rate, and Bankkonto, but it never clarifies workspaceId, bankAccountId, amountMinor as minor units, date, currency, or fxRate. Parameter names are mostly self-explanatory, so this is not a 1, but the gap is real.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb ('Show') and clearly identifies the resource and operation ('what set_bank_opening_balance WOULD post for a Bankkonto'), while immediately stating it posts nothing. This distinguishes it decisively from the sibling set_bank_opening_balance and leaves no ambiguity about its role as a dry-run preview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs 'use it before Buchen' and explains why: a posted opening balance is immutable and only correctable by a reversing entry. It also describes the preview's divergence from the real posting (no capability check, no state held, same refusals), giving an agent clear when-to-use and expectations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_document_templateA
Read-only

Render a template preview as PDF bytes, mutating nothing: against sampleDocumentId, else the most recent real document of the template's kind, else synthetic MUSTER-watermarked sample data that is never a payable document (no fabricated QR code; a missing QR-IBAN surfaces A11's own needs_qr_iban cause).

NameRequiredDescriptionDefault
templateIdYes
workspaceIdYes
sampleDocumentIdNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnlyHint annotation by disclosing fallback precedence, synthetic MUSTER-watermarked data, that it is never a payable document, that it does not fabricate a QR code, and that a missing QR-IBAN surfaces A11's own needs_qr_iban cause. This is rich behavioral context with 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the action and safety guarantee, then adds the fallback chain and watermark/QR caveats. Every clause carries distinct, decision-relevant information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read-only preview tool, this is complete: it states the output (PDF bytes), the non-mutating guarantee, the data-source fallback chain, and the important sample-data caveats. No output schema exists, but the description already covers the essential return and behavior information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining the optional sampleDocumentId as the preferred preview source and implying templateId through 'the template's kind'. It does not describe workspaceId or parameter types, so it is helpful but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with 'Render a template preview as PDF bytes, mutating nothing', naming the verb, resource, output format, and non-mutating nature. It clearly distinguishes this from list/get/update/archive template siblings by framing it as a preview action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context: use it to render a preview against sampleDocumentId, otherwise fall back to the most recent real document of the template's kind, otherwise synthetic sample data. It does not explicitly name sibling alternatives or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_feedbackA
Read-only

Render exactly what a feedback report would contain, writing nothing. Use it to show a person what would be sent before it is.

NameRequiredDescriptionDefault
kindNo
localeNo
messageYes
subjectYes
clientErrorNo
workspaceIdYes
includeDiagnosticsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reinforces the readOnlyHint with 'writing nothing' and adds the fidelity promise of rendering exactly what would be sent. No contradiction exists, but the safety behavior is already carried by annotations and no further behavioral detail is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short, front-loaded sentences with no filler. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The high-level purpose is clear, but 7 parameters are unexplained and there is no output schema to fill in the gaps. The tool is not fully callable by an agent without guessing at parameter semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and 7 parameters, the description gives no meaning for workspaceId, subject, message, kind, locale, clientError, or includeDiagnostics. The agent is left without parameter-level guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Render exactly what a feedback report would contain'. 'Writing nothing' clearly differentiates it from mutating or send-like siblings such as prepare_feedback or list_feedback.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it to show a person what would be sent before it is' gives clear timing and context: invoke it before sending a feedback report. It does not explicitly name alternatives or exclude cases, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_opening_importA
Read-only

Dry-run already-parsed migration rows into an opening position without writing anything: normalises a signed balance column or a debit/credit pair into integer Rappen, resolves each account number against the chart, and reports the rows the chart does not know (unmapped) alongside the balance check. Takes rows as an array of column-value objects, NOT a CSV string: parsing the export into rows is the caller's step. It refuses the same things import_opening_balances refuses, including an account named twice, so a preview that comes back clean is not followed by a surprise rejection. This reports what the FILE says and whether its own two sides agree; it cannot tell you the file is the right one, so compare the per-account lines against the Beleg. It takes no idempotency key and can never post.

NameRequiredDescriptionDefault
asOfNo
rowsYes
formatNo
mappingNo
referenceNo
workspaceIdYes
differenceAccountNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare readOnlyHint=true, but the description goes further by stating 'without writing anything' and 'can never post.' It also discloses the normalization process, account resolution, reporting of unmapped rows, refusal of duplicate accounts, and the inability to verify file correctness—rich context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence contributes: purpose, input format, validation behavior, limitation, and idempotency. It is front-loaded with the dry-run nature and avoids fluff, though it is slightly long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 7 parameters, a nested mapping object, and no output schema, the description covers the core behavior and input requirements, including what it reports (unmapped rows and balance check). It omits details on optional parameters and the exact output structure, but these are secondary to the tool's main use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It explains the rows parameter (array of column-value objects, not CSV) and touches on balance/debit/credit normalization, but does not explain asOf, format, reference, differenceAccount, or the mapping object's field semantics. It adds some value but leaves significant gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: a dry-run of migration rows into an opening position, with specific actions like normalizing balances and resolving account numbers. It distinguishes itself from import_opening_balances by being read-only and taking parsed rows, making it easy to differentiate from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names import_opening_balances as the sibling it mirrors and clarifies the input format (rows array, not CSV). It also provides a limitation (cannot tell if the file is correct) and advises comparing against the Beleg, giving clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_open_itemsA
Read-only

Preview an open-items migration for one plan and side (ar Debitoren or ap Kreditoren): compute the control tie-out the batch WOULD produce (the migrated open total against the opening 1100 Debitoren or 2000 Kreditoren line, integer Rappen, zero tolerance, G11 three-status honesty) and surface every refusal (open_item_total_mismatch, contact_unmapped/vendor_unmapped, tax_unresolved, needs_fx_rate) naming the offending row, WITHOUT writing anything. priorYearDetail (live or archive, default archive) governs whether an already-settled prior-year row is carried live or belongs in the G13 archive.

NameRequiredDescriptionDefault
rowsYes
sideYes
planIdYes
workspaceIdYes
priorYearDetailNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the readOnlyHint annotation by stating 'WITHOUT writing anything' and detailing the exact refusal types it surfaces, the zero tolerance, integer Rappen, and G11 three-status honesty. It also explains the priorYearDetail option's effect. This is rich behavioral disclosure that aligns with and extends the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense with essential information. It front-loads the purpose and key constraints, then lists refusal types and the priorYearDetail behavior. Every sentence contributes value; there is no filler. It is structured logically, moving from what it does to how it behaves to the configurable option.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 params, no output schema), the description covers the main behavior, refusal types, and the priorYearDetail switch. It does not specify the exact return structure, but it names the refusal categories and indicates it surfaces them with offending rows, which is sufficient for an agent to understand the outcome. It is reasonably complete for a preview tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining the key parameters: planId and side are implied by 'one plan and side', rows are referenced as the input rows that may cause refusals, and priorYearDetail is explicitly described. workspaceId is not detailed, but the description provides enough semantic context for an agent to understand the tool's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool previews an open-items migration for a specific plan and side, computes a control tie-out, and surfaces refusals without writing. It distinguishes itself from migration execution tools by explicitly stating it is a preview and names the exact refusal types. The verb 'preview' is specific, and the resource is open-items migration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is a dry-run before committing a migration, saying it computes what the batch WOULD produce and surfaces refusals without writing. It does not explicitly name alternative tools, but the preview nature and the mention of priorYearDetail behavior give clear context for when to use it. There is no explicit when-not-to-use, but the intent is unmistakable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_paymentA
Read-only

Preview exactly what a payment would post, without writing anything: the remainder still to allocate, each document's resulting open amount and status, the Skonto VAT split, the Ist-timing paid-portion VAT, the currency conversion with its realised difference, and the journal legs with account numbers and labels. Call this before record_payment so the figures a human sees and the figures the ledger books are the same figures. It takes no intent and can never post.

NameRequiredDescriptionDefault
dateYes
fxRateNo
sourceNo
currencyNo
directionYes
referenceNo
allocationsNo
amountMinorYes
workspaceIdYes
bankAccountIdYes
counterpartyIdNo
onAccountMinorNo
counterpartyKindNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description reinforces this with 'without writing anything' and 'can never post,' which adds helpful safety context. It also enumerates the detailed outputs it returns, giving the agent a clear picture of what the preview will contain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the key point and enumerates outputs in a dense but organized way. Some redundancy exists in phrases like 'without writing anything' and 'can never post,' but overall the description is appropriately structured for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 13 parameters, no output schema, and no parameter descriptions, the description provides useful output context but leaves input semantics largely unaddressed. It explains what the preview produces and when to call it, making it minimally viable, but not complete enough for an agent to confidently construct all parameter values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 13 parameters, so the description carries a heavy burden to explain how inputs relate to concepts like allocations, skonto, VAT splits, and currency conversion. It names some concepts in outputs but does not map them to parameters or clarify semantics for required fields. This is a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation is a read-only preview of what a payment would post and explicitly names record_payment as the mutating counterpart. This strongly differentiates it from sibling payment tools like record_payment and allocate_payment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives direct usage guidance: 'Call this before record_payment' and emphasizes that it 'can never post' and takes no intent. This tells the agent exactly when to use it and distinguishes it from the related mutating payment tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_plugin_installA
Read-only

Prüfe eine Erweiterung vor der Installation (US-G02.1): parse a .tillplugin bundle`s manifest and return its name, version, declared capabilities (which MCP tools, Studio screens, report sources, automation actions it registers) and requested permission scopes, plus whether it is compatible with the current core, WITHOUT persisting anything and WITHOUT starting a sandbox. A malformed manifest answers invalid_manifest naming what failed to parse.

NameRequiredDescriptionDefault
sourceYes
packageRefYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral context beyond that: parsing the manifest, persisting nothing, starting no sandbox, and answering invalid_manifest for malformed bundles with the parse failure named. This is genuinely useful additional context and does not contradict anything 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is effectively front-loaded and the capability-category list is informative, but the text is one dense run-on sentence mixing German and English with a stray requirement ID (US-G02.1) and a typo ('.tillplugin' bundle's'). Splitting it into shorter sentences and trimming the noise would improve scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description compensates reasonably by spelling out the returned metadata fields and the invalid_manifest error case. The major gap is the complete absence of input-parameter guidance plus no explicit statement of the success signal, leaving an agent uncertain how to construct the three required arguments.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three required parameters (workspaceId, source, packageRef), and the description never explains what each parameter carries or how they reference the bundle. The mention of '.tillplugin bundle' lets an agent infer that source/packageRef relate to the plugin package, but the required input semantics remain essentially guesswork.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Prüfe eine Erweiterung vor der Installation' — check an extension before install) and precisely enumerates what is returned: name, version, declared capabilities, permission scopes, and core compatibility. This clearly differentiates it from sibling tools like install_plugin, enable_plugin, and the registry lookup tools even before examining their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'vor der Installation' frames this as the pre-install check step, and the explicit negations ('WITHOUT persisting anything and WITHOUT starting a sandbox') further clarify it is a safe inspection to run before invoking install_plugin. However, it never names a sibling alternative or states an exclusion like 'call install_plugin only after this returns compatible', so it just misses the explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_lists_deleteA
Destructive

Delete a price list together with its price rows. A price row has no reader apart from its list and a document line already snapshots the price it resolved, so the cascade removes nothing any issued document depends on. Refused with price_list_referenced if anything still points at the list. CONSEQUENCE: Deletes the price list and all its dated prices for good. Documents already made keep the prices they used; the list itself cannot be restored.

NameRequiredDescriptionDefault
priceListIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true; the description goes well beyond that by explaining what the cascade actually destroys (list plus all dated prices), why it is safe (rows have no reader apart from the list, documents snapshot their resolved price), the failure mode (price_list_referenced), and irreversibility ("cannot be restored"). This is exactly the extra context a destructive tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then the safety rationale, then the blast radius — a sensible order. The CONSEQUENCE sentence partially restates the opening sentence (deleting list and rows), so a small amount of text is redundant rather than additive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With destructiveHint as the only annotation and no output schema, the description covers durability, side effects on issued documents, and the refusal code, which is nearly everything an agent needs before a destructive call. The gap is the unmentioned idempotencyKey, which matters for safe retries of a delete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters, so the description must carry the load and it does not. Neither workspaceId, priceListId, nor the retry-safety idempotencyKey is mentioned, described, or exemplified anywhere in the text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ("Delete a price list together with its price rows") and states the cascade scope immediately. This is unmistakably distinct from price_lists_upsert, price_lists_set_price, price_lists_get, and price_lists_list in the sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete negative condition: refused with price_list_referenced if anything still points at the list, which tells the agent when the call will fail. It does not name an alternative path (e.g. price_lists_unset_price to remove individual rows instead of deleting the whole list), so usage context is clear but not fully routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_lists_getB
Read-only

Read one price list and its price rows (the validFrom history per item).

NameRequiredDescriptionDefault
priceListIdYes
workspaceIdYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe read operation, and the description agrees. It adds some output context by mentioning price rows and the validFrom history, but it does not disclose not-found behavior, pagination, or whether archived/deleted price lists are readable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It states the operation and the scope of returned data efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read operation with a readOnly hint and no output schema, the description is minimally viable: it identifies the resource and the key returned data. However, it leaves parameter semantics undocumented and does not describe the response shape in enough detail, so the agent must infer several operational details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no explanation of workspaceId or priceListId beyond the vague reference to 'one price list.' It does not compensate for the schema's lack of parameter documentation, leaving the agent to infer parameter meanings from names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Read') and a concrete resource ('one price list'), then clarifies what is returned: price rows and the validFrom history per item. This distinguishes the tool from price_lists_list and from mutation siblings like price_lists_upsert or price_lists_set_price.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Read one price list' implies a single-record retrieval use case, but the description never explicitly states when to use this tool instead of price_lists_list or mentions any alternatives/exclusions. Usage guidance is inferred from the singular scope and naming rather than clearly articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_lists_listB
Read-only

List the workspace price lists with their scope (contact or segment).

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already signals that the operation is safe and non-destructive. The description adds the detail that the output includes the scope (contact or segment), which is useful but does not go beyond that. It does not disclose any pagination, ordering, or potential size limits, but given the read-only annotation, a baseline of 3 is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no fluff. It front-loads the action and resource, then adds the scope detail. Every word adds value, and there is no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple list tool with one parameter and no output schema, which lowers the complexity bar. However, the description fails to explain the workspaceId parameter, and it does not hint at the return format or any list-level behavior (e.g., ordering, limits). For a tool that returns data, the lack of return type description is a notable gap, especially since schema coverage is zero.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not mention the workspaceId parameter at all. The agent has no textual explanation of what workspaceId means, its format, or any constraints. Since the schema provides only a type (string) and no further guidance, the description fails completely to compensate for the missing schema doc.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb 'List' and the resource 'workspace price lists', and it includes the meaningful detail that each list carries a scope of 'contact or segment'. This clearly distinguishes it from related tools like price_lists_get, price_lists_upsert, and price_lists_set_price, and leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention that it is the listing counterpart to price_lists_get or price_lists_upsert, nor does it state any conditions that would prefer this tool over others. The agent is left to infer usage from the name and sibling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_lists_set_priceA
Destructive

Set a list price for an item from a validFrom date (ISO YYYY-MM-DD; anything else is refused with invalid_input, never coerced). Price history is append-only: this adds a row rather than editing a past one, so a resolve at any date reads a stored integer Rappen amount.

NameRequiredDescriptionDefault
itemIdYes
currencyNo
validFromYes
priceMinorYes
priceListIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given only destructiveHint=true, the description carries real weight: it discloses strict input validation (non-ISO dates refused with invalid_input, never coerced), append-only immutability, and that the stored amount is an integer Rappen value. This is meaningful context an agent could not infer from the annotations or the bare schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the validation rule and append-only semantics front-loaded. The trailing 'so a resolve at any date reads a stored integer Rappen amount' is slightly convoluted but earns its place by tying storage format to read behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive 7-param mutation with no output schema and zero schema coverage, the description covers the core mutation and validation semantics but omits most parameter meanings and any return/response behavior. Adequate but with clear gaps an agent must discover from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 7 params, so the description must compensate. It clearly explains validFrom (ISO format) and priceMinor (integer Rappen), but leaves workspaceId, priceListId, itemId, currency, and idempotencyKey undocumented. Useful partial coverage but a clear gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Set) and resource (a list price for an item) with a temporal qualifier (from validFrom). An agent can tell it apart from a read like price_resolve, though it doesn't directly contrast with the closer write siblings price_lists_upsert and price_lists_unset_price.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'adds a row rather than editing a past one' framing implicitly distinguishes this from an in-place update, and the resolve mention hints at how the value is consumed. But there is no explicit when-to-use or when-not guidance relative to price_lists_upsert/unset_price.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_lists_unset_priceA
Destructive

Remove an item price from a list: pass validFrom to retract exactly that dated row, omit it to remove the item from the list entirely. Removing the item entirely is what makes price_resolve fall through to the next scope and what lets delete_item stop counting the list as a reference. Answers how many rows it took away, so a replay reports the same count and a repeat reports none. CONSEQUENCE: Removes the item's price from the list for good, one dated price or all of them. Documents already made keep their prices; to have it back, you enter the price again.

NameRequiredDescriptionDefault
itemIdYes
validFromNo
priceListIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag destructiveHint=true, and the description adds substantial context beyond that: exactly what is destroyed (one dated row vs. all prices for the item), the downstream consequences (price_resolve falls through to the next scope; delete_item stops counting the list as a reference), that issued documents keep their prices, and that recovery requires re-entering the price. It also discloses return semantics (row count) and replay behavior, which aligns with destructiveHint rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then mode semantics, then consequences — a good ordering. There is some redundancy: 'one dated price or all of them' restates the validFrom rule already given, costing a little density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with only destructiveHint and no output schema, the description covers consequences, irreversibility, downstream effects, and return count (row count) well. Gaps remain around permission requirements and the validFrom string format, which an agent would need to call it reliably.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load. It does well on validFrom (dated row vs. omit = all) and hints at idempotencyKey via 'a replay reports the same count', but gives no format for validFrom and never explains workspaceId/priceListId/itemId or the key's actual role.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Remove an item price from a list') and immediately scopes the two modes via validFrom. It also names the downstream tools affected (price_resolve, delete_item), so an agent can tell what this does and how it differs from setting/adding a price.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the when-to-use-each-mode rule: pass validFrom to retract exactly that dated row, omit it to remove the item entirely. It does not name a sibling to use instead when the goal is adding or updating a price (e.g., price_lists_set_price), so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_lists_upsertA
Destructive

Create or edit a price list, scoped to exactly one contact OR one segment (scope_ambiguous otherwise). One scope holds at most one list: a second list for a contact or segment that already has one is refused with scope_taken naming the existing list, so no price is ever resolved by insertion order. Pass priceListId to edit, omit it to create.

NameRequiredDescriptionDefault
nameNo
segmentNo
contactIdNo
priceListIdNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply destructiveHint=true; the description adds real context beyond that by disclosing the two failure modes (scope_ambiguous, scope_taken naming the existing list) and the invariant that one scope holds at most one list. It does not mention workspace requirements or whether an edit overwrites existing list entries, which keeps it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and front-loaded: purpose first, then scope rules, then the create/edit switch. The parenthetical error codes are dense but each adds usable behavior; no clause is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the risky semantics (scope exclusivity, duplicate refusal, edit-vs-create) well, but with six parameters, no schema descriptions, and no output schema, the definition leaves gaps an agent must guess at — notably what name does, what idempotencyKey means, and how workspace scoping interacts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden, and it does explain the non-obvious parameters: the contactId/segment exclusivity and priceListId as the create/edit discriminator. It says nothing about name, workspaceId, or idempotencyKey, leaving half the parameters undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create or edit a price list') and immediately adds the scoping rule that separates it from siblings like price_lists_set_price or price_lists_delete. An agent can tell what the tool owns in the price-list family without touching the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete decision rule for the two modes: 'Pass priceListId to edit, omit it to create', and states the mutually exclusive scoping precondition (exactly one contact OR one segment). It does not name sibling alternatives for the price-setting or deletion paths, so it stops just short of a full when-to-use map.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_resolveA
Read-only

Resolve the effective price of an item for a contact at a date: precedence contact then segment then base (the item base sales price), the latest validFrom that is in force winning within a scope. at is an ISO YYYY-MM-DD day (or a full ISO instant) and defaults to today; any other format is refused with invalid_input rather than compared, because a date that does not sort silently resolves the wrong price. Returns priceMinor, currency, and the source.

NameRequiredDescriptionDefault
atNo
itemIdYes
contactIdNo
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the safety profile, and the description adds materially beyond it: strict ISO-format validation on `at` with an explicit invalid_input refusal, the rationale that a non-sorting date silently resolves the wrong price, the today() default, the latest-validFrom tie-break, and the return contract (priceMinor, currency, source). This is precisely the behavioral context an agent needs beyond what structured 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core function and precedence, followed by the date contract and its rationale, closing with the return shape. The rationale sentence ('because a date that does not sort silently resolves the wrong price') earns its place by teaching the agent why strict formatting matters. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only a readOnly hint, the description carries the full burden and covers the essentials: computation rule, date handling, error behavior, and return values. Minor gaps remain — 'segment' and 'within a scope' are not precisely defined, and the relationship to price_lists_set_price/price_lists_get is unstated — but an agent has what it needs to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description must carry parameter meaning, and it does: `at` receives full treatment (ISO day or instant, defaults to today, strict validation), and itemId/contactId are mapped contextually via 'of an item for a contact.' workspaceId is left to convention, and the term 'segment' is named but not defined, so it stops short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb + resource: 'Resolve the effective price of an item for a contact at a date,' which clearly distinguishes this from raw price-list lookups (price_lists_get) and rate resolution (time_resolve_rate). The precedence chain 'contact then segment then base' defines exactly what computation this tool performs, so there is no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the resolution semantics — precedence and latest-validForm selection within a scope — giving an agent clear context for when this tool is the right choice: whenever the effective, precedence-resolved price is needed rather than a raw list lookup. It does not explicitly name alternative sibling tools or state when not to use it, which keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

procurement_anomaliesA
Read-only

Beschaffungs-Anomalien (procurement anomalies) since a date (default 30 days): a prioritised, DERIVED-not-stored list of unusual events with type, severity (info / warning / critical), a summary, the related PO / bill / supplier / requisition id, the detection date and a structured payload. Phase-1 types: large_price_variance, match_override_high_value, open_commitment_aging, stalled_requisition and grir_material_exposure. Thresholds are sensible defaults; this verb never writes them. Recomputed on every read, so the next read reflects the current state. Empty answers ok with an empty list. Filter by type or severity.

NameRequiredDescriptionDefault
limitNo
sinceNo
typesNo
severityNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds significant behavioral context: it is DERIVED-not-stored, recomputed on every read, never writes thresholds, and returns an empty list when there are no anomalies. This goes well beyond the annotation and provides clear expectations about side effects and freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph that front-loads the core purpose, then lists types, then behavior, then filtering. Every sentence adds value—there is no fluff or repetition. It is concise yet comprehensive, achieving high information density without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description must explain the return shape, which it does: it lists the fields (type, severity, summary, related IDs, detection date, payload). It also explains derived/recomputed behavior and empty-list handling. However, it does not specify the payload structure in detail, nor does it mention pagination or the default/expected limit behavior. For a tool with this complexity and no output schema, a bit more detail on the response format would be ideal, so 4 is fair.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no parameter descriptions (0% coverage), so the description carries the burden. It explains 'since' with a default of 30 days, lists the types that can be used for filtering, and mentions severity options (info/warning/critical). It does not describe the 'limit' parameter or the exact format for 'since' (e.g., ISO date), and 'workspaceId' is only implicitly required. While it covers most parameters meaningfully, it omits 'limit' and leaves some format details unspecified, so a 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this tool returns a derived, prioritized list of procurement anomalies with specific fields (type, severity, summary, related IDs, detection date, payload). It lists the phase-1 anomaly types and explicitly notes it is derived-not-stored, distinguishing it from stored reporting tools. This is a specific verb+resource with clear scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that thresholds are defaults and that this verb never writes them, implying read-only usage, and mentions filtering by type or severity. However, it does not explicitly state when to use this tool versus alternative procurement tools like procurement_open_commitments or procurement_match_status. There is no direct comparison or exclusion of alternatives, so the guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

procurement_grir_clearingA
Read-only

GR/IR-Abgrenzung (goods-received / invoice-received clearing) as of a date: two complementary sets from the live po_line counters, received-not-invoiced (received_qty > billed_qty) and invoiced-not-received (billed_qty > received_qty), each with its residual quantity and residual value at the PO base price (integer CHF Rappen), plus the net exposure. Status is cleared when both sides are empty within the materiality filter, else exposure_present. A pure projection that quantifies accrual exposure before period close; it never posts the accrual itself (that stays the period-close process). include_detail returns the per-line rows.

NameRequiredDescriptionDefault
as_ofNo
workspaceIdYes
supplier_idsNo
include_detailNo
materiality_rappenNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this by stating it 'never posts the accrual itself'. It further discloses the status logic ('cleared' vs 'exposure_present'), the unit (CHF Rappen), the source from 'live po_line counters', and the effect of include_detail. This goes well beyond the annotation to fully explain behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause contributes. It front-loads the core definition and uses parentheses and semicolons to pack in edge cases (integer CHF Rappen, status clearing condition) without rambling. No sentence is filler; it is efficient for a tool with this complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with no output schema, the description explains the logical output (two sets, residual values, net exposure, status) and the include_detail behavior. It does not specify the exact field names or formatting of the response, but since there is no output schema, the description gives enough for an agent to understand the result. Minor gap: supplier_ids semantics are not spelled out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters. It does so for as_of ('as of a date'), materiality_rappen ('materiality filter'), and include_detail ('returns the per-line rows'). supplier_ids is not explicitly mentioned, but its purpose can be inferred from the overall clearing context. The description adds meaning beyond the bare schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly names the tool's function ('GR/IR-Abgrenzung') and defines its two complementary sets (received-not-invoiced and invoiced-not-received) with residual quantities and values. It precisely distinguishes this from posting accruals by stating it is a 'pure projection' and 'never posts the accrual itself', which differentiates it from period-close tools like accrual_create or provision_post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it quantifies accrual exposure 'before period close' and clarifies what it does not do ('never posts'). It does not name specific sibling tools or explicitly state when NOT to use it, but the projection/posting distinction gives sufficient guidance for an agent to choose this over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

procurement_landed_cost_varianceA
Read-only

Landed-Cost-Abweichung (landed-cost variance): for each allocated I03 voucher in the window, the planned total cost against the capitalized and expensed (variance) split the confirm actually posted, with the freight / duty / insurance / other component breakdown and the variance percentage. Largest absolute variance first. All figures are integer CHF Rappen read from the live landed_cost_voucher / landed_cost_line; posts nothing. No I03 activity answers ok with an empty list.

NameRequiredDescriptionDefault
filterNo
formatNo
to_dateNo
from_dateNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description explicitly states 'posts nothing', names the live source tables (landed_cost_voucher / landed_cost_line), specifies integer CHF Rappen, states ordering by largest absolute variance, and defines the empty-result behavior. This is rich behavioral disclosure with no contradiction to the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and every clause carries useful information: scope, comparison basis, component breakdown, metric, ordering, data source, unit, read-only nature, and empty-result behavior. The opening German name is a minor duplication, but it does not bloat the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex read-only report with no output schema, the description covers the output shape, source, number semantics, ordering, and no-data case very well. It is slightly incomplete only in that parameter semantics for filter/format are not explained, but the required workspaceId and date-window concept are at least inferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the semantics of filter, format, from_date, to_date, or workspaceId beyond the indirect phrase 'in the window'. The property names for dates carry some meaning, but the opaque filter and format parameters are left undocumented, so the description does not adequately compensate for the missing schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines a specific analytical report: for each allocated I03 voucher it compares planned total cost against the actual posted capitalized/expensed split, includes component breakdown and variance percentage, and specifies ordering. This unambiguously distinguishes it from the landed_cost_create/allocate/confirm/reverse/list/get siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is explicit: it applies to allocated I03 vouchers in a window and is a read-only variance analysis, and the 'No I03 activity answers ok with an empty list' clause sets expectations for empty results. It does not explicitly name alternative tools, so it falls short of a 5, but the context is clear enough for an agent to select it over the landed-cost mutation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

procurement_match_statusA
Read-only

Status und Ausnahmen des Belegabgleichs (three-way match status & exceptions): the summary counts and matched value by status (matched / partial / overridden) plus one exception row per non-fully-matched I04 record, with its quantity and price variance in Rappen, whether tolerance was breached, the override reason, the aging since the match and a suggested next action (await_receipt / review_override / escalate). Status is clean when there is no exception in the filter, else exceptions_present. Reads the live I04 three_way_match active rows and posts nothing; never auto-fixes a match. Filter by status, supplier or match date; include_detail expands the per-line variances.

NameRequiredDescriptionDefault
as_ofNo
formatNo
statusNo
to_dateNo
from_dateNo
workspaceIdYes
supplier_idsNo
include_detailNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description reinforces this by stating it 'posts nothing' and 'never auto-fixes a match.' It also discloses the output shape (summary counts, matched value by status, exception rows with quantity/price variance, tolerance breach, override reason, aging, suggested next action) and the status semantics (clean vs exceptions_present). This goes beyond the annotation by explaining what the agent can expect from the response and the operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured: it front-loads the tool's purpose, then details the output, then the read-only behavior, then filtering. It is longer than ideal but every sentence adds operational value. The bilingual opening is slightly redundant but not harmful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only reporting tool with no output schema, the description covers the key output elements, the data source, the read-only guarantee, and the main parameters. It does not explain the format parameter or the exact meaning of as_of, but the core call semantics are sufficiently complete 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain the purpose of include_detail and the filter dimensions (status, supplier, match date), which maps to status, supplier_ids, and from_date/to_date. However, it does not explain as_of, format, or workspaceId semantics, and the schema itself provides no descriptions. The description partially compensates but leaves several parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reports the status and exceptions of the three-way match (Belegabgleich), including summary counts, matched value by status, and per-line exception details. It names the specific resource (I04 three_way_match active rows) and distinguishes itself from sibling tools like match_three_way_exceptions and match_three_way_get by describing its aggregate/exception-reporting behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool reads (live I04 three_way_match active rows), what it does not do (never auto-fixes a match), and how to filter (by status, supplier, match date) and expand detail (include_detail). It does not explicitly name alternative tools for when to use them instead, but the read-only, reporting nature is clear enough for an agent to select it over mutation tools like match_three_way_override or match_three_way_reverse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

procurement_open_commitmentsA
Read-only

Offene Bestellverpflichtungen (open purchase commitments): every still-open PO line with its ordered, received and billed quantities and the residual commitment value (ordered minus billed, at the PO base price in integer CHF Rappen), plus aging-bucketed totals (0-30 / 31-60 / 61-90 / 90+ days). Cancelled POs contribute nothing and closed POs are omitted unless includeClosed. Pass group_by (supplier / item / aging) for a rollup, or leave it flat with cursor pagination (default 500, max 5000 rows). A DERIVED read: it computes over the live D02 po_line counters and posts nothing. Empty answers ok with zero totals. A supplier or item id from another workspace simply matches nothing (tenant isolation).

NameRequiredDescriptionDefault
limitNo
cursorNo
filterNo
formatNo
group_byNo
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description explicitly states it is a DERIVED read that posts nothing, how cancelled and closed POs are treated (unless includeClosed), that empty answers return zero totals, and that cross-workspace ids match nothing due to tenant isolation. This is rich behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place: scope, quantities, aging buckets, aggregation options, pagination, derived-read safety, empty results, and tenant isolation. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description still conveys the key output (line-level quantities, residual value, aging totals) and critical edge cases. It is nearly complete, though explicit filter/format parameter details would make it fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates substantially: it explains group_by values (supplier/item/aging), cursor pagination (default 500, max 5000), includeClosed behavior, and tenant-isolation semantics for filter ids. It does not fully describe the filter object shape or format parameter, leaving a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific product: every still-open PO line with ordered, received, billed quantities and residual commitment value, plus aging-bucketed totals. It distinguishes itself from report siblings by specifying derive-over-live-counters semantics, optional group_by rollups, and the flat cursor-paginated mode.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context is provided: use it for open purchase commitments, pass group_by for a rollup, or leave it flat for paginated line data, with defaults and limits stated. It does not explicitly name alternatives or say when not to use it, but the usage context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

procurement_po_cycleA
Read-only

PO-Durchlaufzeiten (PO cycle-time metrics) over POs that reached a terminal state (received / closed) in the window: the average and the p50 / p90 days for order-to-first-receipt and order-to-full-match, overall or grouped by supplier. Only completed POs count; open POs are excluded from the averages. Measures the timestamps the engine records (there is no sent_at stage, per the I06 reconciliation). A DERIVED read over the live PO / receipt / match documents; posts nothing.

NameRequiredDescriptionDefault
to_dateNo
group_byNo
from_dateNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint=true, and the description explicitly adds 'A DERIVED read over the live PO / receipt / match documents; posts nothing.' This confirms read-only behavior and adds that it computes over derived metrics, excludes open POs, and uses engine-recorded timestamps. For a read-only analytics tool with no destructive behavior, this is strong transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one fairly dense paragraph, packed with useful details: metric definitions, window, grouping, exclusions, timestamp source, and read-only nature. It is informative but a bit dense, and could have been structured with bullets or separate sentences for the exclusions and grouping. Still, every sentence adds meaning, so it earns a 4.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only metrics tool with 4 mostly self-explanatory parameters (workspaceId, from_date, to_date, group_by), the description covers the core semantics: what is measured, over what population, in what time frame, and why it is a derived read. It doesn't detail the output shape, but no output schema exists, and a mention of what the response contains (e.g., list of metrics with average/p50/p90) would improve it. Still, the description is quite complete for an analytics tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for parameter semantics. It explains that from_date/to_date define the window, group_by presumably supports supplier grouping ('overall or grouped by supplier'), and the scope uses terminal states. It doesn't explicitly spell out each parameter name's format or allowed values, but it conveys the meaning of the date range and grouping role. Required workspaceId is mentioned in the description, so a 4 is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool computes PO cycle-time metrics (average, p50, p90 days for order-to-first-receipt and order-to-full-match) over POs in a terminal state in a window, with grouping by supplier. This is a specific verb (compute aggregate metrics) + resource (POs in terminal state), and distinguishes it from siblings like po_list, po_get, po_open_lines, and other procurement_* analytics tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states when to use: when you need cycle-time metrics over completed POs in a date range, optionally grouped by supplier. It also explicitly excludes open POs, and mentions the absence of sent_at stage. It doesn't explicitly name sibling alternatives or say when not to use it, but the scope is clear enough to differentiate from transactional PO tools and other procurement reports.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

procurement_po_historyA
Read-only

Vollständige Bestellhistorie (complete PO history) for one po_id: an ordered timeline of creation, I01 revisions/amendments, posted I02 goods receipts, I03 landed-cost allocations and I04 three-way matches, each with its timestamp, actor, summary, amount / quantity and a deep-link ref. The running open quantity and open value are the live commitment (ordered minus billed) for the PO and reconcile to it exactly. A DERIVED read; posts nothing. A po_id from another workspace is not_found (tenant isolation); a just-created PO returns only its creation event.

NameRequiredDescriptionDefault
po_idYes
to_dateNo
from_dateNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond the readOnlyHint annotation: it explicitly states 'A DERIVED read; posts nothing', explains tenant isolation (not_found for other workspace), describes the running open quantity/value reconciliation, and notes that a just-created PO returns only its creation event. These details give the agent a clear model of the tool's side effects and edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact two-sentence block that is dense with specific information: event types, fields, running totals, derivation, and edge cases. No word is wasted, and the key purpose is front-loaded with 'complete PO history'. It earns its length by covering all essential aspects without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-PO history tool with no output schema, the description is remarkably complete: it lists event types, returned fields (timestamp, actor, summary, amount, quantity, deep-link), running totals, derivation, tenant isolation, and initial-state behavior. The only missing piece is the purpose of the optional to_date/from_date parameters, which keeps it from a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains po_id (one PO) and workspaceId (tenant isolation), but makes no mention of to_date or from_date, which are present in the schema and presumably filter the timeline. Two of four parameters remain undocumented both in schema and description, which is a significant gap for an agent trying to invoke the tool correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool returns the complete PO history for a single po_id, enumerating the exact event types (creation, I01-I04) and fields included. It is unambiguous about the resource and scope, and distinguishes itself from siblings by emphasizing the per-PO timeline rather than a list or current state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: when you need the full ordered history of one PO (including revisions, receipts, allocations, and three-way matches). It does not explicitly name alternatives or exclusions, but the 'DERIVED read' and 'for one po_id' phrasing imply it is for read-only single-PO analysis, and the tenant isolation note clarifies cross-workspace behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

procurement_requisition_pipelineA
Read-only

Bestellanforderungs-Pipeline (requisition pipeline): the summary count and estimated value by status (draft / pending_approval / approved / partially_converted / converted / rejected / cancelled / closed), the open requisition rows with days-in-status, the linked PO and the conversion lag, and the conversion rate plus the average request-to-PO cycle over the window. Requisitions stalled beyond the workspace threshold are flagged. A DERIVED read over the live I00 requisition + conversion tables; posts nothing. Filter by status, requester or minimum aging.

NameRequiredDescriptionDefault
statusNo
to_dateNo
from_dateNo
workspaceIdYes
requester_idsNo
aging_days_minNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description states that this is a DERIVED read over the live I00 requisition and conversion tables and explicitly says 'posts nothing.' It also discloses the stalled-requisition flagging behavior, adding meaningful context about what the tool does with data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: it packs numerous distinct outputs into a structured flow from summary metrics to open-line details to conversion analytics, and closes with read-only behavior and filters. The first sentence is long but every clause contributes new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex analytics tool with no output schema, the description covers the key outputs, the underlying tables, side effects, and filter options. It doesn't specify the exact response structure or the definition of the workspace threshold, but the essential behavior is clear enough 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It maps the main filters (status, requester, minimum aging) and references the date window, but it does not explicitly explain workspaceId or the from_date/to_date parameters or their formats. Partial compensation, not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact resource (requisition pipeline) and enumerates the specific outputs: summary counts and estimated value by status, open lines with days-in-status, linked PO and conversion lag, conversion rate, and average cycle time. This level of detail makes it easy to distinguish from transactional siblings like requisition_get or procurement_po_cycle even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear this is a read-only analytical view for the requisition pipeline, with filters by status, requester, or minimum aging, and explicitly says it posts nothing. This gives an agent a solid sense of when to use the tool, though it never names an alternative or states a specific when-not-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

procurement_spend_summaryA
Read-only

Einkaufsauswertung (procurement spend summary): grouped spend over the PO lines whose order date falls in the window, by supplier, item, item category or order month. Each row carries the document count and the ordered, received and billed value (the po_line counters times the base price, integer CHF Rappen); an optional compare_prior_period adds the prior equal window's billed value and the delta. All figures are DERIVED from the live PO lines and reproducible; nothing is posted. Empty range answers ok with zero totals. (Buyer and cost-centre groupings are not available: a PO carries neither, per the I06 spec reconciliation).

NameRequiredDescriptionDefault
filterNo
formatNo
to_dateNo
group_byNo
from_dateNo
workspaceIdYes
compare_prior_periodNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses that figures are 'DERIVED from the live PO lines and reproducible', that 'nothing is posted', that an empty range returns zero totals, and that certain groupings are unavailable. This significantly enriches the agent's understanding of side effects, data provenance, and boundary behavior, far exceeding what the annotation alone conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but not bloated; every sentence contributes a distinct fact (grouping, metrics, optional compare, derived/non-posting, empty-range behavior, limitations). The opening repeats the tool name in German, which adds slight redundancy, but the information is front-loaded and logically ordered. Overall, it earns a high score for economy, though not a perfect 5 because of the translated-name duplication.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description compensates by describing row content (document count and ordered/received/billed values) and the optional compare field. It also explains data derivation, reproducibility, empty-range behavior, and grouping limitations. Still, the filter and format parameters are not described, and there is no mention of pagination or default grouping, leaving an agent to guess on those aspects in a tool with 7 parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry the parameter documentation. It does clarify the semantic roles of from_date/to_date (the 'window'), group_by (listing the allowed grouping values inline), and compare_prior_period (adds prior equal-window billed value and delta). However, it leaves filter and format entirely unexplainedaine. While it covers the most important parameters, the lack of any description for filter/format is a noticeable gap given the schema itself is silent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb–resource pair ('grouped spend over the PO lines') and specifies the grouping dimensions (supplier, item, item category, order month) and the metrics (document count; ordered, received, billed value). It is instantly distinguishable from procurement siblings like po_history or grir_clearing because it names the exact data source and aggregation scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the tool for spend aggregation and explicitly states a limitation ('Buyer and cost-centre groupings are not available'), which serves as a 'when not to use' hint. However, it does not mention any alternative tools or provide explicit conditional routing among the many procurement-related siblings, so the guidance is left to inference rather than being spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

procurement_supplier_scorecardA
Read-only

Lieferanten-Scorecards (supplier scorecards) for a window: one row per supplier with the I05 overall score, on-time delivery %, average days late, price and quantity variance %, match-override and rejection rates, plus the live open commitment and in-period spend in Rappen. The metric math is DELEGATED to I05 (supplier_scorecard_get); this verb only adds the open commitment and spend and never writes or recalculates a score. Suppliers are the requested set, or every supplier with a PO in the window; those below min_activity are dropped and thin-data suppliers carry an insufficient_data warning. Posts nothing.

NameRequiredDescriptionDefault
to_dateNo
from_dateNo
workspaceIdYes
min_activityNo
supplier_idsNo
include_trendNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, but the description goes further: it explicitly says the tool 'never writes or recalculates a score' and 'Posts nothing.' It also discloses supplier selection behavior (requested set vs. all suppliers with a PO), min_activity dropping, and insufficient_data warnings for thin-data suppliers. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: output shape, delegation boundary, supplier selection/filtering behavior, and a final side-effect guarantee. The key scoping and safety details are front-loaded before the implementation notes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description helpfully enumerates the returned columns and warns about insufficient_data. It also covers filtering and side-effect safety. Remaining gaps are minor: include_trend semantics, exact date formatting, and the threshold for min_activity are not specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it compensates substantially: it explains the date window, supplier_ids selection, min_activity filtering, and the 'in-period spend' output semantics. However, include_trend is not described at all, and date parameter formats are only implied by 'window.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: one row per supplier with a precise list of metrics (I05 overall score, on-time delivery %, average days late, variance %, match-override/rejection rates, open commitment, in-period spend). It also distinguishes itself from the sibling supplier_scorecard_get by clarifying that metric math is delegated there and this verb only adds commitment/spend.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when this tool is appropriate: it adds open commitment and spend on top of I05 metrics and never writes or recalculates scores. It names the delegated supplier_scorecard_get, but it does not explicitly enumerate alternatives like supplier_performance_rank/trend or describe a when-not-to-use rule beyond the delegation relationship.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_budget_actualA
Read-only

Budget vs. Ist for one project, per project and per phase: budget, actual cost and hours, remaining, and the over-budget flag. COST ONLY, a pure read (P5) over the registered cost sources (B01 time, A17 bills, D02 purchases as they land; all zero until then): no revenue, no margin (that is B03), and nothing is ever written. includeSubprojects adds the base-currency rollup over the parent tree.

NameRequiredDescriptionDefault
asOfNo
projectIdYes
workspaceIdYes
includeSubprojectsNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the readOnlyHint annotation by disclosing that nothing is ever written, that cost sources are B01/A17/D02 and are zero until they land, and that includeSubprojects adds a base-currency rollup. This is rich behavioral context that the annotation alone does not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence adds distinct value: scope, metrics, exclusion, read guarantee, cost source behavior, and subproject behavior. It is front-loaded with the core purpose and avoids filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only reporting tool with no output schema, the description covers purpose, scope, metrics, data sources, zero-until-landed behavior, and the includeSubprojects flag. The main gap is the lack of any explanation of the asOf parameter, which could affect how current the returned data is.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries most parameter-semantics weight. It usefully explains includeSubprojects as a parent-tree rollup and makes projectId implied by 'one project', but it does not clarify the meaning or format of asOf, which is a significant omission.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool returns budget vs. actual cost and hours for a single project, broken out by phase, with remaining and an over-budget flag. The 'COST ONLY' and 'no revenue, no margin' statements distinguish it from related costing/reporting tools without requiring the agent to inspect schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for when it applies: cost-only budget/actual comparison over registered cost sources, explicitly excluding revenue and margin, which are attributed to B03. It does not name sibling tools explicitly, but the 'pure read' and scope exclusions give an agent enough to select it over alternative reporting tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_createA
Destructive

Lege ein Projekt an (create a project master): name, client contact (C00), an editable auto-suggested code (P-0001 upward, unique per workspace), an integer-Rappen budget with budget hours, dates and an optional parent for a sub-project tree. A non-base currency snapshots the base-Rappen budget at the H-FX rate of the creation day (pass fxRate to assert one). Starts in status draft.

NameRequiredDescriptionDefault
codeNo
nameYes
endsOnNo
fxRateNo
currencyNo
parentIdNo
startsOnNo
contactIdYes
budgetHoursNo
budgetMinorNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description adds meaningful behavior: codes are auto-suggested and unique per workspace, non-base currencies snapshot the base-Rappen budget at the H-FX rate of creation day, and the project starts in draft. It does not explain idempotency or return behavior, but it does not contradict the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded, starting with the core action and then layering field behavior and FX details. Every clause adds some value, though the single long paragraph could be easier to scan if split into shorter statements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation tool with no output schema and no parameter descriptions, the description covers most domain semantics but leaves gaps around workspaceId, idempotencyKey, and what the created project response contains. These omissions are notable for retry-safe creation but do not make the tool unusable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by explaining name, contactId ('client contact (C00)'), code behavior, budgetMinor ('integer-Rappen budget'), budgetHours, dates, parentId for sub-projects, currency, and fxRate assertion. It omits workspaceId and idempotencyKey semantics, so it is rich but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Lege ein Projekt an (create a project master)'. It distinguishes creation from sibling tools such as project_update, project_get, and project_list by focusing on initial project setup and explicitly noting the resulting 'draft' status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the creation context clear and notes that the project starts in draft, implying this is the initial setup call. However, it does not explicitly say when to use this vs. alternatives, nor does it state prerequisites such as requiring an existing workspace or contact.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_deleteA
Destructive

Hard-delete a DRAFT project that nothing references (no sub-project, no custom-field value, no linked file); its own draft phases go with it. Anything past draft has history and refuses with not_draft: real projects are closed, never erased (OR 957a spirit). CONSEQUENCE: Deletes the draft project and its phases for good; a project past draft is closed instead. You can create it again, but not restore it.

NameRequiredDescriptionDefault
projectIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true, but the description goes well beyond: it discloses irreversibility ('can't restore'), the refusal behavior and error code (not_draft), and the redirect to closing for non-draft projects. That is rich behavioral context the agent could not get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the key constraint and mostly efficient, but the 'CONSEQUENCE:' sentence largely restates the first paragraph (deletes draft + phases for good; past draft is closed instead), adding mild redundancy rather than new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-output-schema tool the description covers the important operational facts: safety precondition, refusal semantics, and irreversibility. The only material gap is that the third parameter is left unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description mentions none of the three parameters. While projectId/workspaceId are self-evident, idempotencyKey is undocumented in both schema and description, so the description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (hard-delete) and a precisely scoped resource (a DRAFT project nothing references), plus what else is removed (its draft phases). This distinguishes it from siblings like project_set_status/archive-style operations that close rather than erase.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the precondition (nothing references it: no sub-project, no custom-field value, no linked file) and the alternative for the other case ('real projects are closed, never erased' past draft). An agent knows exactly when this tool applies and when it will refuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_getA
Read-only

Read one project in full, its phases embedded in sort order. phaseDone filters the phases to done (true) or open (false); savedViewId applies a saved view over the phase list (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
phaseDoneNo
projectIdYes
savedViewIdNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint already set to true, the description adds valuable behavioral detail beyond the annotation: phases are embedded in sort order, phaseDone filters them, and savedViewId's stored filters are merged underneath explicit filters. This meaningfully explains how the tool behaves without contradicting the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. It front-loads the core purpose in the first sentence and packs the optional filter behavior into the second, with every word earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation, the description is complete: it states what is returned, how phases are ordered, and how the two optional filters behave. Without an output schema, the phrase 'read one project in full' gives the agent a sufficient mental model. Minor missing details like pagination or error conditions are not critical for a get operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explaining phaseDone and savedViewId in detail, including the merge behavior. The remaining parameters, workspaceId and projectId, are required and self-explanatory from their names, so the description fills the most important gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb 'Read' and a clearly defined resource 'one project', immediately distinguishing it from sibling tools like project_list or project_phase_add. It also specifies that phases are 'embedded in sort order', which clarifies the exact return shape.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool: to read a single project with its phases and optional filtering. It does not explicitly name alternatives such as project_list, so it lacks an explicit exclusion, but the intent is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_listA
Read-only

List the projects with code, status, budget and parent, filtered by status, contact, parent or a text query over code and name. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
queryNo
statusNo
parentIdNo
contactIdNo
savedViewIdNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description agrees. It adds useful behavioral context beyond the annotation by explaining how savedViewId works: stored filters are merged underneath explicitly named filters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two well-organized sentences with no filler. The core list behavior and return fields are front-loaded, and the saved-view nuance is a separate second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool, the description covers returned fields, filters, and saved-view behavior. Pagination, sorting, and valid status values are not mentioned, but these are minor for a simple filtered list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It explains query as a text search over code and name, maps status/contact/parent to the relevant parameters, and describes savedViewId semantics. workspaceId is left to the schema/name, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List the projects' with concrete returned fields (code, status, budget, parent). It is clearly distinguished from siblings like project_get and project_set_status by its collection semantics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this tool to list projects, with optional filtering by status, contact, parent, or text query. It does not explicitly name alternatives or when-not-to-use cases, but the intended usage is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_phase_addA

Add a phase to a project (name, sort, integer-Rappen budget, budget hours, optional milestoneOn date). Refused on a closed project. A phase-budget sum exceeding the project budget answers ok with a phase_budgets_exceed_project warning, never a block: phase budgets are the plan, the project budget is the envelope.

NameRequiredDescriptionDefault
nameYes
sortNo
projectIdYes
budgetHoursNo
budgetMinorNo
milestoneOnNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only declare destructiveHint=false, while the description adds important behavior: closed-project refusal and that budgets over the project envelope return a warning rather than a block. It does not document idempotency behavior despite exposing an idempotencyKey parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tightly structured sentences with no wasted text. The core purpose and fields come first, followed by the refusal condition and the budget-warning behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an eight-parameter creation tool with no output schema, it covers the most important business rules: closed-project refusal and non-blocking budget warnings. Remaining gaps are minor but real, especially idempotencyKey semantics and what a successful call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It usefully explains name, sort, budgetMinor as integer-Rappen, budgetHours, and milestoneOn, but leaves workspaceId, projectId, and idempotencyKey undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: add a phase to a project. It also enumerates the key fields and distinguishes creation from sibling operations such as project_phase_update and project_phase_done.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one clear usage constraint: the operation is refused on a closed project. However, it does not explicitly route the agent to project_phase_update for modifying an existing phase or explain alternatives, so guidance remains mostly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_phase_doneA
Destructive

Mark a phase milestone reached (Erledigt): stamps doneAt (default today). A state assertion, so an already-done phase answers ok with alreadyDone true and the recorded date untouched, never a second stamp.

NameRequiredDescriptionDefault
doneAtNo
phaseIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real value beyond the single destructiveHint annotation: it discloses that the operation is idempotent, that a repeat call returns ok with alreadyDone true, and that the previously recorded date is never overwritten. It does not mention required permissions or how workspaceId scoping affects authorisation, which is a remaining gap for a mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the action and its effect, then the idempotency semantics. Nothing is filler, and the compressed phrasing ('never a second stamp') still reads unambiguously.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully supplies return semantics (ok plus alreadyDone true) and defaulting behaviour, which is what an agent needs to interpret results. It falls short only on the undefined idempotencyKey and on authorisation context for a write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% over four parameters, so the description carries the full burden. It explains only doneAt, including its default of today; phaseId, workspaceId and especially idempotencyKey (whose relationship to the stated idempotency behaviour is never connected) remain undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Mark a phase milestone reached', with the domain label '(Erledigt)' and the concrete effect of stamping doneAt. It does not distinguish itself from neighbouring siblings such as project_phase_update or project_set_status, so an agent must infer which is the correct call for a status change.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the tool is for asserting a phase is complete. There is no explicit 'use this when…, use project_phase_update when…' routing, and no mention of prerequisites such as the phase existing or the workspace being open. The already-done behaviour is useful but describes outcome, not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_phase_updateB
Destructive

Patch a phase (name, sort, budget, budget hours, milestoneOn). Refused on a closed project; carries the same phase-budget warning as project_phase_add.

NameRequiredDescriptionDefault
patchYes
phaseIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With destructiveHint=true already declared, the description adds the important business rule that the operation is refused on closed projects. But its other behavioral claim — "carries the same phase-budget warning as project_phase_add" — is an indirect reference rather than a disclosure; the agent must consult a different tool's description to learn what the warning actually is, and nothing is said about idempotency or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler, and the field list and the refusal rule are both front-loaded. The pointer to project_phase_add is terse to the point of being opaque, slightly costing clarity for the space saved.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with a nested patch object, no output schema, and 0% schema documentation, the description covers the closed-project rule but omits required context: patch merge semantics, idempotencyKey behavior, and the actual content of the referenced budget warning. An agent could construct a call, but with avoidable risk.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and patch is an opaque nested object, so the field enumeration is real added value. But workspaceId, phaseId, and especially idempotencyKey are left entirely undocumented, and the description does not say whether patch is a merge (partial update) or a replacement, which materially changes how the agent should build it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Patch a phase" is a specific verb plus resource, and the parenthetical enumerates the mutable fields (name, sort, budget, budget hours, milestoneOn), which separates it from project_phase_add and project_phase_done. It does not explicitly contrast with project_update or project_set_status, so sibling differentiation is partial rather than complete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives one concrete precondition ("refused on a closed project"), which is genuinely useful routing information. However, it provides no guidance on when to use this versus project_update, project_phase_add, or project_phase_done, and the deferral to project_phase_add's warning leaves the agent to infer the usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_set_statusA

Move a project through its lifecycle: draft to active, active to on_hold and back (Pausieren), active or on_hold to closed (Abschliessen), and the audit-logged reopen closed to active (Wieder öffnen). An illegal pair refuses with invalid_transition; closing runs the registered close guards (B01 adds the open-time guard when it lands).

NameRequiredDescriptionDefault
statusYes
projectIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false from annotations, the description carries most of the burden and does so well: it discloses the failure mode (invalid_transition), side effects on close (registered close guards, future B01 open-time guard), and that reopening is audit-logged. It does not address permissions, whether transitions are reversible beyond the listed pairs, or how idempotencyKey affects retries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences that front-load the state machine, with the error and side-effect behavior trailing appropriately. The closing clause about 'B01 adds the open-time guard when it lands' is cryptic internal jargon that costs more than it earns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with minimal annotations and no output schema, the description covers transitions and error semantics but leaves open the idempotency key's role, any permission requirements, and what the caller receives on success or on guard failure. Adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the status field has no enum, so the description's enumeration of state names (draft, active, on_hold, closed) is the only place the legal values surface — genuinely useful. However, idempotencyKey and the workspace/project identifiers get no explanation, leaving a real gap for a 4-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Move a project through its lifecycle') and enumerates the exact state transitions it performs, which unambiguously separates it from siblings like project_update (field edits) or project_phase_* (phase handling). An agent can tell what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

By listing the legal transition pairs (draft→active, active↔on_hold, active/on_hold→closed, closed→active) it effectively tells the agent when this tool applies, and 'an illegal pair refuses with invalid_transition' sets a boundary. It never names an alternative tool for non-status edits, so it stops short of explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_updateA
Destructive

Patch a project master (name, contact, code, dates, parent, budget). Editable while draft, active or on_hold; a closed project refuses with project_closed. The H-FX base snapshot is re-taken only when currency or budgetMinor change, never silently re-rated.

NameRequiredDescriptionDefault
patchYes
projectIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond destructiveHint=true, the description discloses two non-obvious behaviors: the state gate with a named error code (project_closed) and the conditional re-take of the H-FX base snapshot when currency or budgetMinor change, including the promise of no silent re-rating. It does not cover permissions or idempotency behavior, but the added context is substantial for a hint-only annotation set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the mutation scope front-loaded, followed by preconditions and side effects in decreasing priority. Dense jargon like 'H-FX base snapshot' costs a little readability but every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with only a destructiveHint annotation, no output schema and a fully opaque patch object, the description supplies the state gate, the error contract and the FX side effect. Remaining gaps are idempotencyKey semantics and permission requirements, which are secondary for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and `patch` is an untyped object, so the description carries the burden; it partially does by listing candidate patch fields and mentioning currency/budgetMinor. However workspaceId, projectId and idempotencyKey go entirely unmentioned, and the patch field list is illustrative rather than exhaustive or typed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a precise verb (patch) plus the resource (project master) and enumerates the mutable fields (name, contact, code, dates, parent, budget). It implicitly separates itself from project_set_status by scoping itself to master-data fields and states, but it never names a sibling, so an agent still has to infer that status transitions live elsewhere.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Editable while draft, active or on_hold; a closed project refuses with project_closed' gives a concrete precondition and the failure mode, which is real usage guidance. It stops short of pointing at the alternative tool for a closed project (e.g. reopen/status tools), so the exclusion is stated but not routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_dunning_runA
Idempotent

Propose a Mahnlauf: read the overdue open items from the OP-Liste (A16) as of a date, assign each invoice its next level (1./2./3. Mahnung; an invoice whose 3. Mahnung is issued is terminal), group per debtor, and persist a reviewable DRAFT run. Nothing is booked, rendered or sent: this is the safe half, and the reason an agent or an automation rule may call it without a confirmation. One run per day: re-proposing the same day returns the existing run. A fully paid invoice never appears; a partly paid one appears with its reduced open amount. asOf may look back but never forward. CONSEQUENCE: Drafts a reminder run over the invoices overdue on the given date. Nothing is booked or sent until you issue the run; a wrong draft is replaced by proposing again.

NameRequiredDescriptionDefault
asOfNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint; the description adds substantial non-redundant behavior: nothing is booked, rendered or sent, one run per day returns the existing run, fully paid invoices are excluded, partly paid invoices appear at the reduced open amount, and asOf can never point forward. That is exactly the operational context an agent needs before calling a drafting tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: the operation, its safety profile and the deduction rules come before the closing CONSEQUENCE block. The final 'CONSEQUENCE' sentence largely restates earlier statements ('Nothing is booked or sent'), costing some redundancy in a long description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still conveys what is produced (a reviewable DRAFT run, one per day, returned as-is on re-proposal) and the safety boundary. Minor gap: it doesn't say how the draft is identified for later issue/discard, and leaves the asOf string format open.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It meaningfully constrains asOf ('may look back but never forward') but gives no format hint, and neither workspaceId nor the required idempotencyKey is explained — the per-day dedup rule is stated but its relationship to idempotencyKey is left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and artifact ('Propose a Mahnlauf') and precisely scopes the operation: read overdue items from OP-Liste (A16), assign dunning level, group per debtor, persist a DRAFT. The phrase 'this is the safe half' implicitly separates it from the issue/send siblings (issue_dunning_run, send_dunning_run) without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states who may call it and why no confirmation is needed ('an agent or an automation rule may call it'), and gives the re-run rule. It does not name issue_dunning_run/send_dunning_run as the explicit next step or exclusion, so the route to the write-side siblings is only implied by 'until you issue the run'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provision_createB
DestructiveIdempotent

Describe a Rückstellung (OR Art. 960e) and save it as a DRAFT: reason is one of the eight statutory ids (Garantie, Ferien und Überzeit, Prozess, Grossreparatur, Sanierung, Restrukturierung, Steuern, Sonstige; invalid_reason names the exact ids, and sonstige needs a description of at least 10 characters); provisionAccount is 2330, 2600 or a liability numbered 23xx/26xx; expenseAccount is the P&L account the formation is charged to. Returns the draft with its lines (Dr expense / Cr provision). Nothing is posted.

NameRequiredDescriptionDefault
reasonYes
periodEndYes
amountMinorYes
descriptionYes
workspaceIdYes
expenseAccountYes
idempotencyKeyYes
provisionAccountYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations carry the safety profile, and the description adds real value beyond them: it discloses that nothing is posted, that the draft is returned with Dr expense / Cr provision lines, and it encodes validation-failure behavior (invalid_reason). However it never reconciles the destructiveHint=true annotation with the harmless 'DRAFT, nothing posted' framing, and says nothing about what happens on a repeated idempotencyKey call despite idempotentHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, and the semicolon-separated clauses each carry a distinct rule rather than filler. The nested parenthetical around the reason ids is dense and slightly hard to parse, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-required-parameter financial mutation with no output schema and no schema descriptions, the definition should cover all inputs and the return contract. The return shape is stated, but half the parameters and the idempotency behavior are absent, leaving meaningful room for a malformed call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning and it only partly does: reason (with the full enum vocabulary), provisionAccount, expenseAccount and description are explained. workspaceId, periodEnd (date format/timezone), amountMinor (minor units, rounding, sign) and idempotencyKey semantics are entirely undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (describe + save) and resource (Rückstellung under OR Art. 960e), and the phrase 'save it as a DRAFT ... Nothing is posted' implicitly separates it from the posting siblings provision_post / provision_release. It never names those siblings outright, so the differentiation is inferential rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives strong domain rules for valid inputs (eight statutory reason ids, account ranges 2330/2600/23xx/26xx, sonstige description ≥10 chars), which steers correct invocation. But it never states when to choose this over provision_post or provision_discard, nor any prerequisite such as an open period or workspace setup; the 'draft-only' framing is the sole usage signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provision_discardA
Idempotent

Retire a drafted Rückstellung before it posts. The row stays on record as discarded with its reason; a posted provision cannot be discarded (already_posted), reverse or release it instead.

NameRequiredDescriptionDefault
reasonNo
provisionIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing that this is a soft retire (row persists as `discarded` with its reason) and by naming the failure mode `already_posted`. That is meaningful context given destructiveHint=false, though it says nothing about re-calling with the same idempotencyKey or about permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the action and immediately followed by the outcome and the blocking condition. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully covers the post-condition (status becomes `discarded`) and the error case, which is what an agent needs to interpret the call. The remaining gap is the undocumented parameters, notably the idempotency key's role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining the four parameters, but it only gives meaning to `reason` ('with its reason'). workspaceId, provisionId and idempotencyKey are left entirely undefined in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Retire a drafted Rückstellung') with a clear scope qualifier ('before it posts'), which separates it from provision_post, provision_reverse and provision_release that also appear among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the precondition (drafted, not yet posted) and the exclusion plus the alternative path: a posted provision cannot be discarded (`already_posted`), so 'reverse or release it instead'. The agent has no inference left to make.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provision_getA
Read-only

Read one Rückstellung: the row, its formation lines, every release with its entry (and the reversal of that entry, when one exists) and the open balance, derived as the formation amount minus the live releases.

NameRequiredDescriptionDefault
provisionIdYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares the operation is read-only. The description adds value by explaining the response composition: the row, formation lines, releases with entries, reversals, and the derived open balance. It also discloses the calculation of the open balance (formation amount minus live releases), which is beyond the annotation. No contradiction with the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that starts with the core purpose ('Read one Rückstellung') and then enumerates the returned components in a logical order. It is concise with no filler, and each phrase adds meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with two string parameters and no output schema, the description covers the essential return contents and even explains how the open balance is derived. It does not address edge cases like not-found errors or pagination, but those are minor for a get-by-id tool. The description is sufficiently complete for an agent to know what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no descriptions for workspaceId or provisionId, and the description does not mention either parameter. It neither explains that provisionId identifies the specific provision nor that workspaceId scopes the request. With 0% schema coverage, the description fails to compensate, leaving the agent without any parameter semantics beyond the names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific verb 'Read' and the resource 'one Rückstellung', and enumerates exactly what is returned: the row, formation lines, releases with entries, reversals, and open balance. It clearly differentiates from sibling tools like provision_list (which lists provisions) and mutation tools (provision_create, provision_post, etc.) by focusing on a single read with detailed content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the detailed single-record read for provisions, as opposed to provision_list for listing. It provides clear context that this returns all associated data for one provision, but it does not explicitly name alternatives or state 'use this instead of X'. Since the purpose is unambiguous given the sibling set, a score of 4 is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provision_listA
Read-only

List Rückstellungen, newest period first, each with its open balance, filtered by periodEnd, status (draft | posted | released | reversed | discarded) or reason. openTotalMinor sums the open balances. savedViewId applies a saved view (G00).

NameRequiredDescriptionDefault
reasonNo
statusNo
periodEndNo
savedViewIdNo
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the default ordering ('newest period first'), the computed `openTotalMinor` aggregation, and the effect of `savedViewId` — beyond the readOnlyHint annotation. It doesn't mention pagination or response details, but for a read-only list tool the annotation plus this context is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-load the core purpose, then add only the essential filter/behavior details. Every clause serves a purpose; no filler or repetition of schema names.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list with five string params and no output schema, the description covers purpose, ordering, filters, status values, per-item balance, and total aggregation. Missing pagination details are a minor gap given the simple list semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It explains periodEnd, status (with explicit allowed values), reason, and savedViewId (G00 behavior); only workspaceId, a self-evident required scope parameter, is not elaborated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (provisions/Rückstellungen), the operation (list), the sort order (newest period first), and the data shape (open balance). This clearly separates it from sibling provision_create/post/release/reverse/get tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the filterable dimensions (periodEnd, status, reason) and that savedViewId applies a saved view (G00), implying when to call it: to retrieve a filtered list of provisions. It does not explicitly name alternatives or exclusions, but the list-vs-get contrast is evident from the sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provision_postA
Idempotent

Post a drafted Rückstellung as ONE entry (Dr expense / Cr provision, source provision) dated periodEnd. No automatic reversal: OR 960e Abs. 4 does not release a provision by the calendar. Idempotent per provision; a different key on a posted one is already_posted. CONSEQUENCE: Books the provision as one entry; it is not released automatically. You release it later, or correct it with a correcting entry; both stay visible.

NameRequiredDescriptionDefault
provisionIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond idempotentHint/destructiveHint: the exact journal entry generated, the absence of automatic reversal with the legal rationale (OR 960e Abs. 4), idempotency scoped 'per provision', and the `already_posted` error for a mismatched key. The 'CONSEQUENCE' clause makes the irreversible-but-correctable nature of the booking explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and effect are front-loaded, but the no-automatic-reversal point is stated three times ('No automatic reversal', 'does not release a provision by the calendar', 'it is not released automatically'), and the CONSEQUENCE sentence restates the opening. Tighter phrasing would lose no information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behavior is richly covered for a mutation tool, and annotations handle idempotency, but with no output schema the description never indicates what a successful call returns (e.g., entry ID), and the three required parameters remain opaque. The dangling `periodEnd` reference also leaves the agent guessing whether a date must be supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning and it largely does not: workspaceId and provisionId are never explained, and the description references `periodEnd`, which is not even an input parameter. Only idempotencyKey gets semantic treatment ('Idempotent per provision; a different key on a posted one is `already_posted`').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Post') on a specific resource ('drafted Rückstellung') and pins down the accounting effect (Dr expense / Cr provision, source `provision`, dated `periodEnd`). An agent can distinguish it from provision_create, provision_release, and provision_reverse without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the lifecycle position clearly: it is for a drafted provision being booked now, with release or a correcting entry happening later, which implicitly routes the agent to provision_release/reverse siblings. It never explicitly names those sibling tools or states when NOT to call this one, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provision_releaseA
Idempotent

Release part or all of a posted Rückstellung: posts Dr provision / Cr targetAccount (the original expense account, or an income account) for amountMinor on date. Refuses release_exceeds_balance above the open balance; the provision reads released at zero. Idempotent on idempotencyKey for as long as the release that key booked still stands; a key whose release was undone refuses already_reversed_key (release again under a new key). A release is undone only with provision_release_reverse; the raw reverse_entry refuses its entry with owned_by. CONSEQUENCE: Books the release of part or all of the provision to the target account. If it is wrong, you undo the release with a correcting entry; both stay visible.

NameRequiredDescriptionDefault
dateYes
amountMinorYes
provisionIdYes
workspaceIdYes
targetAccountYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: error conditions (`release_exceeds_balance`, `already_reversed_key`), state transitions ("the provision reads `released` at zero"), idempotency scoping ("for as long as the release that key booked still stands"), and undo restrictions. Annotations only say idempotent and non-destructive; the description explains exactly what those mean here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and posting mechanics, then error and idempotency details. The labeled "CONSEQUENCE" sentence partly restates the opening posting rule, but the description remains information-dense and appropriately sized for a financial mutation with several edge cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six required parameters, no output schema, and only minimal annotations, the description covers the business logic, failure modes, idempotency, and undo path thoroughly. It omits return value shape and any authorization requirements, which are the remaining gaps for an agent invoking this financial mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well: it defines `targetAccount` ("the original expense account, or an income account"), gives meaning to `amountMinor` and `date` through the posting rule, and details `idempotencyKey` semantics. It leaves `workspaceId` and `provisionId` implicit, though their meaning is clear from the operation context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "Release part or all of a posted Rückstellung". It goes beyond the name by explaining the exact double-entry effect (Dr provision / Cr `targetAccount`) and distinguishes itself from sibling tools like `provision_release_reverse` and `reverse_entry`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the undo path: "A release is undone only with `provision_release_reverse`; the raw `reverse_entry` refuses its entry with `owned_by`." This gives clear alternatives and exclusions. It does not fully compare with `provision_reverse` or `provision_discard`, but the key routing guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provision_release_reverseA
Idempotent

Undo one release of a Rückstellung with a real reversing entry (dated the release date unless date names another open day), so the open balance and the posted / released reading follow from the journal again. This is the ONLY way to reverse a release entry: the raw reverse_entry refuses it with owned_by, and so it refuses the undo itself. Refuses not_found and already_reversed. Idempotent on idempotencyKey. CONSEQUENCE: Undoes one release of the provision with a correcting entry and restores its open balance. The release stays visible; to release again, you book a new release.

NameRequiredDescriptionDefault
dateNo
reasonNo
releaseIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses real behavioral traits: the correcting entry restores the open balance, `posted`/`released` are re-derived from the journal, the original release stays visible (consistent with destructiveHint=false), errors `not_found` and `already_reversed` are enumerated, and date defaults to the release date. It repeats idempotency already covered by idempotentHint and says nothing about required permissions or the response body, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical constraint ('ONLY way to reverse a release entry') lands early and the failure modes follow. The 'CONSEQUENCE:' sentence largely restates the opening sentence, which is mild redundancy rather than harm.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation tool with no output schema and no annotation coverage of destructive semantics beyond hints, the description gives consequence, error cases, and re-release guidance. Missing only permission prerequisites and what the call returns, both of which would make it airtight.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does so only partially: it explains `date` (defaults to release date, must be an open day) and ties `idempotencyKey` to idempotency, but says nothing about `releaseId`, `workspaceId`, or the purpose of `reason`. Two of five parameters gain meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource pair ('undo one release of a Rückstellung') with a precise mechanism (real reversing entry) and explicitly distinguishes itself from the sibling `reverse_entry`, which it says refuses the operation with `owned_by`. An agent can identify this tool's domain without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly declares itself 'the ONLY way to reverse a release entry', names the alternative (`reverse_entry`) and why it fails, and closes with the follow-on workflow ('to release again, you book a new release'). When-to-use, when-not-to-use, and the next step are all stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provision_reverseA
Idempotent

Reverse the formation entry of a posted Rückstellung (a real reversing entry, dated periodEnd unless date names another open day). Refuses release_blocked while any release stands unreversed (undo the releases first through provision_release_reverse, newest first) and already_reversed a second time. This is the ONLY way to reverse the formation: the raw reverse_entry refuses it with owned_by. CONSEQUENCE: Corrects the provision's original booking with a correcting entry; any releases have to be undone first. The original stays visible; if this was wrong, you create and post the provision again.

NameRequiredDescriptionDefault
dateNo
reasonNo
provisionIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by naming the exact error codes (`release_blocked`, `already_reversed`, `owned_by`), the default dating behavior, and the business consequence: a correcting entry is booked, the original stays visible, and recovery means re-creating and posting the provision. This is consistent with `destructiveHint: false` — nothing is deleted, it is corrected — and with `idempotentHint: true`.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its dating rule, then refusals, then the exclusivity note, then an explicit CONSEQUENCE marker. Slightly over-dense and the release-ordering constraint is restated in the consequence clause, which is minor redundancy rather than wasted space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the failure modes, side effects, and recovery path well enough to act safely. Gaps remain on the return value (e.g. the id of the created reversing entry) and on the purpose/semantics of the `reason` and `idempotencyKey` parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description must carry all parameter meaning, and it only explains two: `date` (defaults to `periodEnd`, must name another open day) and implicitly `provisionId`. It says nothing about `reason`, `workspaceId`, or `idempotencyKey`, leaving three of five parameters undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (reverse) + specific resource (the formation entry of a posted Rückstellung), with a precise statement of what the resulting entry is (a real reversing entry dated `periodEnd`). It also distinguishes itself from the generic `reverse_entry` sibling by name, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not: refuses while releases stand unreversed (with the remedy and ordering: undo via `provision_release_reverse`, newest first) and refuses a second reversal. It also gives the alternative and why it fails: the raw `reverse_entry` returns `owned_by`, making this the only viable path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quotes_acceptA
Destructive

Nimm eine Offerte an: either by the single-use token (the cloud accept host, the one write reachable without an authenticated actor, scoped to exactly one quote by its H-TENANT token-hash lookup) or by quoteId + actor (the human "Als angenommen markieren"). Refuses acceptance after valid_until (quote_expired, OR Art. 3), stamps accepted_by, invalidates the token (single-use), and moves the quote to accepted. Posts nothing; conversion is a separate step. CONSEQUENCE: Marks the quote as accepted, which makes it binding, and spends its accept link. An accepted quote cannot be withdrawn or revised; the next step is turning it into an order or invoice.

NameRequiredDescriptionDefault
actorNo
tokenNo
quoteIdNo
acceptedByNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=true in annotations, the description carries the important behavioral context: expiration refusal, accepted_by stamping, single-use token invalidation, state transition to accepted, no accounting post, and irreversibility. This is exactly the kind of consequence detail needed for a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, modes, refusal behavior, effects, and consequence in a logical order. It is dense but mostly earns its length; implementation/legal jargon such as 'H-TENANT token-hash lookup' and 'OR Art. 3' could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, multi-mode tool with no output schema and sparse annotations, it provides the essential behavioral picture: auth paths, expiry, token spending, irreversibility, and the next step. Remaining gaps are parameter-level documentation for workspaceId, idempotencyKey, and acceptedBy, plus return behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameter meaning. It does explain token, quoteId + actor, and accepted_by stamping, but it omits workspaceId and idempotencyKey and does not clarify the relationship between actor and acceptedBy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: accepting a quote. It distinguishes the two invocation modes (single-use token vs. quoteId + actor) and explicitly separates acceptance from conversion, so an agent can tell this apart from revision, decline, or conversion actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for the two acceptance paths and explicitly states that acceptance is refused after valid_until. It also signals that conversion is a separate step, though it does not name sibling tools such as quotes_convert or quotes_decline, leaving some routing implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quotes_convertA

Wandle eine angenommene Offerte um in einen Auftrag (order) oder direkt in eine Rechnung (invoice): a DIRECT 1:1 pass-through to A10 convertDocument, which clones the frozen document_line rows (the VAT trace travels with them) and marks the source converted. C02 posts nothing; revenue is recognised only when A11 later issues the invoice. Idempotent and single-issue: converting an already-converted quote returns the existing target, never a second document. A non-accepted quote is refused (illegal_transition).

NameRequiredDescriptionDefault
toYes
quoteIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry destructiveHint=false, so the description does the heavy lifting and delivers: idempotent single-issue semantics, exact refusal behavior, no posting to the ledger at conversion time, revenue recognition deferred to invoice issuance, and the fact that document_line rows are cloned with their VAT trace. That is genuinely non-obvious mutation behavior an agent could not infer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The what/how/when sequence is front-loaded and each sentence adds distinct information. The internal codes (A10, C02, A11) and the German-to-English switch cost some readability without adding meaning for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behavior is described thoroughly for a mutation tool with no output schema and minimal annotations, and the idempotent-return value is explained. However, with 0% parameter documentation and no statement of permissions or returned document shape, an agent still lacks the input-side knowledge needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters, so the description must compensate and largely does not. The parenthetical '(order)' and '(invoice)' hints at the values for `to` but never names the parameter or fixes its vocabulary, and quoteId, workspaceId, and idempotencyKey are never mentioned despite idempotency being discussed behaviorally.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific verb and resource (convert an accepted quote) and enumerates the two possible targets, order or invoice. It also states the mechanic (1:1 pass-through to A10 convertDocument), which distinguishes it from a generic document conversion. It stops short of explicitly routing agents away from convert_document or sales_order_from_quote.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one precondition clearly (a non-accepted quote is refused with illegal_transition) and one re-invocation rule (already-converted quotes return the existing target). It never states when to prefer this over the sibling convert_document or sales_order_from_quote, which is the main selection ambiguity an agent faces here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quotes_createB
Destructive

Lege eine Offerte an: a priced offer on a C00 contact. Each line resolves its price once through D00 (contact list, segment list, item base) and its tax code once through the item A05 default, then snapshots both as literals on the shared document_line row (the freeze). Rides A10 createDocument (type quote), always a draft, and POSTS NOTHING (quote has a no-op poster). valid_until is the OR Art. 3 binding window and must be today or later; deal_id links a C01-seeded quote. Foreign contact/item ids are refused (invalid_reference, H-TENANT).

NameRequiredDescriptionDefault
introNo
linesNo
outroNo
dealIdNo
currencyNo
contactIdNo
validUntilNo
workspaceIdYes
idempotencyKeyNo

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the destructiveHint annotation: it explains price and tax resolution, literal snapshotting on document_line, draft-only creation, no accounting posting, valid_until constraints, deal linkage, and tenant refusal behavior. Some internal codes are cryptic, but the operational consequences are unusually well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, and most sentences convey behavioral information, but the description is a dense single paragraph mixing German and English with internal codes such as C00, D00, A05, and A10. It is informative but not as readable or structured as it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 9-parameter create tool with no output schema, the description gives valuable business context around pricing, freezing, draft status, posting, and tenant checks. However, it leaves many parameter semantics and the return shape unexplained, so it is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 9 parameters, so the description must carry the burden. It only partially explains validUntil, dealId, contactId/itemId references, and line price/tax resolution; it does not explain workspaceId, currency, intro/outro, idempotencyKey, quantityMilli, unitPriceMinor, or most line fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: create a priced offer on a contact, with lines frozen against price and tax resolution. The purpose is distinguishable from siblings like quotes_revise and quotes_update, though internal codes such as C00 and A10 reduce immediate accessibility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies create-new-quote usage and notes that the quote is always a draft and posts nothing, but it does not explicitly state when to use this tool versus alternatives such as quotes_revise, quotes_update, deals_to_quote, or quotes_convert. Constraints like valid_until are present, but they are not usage routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quotes_declineB

Lehne eine Offerte ab (by quoteId or token): moves the quote to declined, persists an optional decline_reason, invalidates the token, and logs the timeline note (OP5). A declined quote can only be superseded by a revision.

NameRequiredDescriptionDefault
tokenNo
quoteIdNo
workspaceIdYes
declineReasonNo
idempotencyKeyNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only provide destructiveHint=false, so the description carries most of the behavioral burden and does well: it discloses the state change to declined, persistence of an optional decline reason, token invalidation, timeline note logging, and revision-only supersession. It still does not explain permissions, idempotency behavior, or return effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the action, with no filler sentences. The mixed German/English opening and unexplained '(OP5)' reference are minor blemishes, but each sentence carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and only a destructiveHint annotation, it does well on the core state transition and side effects. However, it leaves required invocation details such as workspaceId, idempotencyKey behavior, permissions, and response expectations unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for all five parameters. It explains quoteId/token and the optional decline reason, but omits the required workspaceId and the idempotencyKey semantics entirely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: decline a quote by quoteId or token. It clearly distinguishes the tool from accept/send/revise siblings through the 'declined' state transition, though it does not explicitly name an alternative tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It indicates invocation by quoteId or token and states that a declined quote can only be superseded by a revision, which gives useful context. However, it never explicitly names quotes_revise, quotes_accept, or another sibling as the alternative, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quotes_expire_sweepA

Verfallene Offerten kehren aus der offenen Liste: for every sent quote past its valid_until, transition it to expired so lists and forecasting never count a dead offer. Agent-scheduled; the Studio list triggers the same verb lazily. Returns { expired: N }. A no-op when nothing is past validity.

NameRequiredDescriptionDefault
workspaceIdYes
idempotencyKeyNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond destructiveHint=false: the bulk scope (all sent quotes past valid_until), the exact state transition, the lazy Studio trigger, and the return shape { expired: N }. It does not say whether expiry is reversible or what permissions/statuses gate it, and nothing contradicts the non-destructive annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and behavior in a few dense sentences. The German opening clause duplicates the English that immediately follows, costing a bit of space without adding information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Though there is no output schema, the description supplies the return value and no-op case, and explains the sweep model, which covers most of what an agent needs. Missing pieces are idempotencyKey semantics and whether an expired quote can be reopened.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden for the two parameters, and it says nothing about workspaceId scoping or what idempotencyKey does on repeat calls. Only scope-by-validity is implied, which is not a parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (transition to expired) plus the exact resource and scope: every sent quote past its valid_until. An agent can tell it apart from the manual siblings (quotes_accept, quotes_decline, quotes_convert, quotes_revise) without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context: agent-scheduled sweep, and the Studio list triggers the same verb lazily, so an agent knows it need not run this for list correctness. Also states 'a no-op when nothing is past validity', which is useful before-call guidance, but no alternative or exclusion is named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quotes_getA
Read-only

Lies eine Offerte mit Positionen, Statusverlauf und den C02-Feldern (validUntil, version, dealId, intro/outro, acceptedBy, declineReason). A sent quote past its validity is flagged expired on read (derived, never mutating; the sweep does the durable transition).

NameRequiredDescriptionDefault
quoteIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint=true annotation, the description discloses a subtle behavioral trait: an expired sent quote is flagged expired on read, explicitly described as derived and never mutating, with the durable transition delegated to the sweep. This is precisely the non-obvious context an agent needs to avoid assuming the read itself changes state, and it reinforces rather than contradicts the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler: the first front-loads the action and content, the second adds a single behavioral nuance that earns its place. The field list is compact and immediately useful, and no information is repeated from annotations or the input schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value explanation, and it does cover what is returned: positions, status history, and the enumerated CO2 fields, plus the derived expiry-flag behavior. It is missing only minor conveniences such as not-found/error behavior or explicit parameter guidance, which keeps it from a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining the parameters, but it explains neither workspaceId nor quoteId. The field names are self-evident and the German 'eine Offerte' loosely implies quoteId identifies the quote, yet nothing clarifies the scoping role of workspaceId or any format constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource — 'Lies eine Offerte' (read a quote) — and enumerates the returned content: line items, status history, and the named CO2 fields. The read semantics and 'never mutating' statement clearly separate it from mutating siblings like quotes_send, quotes_accept, quotes_decline, and quotes_revise, and the single-object scope distinguishes it from quotes_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer this tool is for retrieving full quote details, but the description never explicitly says 'use this when you need a quote's items and status' or names alternatives like quotes_list or quotes_get vs. quotes_revise. No when-not-to-use or exclusion conditions are given, so the agent must derive the context from the verb 'Lies' and the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quotes_listA
Read-only

Liste die Offerten (P5): filter by status or contact. Only the newest version of a chain shows by default (a superseded quote is hidden unless includeSuperseded); each row carries validUntil, version and a derived expired flag. savedViewId applies a saved view (G00): its stored filters merge underneath any filter named explicitly here.

NameRequiredDescriptionDefault
statusNo
contactIdNo
savedViewIdNo
workspaceIdYes
includeSupersededNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses important behaviors: only the newest version shows by default, superseded quotes are hidden unless includeSuperseded is set, each row carries validUntil, version, and an expired flag, and savedViewId merges stored filters under explicit ones. This is rich behavioral context that aids correct invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary purpose, then behavioral details. No fluff; every clause adds value. The 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with five parameters and no output schema, the description covers the key operational aspects: filtering, versioning, and saved-view merging. It lacks explicit mention of pagination or output structure, but these are less critical for a list operation. Overall, it provides enough to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters. It covers status, contactId, includeSuperseded, and savedViewId, but omits workspaceId, which is required. While workspaceId is self-explanatory, the description does not explicitly mention it. It also doesn't detail return format, but that's beyond parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists quotes (Offerten) and specifies filtering by status or contact. It also distinguishes this list operation from sibling tools like quotes_get by describing the versioning and saved-view behavior unique to listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on how to use the tool (filtering by status or contact, including superseded quotes, applying saved views) but does not explicitly mention when not to use it or point to alternatives like quotes_get for single-quote retrieval. The usage guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quotes_reviseA

Revidiere eine gesendete/abgelehnte/abgelaufene Offerte: clones the FROZEN lines byte-for-byte into a new draft (version n+1, supersedes_id at the old row) and retires the old version as superseded, invalidating its token. A draft is edited in place, not versioned (edit_draft_instead); an accepted or converted quote is the binding record and is refused (illegal_transition).

NameRequiredDescriptionDefault
quoteIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Only destructiveHint=false is annotated, so the description carries the load and does so well: it discloses version bumping, supersedes_id placement, token invalidation of the old version, and the specific error code on refusal. It does not state whether the call is idempotent or what the response returns, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Highly front-loaded and dense with substance; every clause adds a fact (clone semantics, version arithmetic, supersedes_id, token invalidation, exclusions). Minor deduction for the mixed German/English opening clause, which is slightly jarring though not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations beyond destructiveHint, so the description is the sole source. It covers the state-machine consequences thoroughly but omits the shape of the result (e.g. new quote/version id) and all parameter documentation, leaving real gaps for a three-parameter mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description names none of the three parameters. quoteId/workspaceId are inferable from context, but idempotencyKey — a meaningful behavioral lever on a version-creating mutation — is left completely unexplained in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource (revise a sent/declined/expired quote) plus precise mechanics: clones frozen lines byte-for-byte into draft n+1, sets supersedes_id on the old row, retires the old version. It explicitly distinguishes itself from edit_draft_instead (drafts) and from accepted/converted quotes which are refused.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the entry conditions (status must be sent, declined, or expired), the explicit alternative for drafts (edit_draft_instead), and the refusal case (accepted/converted quotes, error illegal_transition). An agent can decide use vs. non-use without inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quotes_sendA

Versende eine Offerte (P8 outbound, draft-gated): one atomic write issuing the gap-free O-number (no ledger posting), minting the single-use e-accept token (only its hash is stored), and moving the quote to sent. Returns the local artifact plus transmitted:false / reason:cloud_tier: the OSS core produces the PDF and the accept link and stops; email/portal delivery is the cloud tier (needs_dispatch_module). The G05 send log records one artifact_created row (list_dispatches). A quote with no lines is refused (no_lines); a non-draft quote is refused (illegal_transition). Idempotent: a replay returns the original token and number, never a second of either. CONSEQUENCE: Numbers the quote, freezes it and makes its online accept link; TILL hands you the PDF and the link and emails nothing itself. To change it later, you revise it into a new version.

NameRequiredDescriptionDefault
quoteIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, so the description carries the real burden and does: no ledger posting, only the token hash is stored, delivery is cloud-tier so it returns transmitted:false / reason:cloud_tier, a G05 artifact_created row appears in list_dispatches, and idempotent replays return the original token/number. The named refusal codes and the 'freezes it' consequence give an agent the full effect profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then behavior, failure modes, idempotency, and the consequence. Dense but every clause is load-bearing except the closing 'CONSEQUENCE:' sentence, which largely recaps the earlier 'stops; email delivery is cloud tier' statement, and the German/English mixing adds slight friction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description still specifies the return shape (local artifact plus transmitted:false / reason:cloud_tier), all refusal conditions, and the side effects. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains replay semantics well ('a replay returns the original token and number, never a second of either'), which is the only non-obvious parameter (idempotencyKey); quoteId and workspaceId remain undocumented but are self-evident by name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource ('Versende eine Offerte') and enumerates exactly what the atomic write does: issues the gap-free O-number, mints the single-use e-accept token, moves the quote to sent. It is clearly separable from quotes_revise, quotes_accept and quotes_convert without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit preconditions: must be a draft (non-draft → illegal_transition) and must have lines (no lines → no_lines), plus the follow-up path 'to change it later, you revise it into a new version'. It stops short of naming quotes_revise or quotes_convert as explicit alternatives, so routing is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quotes_updateA
Destructive

Bearbeite eine Offerte im Entwurf: retitle the contact, re-price lines (re-resolved and re-snapshotted exactly as create), or set validUntil/intro/outro. Draft-only: A10 refuses a patch on an issued or later quote (document_immutable), which is the tax/total freeze at work. A validity in the past is refused (validity_in_past).

NameRequiredDescriptionDefault
patchYes
quoteIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavior beyond the destructiveHint annotation: patching lines triggers re-resolution and re-snapshotting 'exactly as create', which tells the agent that existing line prices are overwritten rather than merged, and two named refusal codes are disclosed. It does not say whether omitted patch fields are preserved or cleared.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the verb and resource, then qualifications, in roughly three sentences with no filler. The German/English code-switching is a minor readability wart but costs no length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nested-patch mutation with no output schema and minimal annotations, key gaps remain: whether the patch is a partial merge or a replacement of the lines array, what currency changes imply, and why idempotencyKey exists. The immutable/invalid-validity constraints are covered well, but patch merge semantics are not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 4 params including a 6-field nested patch object, so the description must carry the load. It covers contactId, lines and validUntil/intro/outro conceptually and adds re-pricing semantics, but currency, idempotencyKey and all line-level fields (itemId, taxCode, quantityMilli, unitPriceMinor, supplyDate) go unmentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Bearbeite eine Offerte im Entwurf') and enumerates the editable surfaces (contact, lines, validUntil/intro/outro). It is clearly a draft-quote patch tool, but it never distinguishes itself from the sibling quotes_revise, so an agent cannot tell which of the two mutation paths to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete when-not condition: draft-only, with issued-or-later quotes refused as document_immutable, plus a validity_in_past refusal. It does not name an alternative (e.g. quotes_revise) for the issued-quote case, leaving the routing to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rate_card_endB

Beende einen Tarif ohne Nachfolger (a client override lapses): writes valid_to on an open card. An already-ended card refuses with rate_card_already_ended; validTo must be after validFrom.

NameRequiredDescriptionDefault
validToYes
rateCardIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply destructiveHint=false, so the description does the heavy lifting and does it well: it discloses the write effect, the already-ended refusal with error code rate_card_already_ended, and the validTo > validFrom constraint. It stops short of saying whether the action is reversible or what success returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and front-loaded: the effect and precondition come first, the error contract second. The German/English mixture is slightly awkward but costs no space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with thin annotations, no output schema and no parameter descriptions, the essentials of the effect and one failure mode are covered, but idempotency semantics and the post-condition (how the card looks after it is ended) are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for all four parameters. It only illuminates validTo (must be after validFrom) and implicitly rateCardId (must be an open card); workspaceId and especially idempotencyKey are left completely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: ends a rate card without a successor by writing valid_to on an open card. Clear enough to distinguish from rate_card_upsert/list, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"ohne Nachfolger" and "a client override lapses" imply the situation that calls for this tool, but no explicit when-not-use or pointer to an alternative (e.g. upsert a successor instead) is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rate_card_listA
Read-only

List the rate cards (P5): every version with scope, scopeRef, rateMinor, currency and validity, optionally one scope or only the cards active at a day.

NameRequiredDescriptionDefault
scopeNo
activeAtNo
workspaceIdYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes the safety profile, and the description adds useful behavioral context by stating that every version is returned along with the listed fields and optional filtering. However, it does not disclose ordering, pagination, default scope behavior, or how 'active at a day' is interpreted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence front-loads the core operation and adds only relevant details about returned fields and filters. The unexplained 'P5' label is a minor clarity deduction, just enough to prevent a top rating.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation, the description is reasonably complete: it names the resource, the returned attributes, and the two optional filters and relies on the readOnlyHint annotation for safety. It lacks pagination and ordering guidance, but no output schema exists and the rest of the context is adequately covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining the parameters, and it largely does: 'optionally one scope' maps directly to the scope parameter and 'active at a day' maps to activeAt. The required workspaceId is not explained, but its meaning is self-evident from its name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete verb and resource, 'List the rate cards (P5)', and enumerates the returned fields (scope, scopeRef, rateMinor, currency, validity) plus optional filters. This makes the tool easy to distinguish from write-oriented siblings like rate_card_upsert and rate_card_end, despite a cryptic 'P5' parenthetical.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to choose this tool over alternatives, no exclusions, and no mention of related list or rate-card operations. The optional filters indicate what the tool can do, but not the conditions under which it should be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rate_card_upsertA

Lege einen Tarif an (rate card): scope default, employee, project or client (scoped cards name their scopeRef), integer-Rappen rateMinor, valid from a day. costRateMinor is the optional INTERNAL cost rate (same currency) that values the B03 Projekterfolg cost basis; entries snapshot it at capture like the bill rate, and without one the cost basis degrades honestly (basisDegraded). A new card for the same scope VERSIONS the previous one: the open predecessor is end-dated at the new validFrom and its rate is never mutated, so snapshotted entries keep their price (OP1). Overlapping validity refuses with rate_card_overlap.

NameRequiredDescriptionDefault
scopeYes
currencyNo
scopeRefNo
rateMinorYes
validFromYes
workspaceIdYes
costRateMinorNo
idempotencyKeyNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false in annotations, the description carries the burden and delivers rich behavior: the predecessor is end-dated rather than mutated, snapshotted entries keep their price (OP1), overlaps refuse with a named error, and missing costRateMinor causes an honest basisDegraded state. This is exactly the context an agent needs before a versioning write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the creation purpose, and each sentence adds material behavior (scopes, units, cost basis, versioning, overlap error). It is dense but a single paragraph with internal jargon (B03, OP1) makes it harder to scan than it could be; still no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex versioned write with eight parameters and no output schema, the description covers scopes, units, cost-basis implications, versioning semantics, and the overlap failure mode. The main gaps are currency handling and idempotencyKey semantics, which an agent might need for a safe upsert.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate — and it explains the non-obvious parameters well: scope values and scopeRef for scoped cards, rateMinor as integer Rappen, validFrom as a day, and costRateMinor as an optional internal cost rate in the same currency. workspaceId, currency, and idempotencyKey remain undocumented, so not fully complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lege einen Tarif an (rate card)') and immediately enumerates the scope variants (default, employee, project, client), which distinguishes it from siblings like rate_card_list and rate_card_end. An agent can tell exactly what this creates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for use — creating a new card, with overlapping validity refusing via rate_card_overlap and a new same-scope card versioning the predecessor. It does not explicitly name alternatives (e.g., rate_card_end) or state when not to use it, so it falls short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

receipt_recordA
Destructive

AGENT-FIRST. Erfasse einen Wareneingang (voll oder teilweise) gegen eine gesendete Bestellung: writes a goods_receipt + lines and, for every stock-tracked line, mints ONE D01 receipt movement through stock.move (OP2, D02 never writes stock_movement itself), storing each stock_movement_id for 1:1 traceability. Each po_line.received_qty rises; when every line is fully received the PO advances sent -> received. The unit cost handed to D01 is the line`s CHF BASE cost (H-FX). Atomic and idempotent: over-receipt (qty over the open order qty) is PRE-CHECKED and refused with over_receipt (a refusal writes zero rows and moves zero stock), a D01 refusal rolls the whole receipt back, and a retry under the same idempotencyKey mints NOTHING a second time. Receiving against a draft/received/closed/cancelled PO is refused (invalid_transition). The intended agent loop is D01 low-stock -> supplier_price_list -> pre-filled po_upsert -> receipt. CONSEQUENCE: Records goods received against the purchase order and takes them into stock; the order counts them as received. This receipt has no undo; wrong stock is corrected with a stock adjustment.

NameRequiredDescriptionDefault
noteNo
poIdYes
actorNo
linesNo
locationIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond destructiveHint=true: it discloses atomicity, idempotency keying ('a retry under the same idempotencyKey mints NOTHING a second time'), pre-checked over-receipt refusal writing zero rows, rollback on D01 refusal, PO status advancement rules, and the CHF base-cost FX basis. The 'no undo' consequence statement directly reinforces the destructive hint with concrete recovery guidance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and the consequence is clearly signposted, but the body is a dense run-on with mixed German/English, nested parentheticals and internal jargon (D01/D02, H-FX, OP2) that inflates reading cost. Useful content, poorly compressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only a single annotation, the description carries most of the burden and does deliver the transaction lifecycle, failure modes and recovery path. Remaining gaps are parameter-level (locationId, actor, note) rather than behavioral.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters, so the description must compensate. It explains idempotencyKey and the lines/qty semantics (per po_line.received_qty, refused if over open order qty) well, but locationId, workspaceId, actor and note get no explanation at all, and nothing says whether omitting lines implies receiving everything.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Erfasse einen Wareneingang ... gegen eine gesendete Bestellung') and spells out the exact writes: goods_receipt + lines, plus one D01 stock.move per stock-tracked line. It separates itself from internal services (D02 never writes stock_movement) and names the upstream loop (D01 low-stock -> supplier_price_list -> po_upsert), so an agent can tell what this tool is and is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit intended agent loop and explicit exclusions: receiving against a draft/received/closed/cancelled PO is refused, and wrong stock is corrected with a stock adjustment rather than an undo. It does not, however, distinguish itself from the sibling goods_receipt_create/post/upsert_lines tools, leaving that choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_exchange_rateA
Idempotent

Record a foreign-currency rate (§H-FX). rate is a DECIMAL STRING and is the price of one unit of baseCurrency in the workspace base currency, so EUR/CHF 0.9412 means 1 EUR = 0.9412 CHF. asOf is the date the rate is valid FOR. method names the admissible MWSTV Art. 45 basis (daily | monthly_avg | bank | group). Recording the same rate twice is one row; a different rate under the same date and source is refused, because it may already have priced a posted entry. CONSEQUENCE: Records an exchange rate for its date; foreign-currency entries on that date then use it. The rate stays on record unchanged; an entry it priced wrongly is fixed with a correcting entry.

NameRequiredDescriptionDefault
asOfYes
rateYes
methodNo
sourceNo
provenanceNo
workspaceIdYes
baseCurrencyYes
quoteCurrencyNo
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it explains that re-recording the same rate is one row (the concrete meaning of idempotency here), that a conflicting rate for the same date+source is refused because it may already have priced a posted entry, and that the rate is immutable with corrections made via a compensating entry. That is exactly the mutation-safety context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then the key parameter semantics, then consequences; each block is purposeful. The trailing 'CONSEQUENCE' section partly restates the earlier sentence about entries using the rate, so it is slightly repetitive but still earns its place by summarizing the effect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation with no output schema and only minimal annotations, it covers consequence, idempotency, refusal behavior and the correction path. It stops short of stating the return value and leaves several optional fields (source, provenance, quoteCurrency) undefined, which is the main residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage across 9 parameters, the description must carry the load; it does well on the three hardest (rate as a decimal string with unit semantics, asOf as the validity date, method with its four admissible MWSTV Art. 45 values). But source, provenance, quoteCurrency, idempotencyKey and workspaceId get no explanation at all — notably quoteCurrency, whose relationship to the 'base currency' quote convention is genuinely ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Record a foreign-currency rate') and immediately pins down semantics with a worked example (EUR/CHF 0.9412 = 1 EUR = 0.9412 CHF). It is clearly distinct from the read/list siblings (list_exchange_rates, get_exchange_rate) and from set_fx_method by virtue of recording an actual dated rate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than routed: 'foreign-currency entries on that date then use it' tells the agent the downstream effect, and the refusal rule ('a different rate under the same date and source is refused') sets a guardrail. However, no alternatives are named — bulk loading via import_exchange_rates or method configuration via set_fx_method are never referenced, so the agent must infer when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_expenseA
Idempotent

Capture AND post a supplier bill or expense in one step (the human default): the same input as create_vendor_bill, composed with post_vendor_bill in ONE transaction, so a refused posting leaves no draft behind. Posts the expense or asset net plus 1170/1171 Vorsteuer against 2000 Kreditoren gross, stamping the §H-VAT-TRACE the MWST-Abrechnung reads. Under the Saldo method (MWSTG Art. 37) nothing is separately reclaimed and the expense books gross: the result says so with vorsteuerDeductible:false. CONSEQUENCE: Records the vendor bill and books it in one step. If it is wrong, you void the bill, which books a correcting entry; both stay on record.

NameRequiredDescriptionDefault
fxRateNo
dueDateNo
taxCodeNo
billDateYes
currencyNo
vendorIdYes
projectIdNo
receiptRefNo
supplyDateNo
amountMinorYes
workspaceIdYes
costCenterIdNo
amountIsGrossNo
idempotencyKeyYes
vendorReferenceNo
expenseAccountIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (idempotent, non-destructive), it discloses transactional atomicity ('a refused posting leaves no draft behind'), the exact ledger legs and VAT-trace stamping, the Saldo-method gross-booking behavior, and the correction consequence ('void the bill, which books a correcting entry; both stay on record'). This is exactly the extra context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key composition behavior is front-loaded in sentence one, and the labeled 'CONSEQUENCE:' block usefully isolates the correction story. It loses a point for restating 'in one step' twice and for dense accounting jargon (1170/1171 Vorsteuer, §H-VAT-TRACE) that crowds the actionable content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description partially covers the return value ('the result says so with vorsteuerDeductible:false') but never sketches the response shape. Combined with zero documentation of 16 input parameters on a composite mutation tool, meaningful gaps remain despite strong behavioral prose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 16 parameters, and the description explains none of them in-line, not even the semantically loaded ones like amountIsGross, taxCode, or fxRate. The pointer 'same input as create_vendor_bill' is only a partial substitute and still leaves gross-vs-net handling of amountMinor ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Capture AND post a supplier bill or expense') and precisely scopes it as the composition of create_vendor_bill plus post_vendor_bill in one transaction. An agent can distinguish it from both sibling primitives without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It positions itself as 'the human default' and names the alternative two-step tools (create_vendor_bill, post_vendor_bill) plus the correction path (void_vendor_bill). It does not explicitly state when an agent should prefer the two-step flow (e.g., needing a draft to review first), so exclusions are implied 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.

record_incoming_creditA
Idempotent

Register an incoming bank credit in the Abgleich queue and score it against the open invoices: manual entry today, and the seam A20's camt import will feed later. bankAccountId is the A19 Bankkonto the money landed on (needs_bank_account if unregistered), amountMinor is integer Rappen, valueDate the credit's value date, reference whatever the advice carries (a QRR or Creditor Reference is validated; free text falls to the heuristic lane). Writes the queue row and NOTHING else: no posting, no ledger effect. A bankTxnId already registered returns the existing row (a re-imported statement duplicates nothing), and a repeat call under the same idempotencyKey replays byte-identically. CONSEQUENCE: Adds a received payment to the matching queue and suggests the invoices it may pay; nothing is booked yet. If it is matched wrongly, you point it at another invoice or take it out of the match.

NameRequiredDescriptionDefault
currencyNo
bankTxnIdNo
payerNameNo
referenceNo
valueDateYes
amountMinorYes
workspaceIdYes
bankAccountIdYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it declares the write scope precisely ('Writes the queue row and NOTHING else: no posting, no ledger effect'), explains the duplicate-bankTxnId behavior (returns existing row, no duplicate), and states that repeat calls under the same idempotencyKey replay byte-identically. The CONSEQUENCE block spells out the real-world effect on the matching queue.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and write-scope constraint, and most sentences carry distinct information (idempotency, reference validation, no ledger effect). The final CONSEQUENCE sentence largely restates 'no posting, no ledger effect' already stated earlier, which is mild redundancy in an otherwise dense passage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation with no output schema, the description covers the important behavioral facts — write scope, idempotency, duplicate handling, and that matches are provisional and reversible. It only gestures at the return payload ('suggests the invoices it may pay') without describing what the scored result actually contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden and does so for most fields: bankAccountId (A19 Bankkonto, needs_bank_account when unregistered), amountMinor (integer Rappen), valueDate, reference (QRR/Creditor Reference validated vs. free-text heuristic lane), bankTxnId, and idempotencyKey semantics. workspaceId, currency, and payerName are left entirely unexplained, which keeps it short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource — register an incoming bank credit into the Abgleich queue and score it against open invoices — and distinguishes the path from the camt-import seam that will feed the same queue later. An agent can tell this apart from record_payment/allocate_payment/import_camt without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Manual entry today, and the seam A20's camt import will feed later' clearly frames when this tool applies versus the automated import path. It also hints at remediation ('point it at another invoice or take it out of the match') but never names the sibling tool to use for that, so the routing is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_paymentA
Idempotent

Record an incoming or outgoing payment and post its balanced entry (bucht eine Zahlung). Allocates across one or several open items with partial amounts, Skonto, and an Ausbuchung of a small residual; any remainder is parked as a Guthaben for its counterparty. Requires intent='post_payment', because money never moves as a side effect. CONSEQUENCE: Records the payment and marks what it settles as paid. If it is wrong, you reverse the payment, which reopens them; both stay visible.

NameRequiredDescriptionDefault
dateYes
fxRateNo
intentYes
sourceNo
currencyNo
directionYes
referenceNo
allocationsNo
amountMinorYes
workspaceIdYes
bankAccountIdYes
counterpartyIdNo
idempotencyKeyYes
onAccountMinorNo
counterpartyKindNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the idempotentHint and destructiveHint annotations by explaining the consequence: the payment is recorded, items are marked paid, and reversal reopens them while keeping both visible. It also explains the intent guard against accidental money movement, though it does not cover permissions 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action, then moves through allocation semantics, the intent requirement, and the consequence/reversal behavior. Every sentence contributes useful information for a complex payment-recording tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter mutation with no output schema and 0% schema description coverage, the description covers the most important behavioral and allocation semantics. However, it is not complete enough to compensate for the many undocumented parameters an agent must still infer from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 15 parameters, so the description must carry the burden. It clarifies intent='post_payment' and explains allocation concepts like Skonto, Ausbuchung, residual Guthaben, and partial amounts, but it leaves most required parameters such as workspaceId, bankAccountId, date, amountMinor, and idempotencyKey unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: record an incoming or outgoing payment and post its balanced entry. It adds meaningful allocation behavior, but it does not explicitly differentiate itself from close siblings such as allocate_payment or preview_payment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied by 'Record an incoming or outgoing payment,' and the requirement for intent='post_payment' adds a useful usage constraint. However, it never names alternative tools or explains when to use preview_payment, allocate_payment, or suggest_payment_matches instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_plugin_compatA
Idempotent

Prüfe die Kompatibilität neu (US-G02.4): compare the plugins compat_range against the current core version with standard semver range semantics and persist the verdict. A range that no longer matches flips status to incompatible and sweeps the plugins capabilities (its manifest and granted permissions retained); a range that matches again flips it back to installed and re-registers. Never a crash, only the badge (P9). CONSEQUENCE: Checks the plugin against this TILL version and switches it off or back on. Switched back on, its third-party code runs with the rights you granted and what it does stays done; you can disable it again.

NameRequiredDescriptionDefault
pluginIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say idempotentHint=true and destructiveHint=false; the description goes well beyond that by disclosing exactly what mutates (status flips between incompatible and installed), what is retained (manifest and granted permissions), that re-registration happens on re-match, and that third-party code runs with granted rights and its effects persist. Deductions for cryptic internal references ('US-G02.4', 'P9', 'this TILL version') and for not touching auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core explanation leads and is followed by a useful consequence block, but the text is bilingual and cluttered with internal ticket codes, and the CONSEQUENCE paragraph substantially repeats the earlier 'flips status to incompatible / back to installed' sentence. Several sentences would need trimming to earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-mutating plugin-lifecycle tool the behavioral picture is quite complete, and no output schema exists so return values need not be explained. However, with zero schema coverage on all three parameters and no mention of permissions or authorization, an agent still lacks the information needed to construct a correct first call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three required parameters, so the schema itself explains nothing. The description never explains workspaceId, and says nothing about idempotencyKey or its expected format, leaving the agent to guess at retry semantics — it only indirectly implies pluginId by talking about 'the plugin's compat_range'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — re-check a plugin's compat_range against the current core version with semver semantics and persist the verdict — plus the concrete state transitions that result (incompatible / installed). An agent can distinguish this from install_plugin, enable_plugin, get_plugin and preview_plugin_install without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trigger is implied ('compare the plugin's compat_range against the current core version', i.e. after a core/TILL version change) and the effect is described, but there is no explicit statement of when to call this rather than enable_plugin/disable_plugin/get_plugin, nor any preconditions or exclusions. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reject_drafted_actionA
Idempotent

Reject a drafted agent action from the inbox: drop it unexecuted (idempotent on actionId; an already-executed action refuses). reason is the human's optional sentence on why, stored on the proposal and shown in the trace beside the drafting call, so the next session reads it. Owner-gated (manage_agent_dial).

NameRequiredDescriptionDefault
reasonNo
actionIdYes
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses the idempotency key (actionId), the refusal path for already-executed actions, the authorization requirement ('owner-gated (manage_agent_dial)'), and where the reason ends up (stored on the proposal, shown in the trace for the next session). That is a full behavioral picture for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence-cluster front-loads the action and effect, then layers refusal, persistence, and auth. No filler, though the parenthetical asides make it slightly packed to parse in one read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description covers effect, idempotency, refusal behavior, permission gate, and reason persistence, which is enough to call it safely. It stops short of describing the response or what 'inbox' scope workspaceId implies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry semantics: it explains that idempotency keys on actionId and that reason is an optional human sentence persisted on the proposal and surfaced in the trace. Only workspaceId is left unexplained, which the description does not compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('reject a drafted agent action from the inbox') plus the concrete effect ('drop it unexecuted'). This clearly separates it from approve_drafted_action and list_drafted_actions without needing the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The failure condition ('an already-executed action refuses') tells the agent when this call is inapplicable, which is a real routing signal. It does not explicitly name approve_drafted_action as the counterpart for the opposite decision, so guidance is strong but not complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reopen_bank_lineA
Idempotent

Undo the decision on ONE bank line without editing history: a booked line's entry is reversed, or its payment reversed (which reopens the settled invoice or bill), on the date of what is reversed; a matched or ignored line only has its decision superseded and posts nothing. The old decision stays on record with who, when and reason; the line is open again and an imported credit's QR row follows it. A run booked through payment_batch keeps its payments (reverse_payment undoes one). A transfer whose other bank leg the other account's line still holds refuses owned_by naming that line: reopen that line first. A locked period refuses period_locked unchanged. CONSEQUENCE: Opens the bank line again: a booking or payment it made is reversed with a correcting entry, but a payment run keeps its payments. The old decision stays on record; you can book the line afresh.

NameRequiredDescriptionDefault
reasonYes
bankTxnIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it explains exactly what is reversed, that history is preserved with who/when/reason, that matched or ignored lines post nothing, that QR rows follow imported credits, and how payment_batch and locked periods behave. This is consistent with destructiveHint=false because the operation reverses and reopens rather than deleting history.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and information-dense, but the CONSEQUENCE section restates earlier points about reversal, payment runs keeping payments, and history retention. It is appropriately sized for a complex mutation, yet the repetition weakens conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema, it thoroughly covers behavioral outcomes and edge cases, including transfers and locked periods. However, the missing parameter semantics and lack of response/idempotency detail keep it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the four parameters, but it only hints at bankTxnId through "ONE bank line" and at reason through the recorded decision reason. It does not explain workspaceId or idempotencyKey, leaving substantial parameter semantics undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Undo the decision on ONE bank line" states a specific verb, resource, and scope, and the description distinguishes the booked, matched, ignored, payment-batch, transfer, and locked-period cases. It also names reverse_payment as the alternative for undoing an individual payment run payment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context and several exclusions: payment_batch runs keep their payments, transfer cases may require reopening the other leg first, and locked periods fail with period_locked. It does not explicitly compare with siblings such as reverse_entry or review_bank_txn, so it falls short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reopen_monthB
DestructiveIdempotent

Reopen a soft-closed month (a hard-sealed month refuses). CONSEQUENCE: Reopens a closed month, so bookings into it are accepted again. You can close it again at any time.

NameRequiredDescriptionDefault
periodYes
workspaceIdYes
idempotencyKeyYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint and idempotentHint, so the description earns credit for adding real consequence detail: bookings into the month become accepted again and the month can be re-closed. It still omits whether existing posting validations or downstream reports are affected, and says nothing about the idempotency behavior the annotation promises.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and its precondition. The 'CONSEQUENCE:' sentence partially restates the first sentence ('Reopens a closed month'), a small redundancy, but overall it is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity mutation with no output schema, the description covers effect and refusal conditions adequately. It is incomplete on the parameter side — nothing on the three required fields — which leaves the agent dependent on undocumented schema keys.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three required parameters, so the description carries the full burden — yet it mentions none of workspaceId, period, or idempotencyKey. An agent gets no hint about period format or what the idempotency key protects against, which is a meaningful gap for a required-key mutation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reopen a soft-closed month') and adds a distinguishing condition ('a hard-sealed month refuses'), which lets an agent separate this from lock/unlock siblings. It stops short of naming the direct alternative, close_month, but the 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The soft-closed vs hard-sealed distinction implicitly tells the agent when this will succeed, and 'you can close it again at any time' hints at reversibility. However, it never says when to use this instead of unlock_period or how to handle the hard-sealed case, so routing guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_deleteA
DestructiveIdempotent

Bericht löschen (F01): remove a definition and its run history. Refused with retention_locked while any run is retention-linked into E00 and still locked there (E00 owns the OR 958f lock); retained E00 documents are untouched. Deleting also deactivates any schedule, so a deleted report can never fire again. Idempotent on idempotencyKey. Gated on A24 reports.write. CONSEQUENCE: Deletes the report with its run history and stops its schedule. Documents filed from its runs stay in your files; the report itself cannot be restored.

NameRequiredDescriptionDefault
reportIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint and idempotentHint annotations, the description discloses the retention-lock refusal behavior, that retained E00 documents stay untouched, that schedules are deactivated, that the operation is gated on A24 reports.write, that idempotency uses idempotencyKey, and that the report cannot be restored. It also clarifies that documents filed from runs remain in files.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and consequence are front-loaded and the core behavior is clear, but the description is dense with internal codes such as F01, E00, OR 958f, and A24, and repeats the deletion consequence. Some sentences earn their place; the phrasing could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with no output schema, the description covers retention locking, authorization gating, schedule deactivation, idempotency, and irreversibility well. It does not describe the success response shape, but the critical behavioral risks are addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It explains idempotencyKey semantics, but does not explain reportId or workspaceId, leaving two of three required parameters without meaning beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: removing a report definition and its run history. It is distinguishable from sibling tools such as reports_update, reports_run, and reports_schedule because it focuses on deletion, schedule deactivation, and irreversible removal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: use this to delete a report, but it is refused with retention_locked when runs are retention-linked into E00 and still locked. It does not explicitly name sibling alternatives, but the when-not condition and consequences provide strong guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_duplicateA
DestructiveIdempotent

Bericht duplizieren (F01): copy a definition with a "(Kopie)" suffix and WITHOUT its schedule or recipients, so a copy never silently starts mailing anyone (P8 spirit). Idempotent on idempotencyKey. Gated on A24 reports.write.

NameRequiredDescriptionDefault
reportIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: what is deliberately NOT copied (schedule, recipients) and why, the naming convention applied, and the A24 reports.write permission gate. It also clarifies idempotency is keyed on idempotencyKey, refining the idempotentHint. It does not address why destructiveHint is set for what is a create-style copy, leaving one annotation unexplained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence with the verb and the key exclusion front-loaded; every clause carries information. The internal codes (F01, P8 spirit, A24) are opaque unless the agent knows the requirement catalogue, so they add length without guaranteed meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description says nothing about the return value, notably whether the new report's ID is returned so the agent can subsequently call reports_schedule. The mutation semantics and permission gate are covered, but that missing linkage is a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It explains idempotencyKey semantics ('Idempotent on idempotencyKey'), which is real added value, but reportId and workspaceId are left to be inferred from their names, and the description never says which report in which workspace is being copied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('copy a definition' of a report) and immediately qualifies the result: a "(Kopie)" suffix, no schedule, no recipients. That is enough to distinguish it from reports_save, reports_update, reports_delete and reports_schedule among the siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys the copy scenario and implicitly tells the agent that scheduling/recipients must be re-established separately, but it never names an alternative tool or states when to prefer this over reports_save with a new name. Usage is inferable rather than prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_listA
Read-only

Berichte anzeigen (F01): the saved-report list (P5), tenant-scoped, newest first, with each definition source, format, schedule, recipients (draft), delivery state and last-run timestamp. Gated on A24 reports.read.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the agent knows it is safe. The description adds that the list is tenant-scoped, newest first, and gated on A24 reports.read, which is useful beyond the annotation. It does not mention pagination, full availability semantics, or what happens with drafts, but the extra detail about the gate and ordering earns a middle score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence with no filler, front-loading the purpose and then packing the list of returned fields and the access gate. Every part adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is strong on what the tool returns and its access gate, but with no output schema and one undocumented parameter, an agent still lacks the meaning of the only required input and pagination details. For a simple read-list tool this is acceptable, but it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the entire burden for explaining the sole parameter, workspaceId. The description does not mention workspaceId at all beyond the tenant-scoped phrase, leaving the agent to guess that the parameter is the required tenant identifier. This is a significant gap for a one-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Berichte anzeigen' / show reports) plus the resource ('saved-report list'), and it states the tenant scope, ordering, and the fields included. It reads as distinct from sibling reports_runs, reports_save, reports_schedule, and reports_preview because it is specifically the list of saved report definitions, not executions or previews.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you need the saved-report list with definition metadata) by naming the resource and the fields it returns. It does not explicitly state when not to use it or point to alternatives such as reports_runs for run history or reports_preview for output. With a large sibling set of report tools, explicit routing would have helped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_previewA
Read-only

Vorschau (F01): read-only ad-hoc compute of a source read model with filters + columns for the builder live preview and agent exploration (P5). Persists nothing. Returns the projected rows (up to limit, default 50), the resolved columns and the full row count. Asserts the source own read gates (a preview never reads past the caller RBAC). Unknown source returns unknown_source; a filter on an unpublished field returns invalid_filter_field.

NameRequiredDescriptionDefault
limitNo
sourceYes
columnsYes
filtersNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint: true, but the description adds crucial behavioral context: persists nothing, asserts the source's read gates, never reads past caller RBAC, and returns error codes for unknown source and invalid filter fields. This goes well beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized, front-loading the core purpose and then covering persistence, return values, RBAC, and error cases. Every sentence adds value, though it could be tightened slightly by trimming the parenthetical identifiers (F01, P5) that are not essential for agent understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a preview tool, the description covers purpose, persistence, RBAC, return values, and error scenarios. It does not specify the exact JSON response shape, but since there is no output schema, this is a minor gap. The behavior is sufficiently described for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must clarify parameters. It mentions 'filters + columns' and explains the limit parameter with its default of 50. However, it does not detail the structure of the filters or columns arrays (e.g., field names, operators), nor does it clarify workspaceId or source beyond being required. It partially compensates but leaves ambiguity in parameter formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool computes a read-only preview of a source read model with filters and columns, for builder live preview and agent exploration. It distinguishes itself from report execution/saving tools by emphasizing it persists nothing and is ad-hoc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly scopes usage to 'builder live preview and agent exploration (P5)', implying it is for interactive exploration rather than final reporting. It also notes it respects RBAC, but does not explicitly name alternative tools like reports_run for persisted reports, so a clear when-not clause is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_runA
Idempotent

Bericht ausführen (F01): compute the source read model with the stored filters (P5), project the stored columns, render CSV (RFC-4180, UTF-8 BOM, machine-neutral integer Rappen) or PDF (report header + rows, de-CH money) as a LOCAL artifact (OP4), append a report_runs row and return the content. An empty result set is a valid ok run (row_count 0, header-only CSV). With retain:true an accounting-record source additionally links the artifact into E00 (F01 never computes a retention date; E00 owns OR 958f). Re-running the same idempotencyKey returns the original artifact. Asserts the source own read gates too. Gated on A24 reports.run.

NameRequiredDescriptionDefault
formatNo
retainNo
reportIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses that the output is a LOCAL artifact, specifies CSV encoding and PDF formatting, notes that an empty result is a valid ok run with row_count 0 and header-only CSV, explains retain behavior and retention ownership, and clarifies idempotent replay semantics and read-gate assertions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and is information-dense for a complex execution tool. Some internal codes and parenthetical references (F01, P5, OP4, E00, OR 958f, A24) add density and minor parsing friction, but the sentences generally carry operational meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex execution tool with no output schema, the description covers the execution pipeline, output formats, empty-result behavior, retention, idempotency, and permission gating. It is nearly complete, though the exact response shape and the roles of reportId/workspaceId remain implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It explains format options (CSV/PDF), retain behavior, and idempotencyKey replay semantics, but it does not explicitly describe reportId or workspaceId, leaving two of the five parameters underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: executing a report by computing the source model, rendering CSV/PDF, appending a report_runs row, and returning content. It is clearly an execution tool, though it never names sibling tools like reports_preview or reports_runs to distinguish itself explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives conditions for retain and idempotencyKey re-runs, and notes permission gating on A24 reports.run. However, it does not state when to use this tool rather than reports_preview, reports_schedule, or reports_runs, so alternative selection is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_runsA
Read-only

Laufverlauf (F01): the append-only run history for one report (P5), newest first, each run status (ok|failed), row count, format, artifact ref, definition-version hash and E00 document link. savedViewId applies a saved view (G00) over the run history: its stored status filter merges underneath an explicit status named here. Gated on A24 reports.read.

NameRequiredDescriptionDefault
statusNo
reportIdYes
savedViewIdNo
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. The description adds meaningful behavioral context beyond that: the data is append-only, results are newest first, and savedViewId's stored status filter merges underneath an explicit status parameter. It does not cover pagination or limits, but the key behavioral nuances 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and efficient: it front-loads the core purpose and return fields, then explains savedViewId behavior, then notes the permission gate. Every clause carries useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description enumerates the return fields (status, row count, format, artifact ref, hash, document link), which is valuable. It also states the required permission. It lacks pagination or response-size details, but for a run-history list tool the essential context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains status and savedViewId semantics, including how the saved view filter merges with an explicit status. However, it does not explain workspaceId or reportId beyond implying reportId selects the report whose history is returned. This is partial compensation for zero schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as returning the append-only run history for a single report, with newest-first ordering and a specific set of fields (status, row count, format, artifact ref, hash, document link). This distinguishes it from sibling tools like reports_run, reports_sources, and reports_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is for one report's run history, and it explains how savedViewId filters interact with an explicit status filter. It does not explicitly name alternatives or state when not to use it, but the scope and filtering behavior are clearly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_saveA
DestructiveIdempotent

Bericht speichern (F01): save a report definition over a REPORT_SOURCES read model (source + filters + columns + format csv|pdf). Validates the source (unknown_source), that every filter names a published field with a type-valid operator (invalid_filter_field), and that columns is a non-empty subset of the published columns, base OR cf: custom fields (columns_empty). Posts nothing (P3); renders no artifact (that is reports_run). Idempotent on idempotencyKey. Gated on A24 reports.write.

NameRequiredDescriptionDefault
nameYes
formatNo
sourceYes
columnsYes
filtersNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond annotations: validation error codes (unknown_source, invalid_filter_field, columns_empty), the permission gate A24 reports.write, and confirmation that it is idempotent on idempotencyKey, which reinforces idempotentHint=true. However, destructiveHint=true is never addressed – it does not say whether saving a definition with an existing name overwrites or replaces a prior report definition, which is exactly the destructive risk an agent needs flagged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the action and its scope come first, followed by validation rules, boundaries against reports_run, idempotency, and the gate. No filler, though the single long run-on sentence could be split so the validation codes and the sibling boundary are easier to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a save operation with no output schema, it covers inputs, failure modes, permissions, and the sibling boundary. The remaining gap is what the call returns (e.g. an id) and whether re-saving an existing definition overwrites it, the latter being material given destructiveHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden and largely meets it: source must come from REPORT_SOURCES, filters must name published fields with type-valid operators, columns must be a non-empty subset of published columns including cf: custom fields, and format is constrained to csv|pdf (the schema has no enums). Only name and workspaceId are left unexplained, which are self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('save a report definition') plus the underlying model ('REPORT_SOURCES read model') and the composition it captures (source + filters + columns + format csv|pdf). It explicitly distinguishes itself from the sibling that renders output ('renders no artifact (that is reports_run)'), so an agent can pick it without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative and the boundary condition explicitly: define-and-save here, render there ('renders no artifact (that is reports_run)'). It also gives the precondition (gated on A24 reports.write), which tells the agent when a call will fail.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_scheduleA
DestructiveIdempotent

Zeitplan setzen (F01): store a validated cron-subset schedule (freq daily|weekly|monthly + at HH:mm, weekly weekday, monthly dayOfMonth) on a saved report; an unsupported expression is refused (invalid_schedule). Recipients are stored draft-gated (P8); in the OSS core there is no delivery transport, so delivery stays inactive (reason cloud_tier) and the LOCAL run always works. schedule:null clears the schedule and keeps the report. Idempotent on idempotencyKey. Gated on A24 reports.write.

NameRequiredDescriptionDefault
reportIdYes
scheduleNo
recipientsNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the annotations: discloses invalid_schedule refusal, draft-gated recipient storage, absence of delivery transport in OSS core (reason cloud_tier), that LOCAL run always works, idempotency on idempotencyKey, and that null clears while preserving the report. This is rich behavioral disclosure consistent with idempotentHint/destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the sentences are dense with actionable facts. Internal codes (F01, P8, A24, cloud_tier) and the German/English mix add some noise, but nearly every clause carries real signal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with nested objects and no output schema, the description covers the essential: permission gate, error path, clearing behavior, delivery limitation, and idempotency. Minor gaps (recipients array shape, workspace/report scoping) remain but the core is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description explains the nested schedule object fields (freq values, at, weekly weekday, monthly dayOfMonth), the schedule:null clearing semantics, and that recipients are draft-gated. workspaceId/reportId/idempotencyKey are only lightly covered but are largely self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'store a validated cron-subset schedule ... on a saved report', and details the schedule shape (freq daily|weekly|monthly + at HH:mm). It's clearly distinct from reports_run/reports_save, though it doesn't explicitly name the potentially confusing recurring-schedule siblings (create/update_recurring_schedule).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides useful context — the A24 reports.write gate, that schedule:null clears while keeping the report, and error behavior — but never states explicitly when to use this versus the recurring-schedule family or update_recurring_schedule. Usage is implied rather than compared to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_sourcesA
Read-only

Datenquellen (F01): the REPORT_SOURCES registry as a read model, each source id, title, entity kind, accounting-record flag, module availability, and its published columns, the union of the source own base fields plus any cf: custom fields defined on its entity kind (OP7), so a custom field appears the moment G00 defines it. Gated on A24 reports.read.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already marks it read-only, but the description adds valuable behavioral context: it is 'a read model' (reinforcing non-mutation), and it discloses that custom fields (cf:) appear dynamically once defined (OP7), and that access is gated on A24 reports.read. This goes beyond the annotation and informs the agent about permission requirements and dynamic data updates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that packs multiple concepts (registry, fields, dynamic custom fields, permission gate) without clear breaks. It is not front-loaded with the most critical information; starting with 'Datenquellen (F01)' may confuse. While concise in length, the structure is unwieldy and could be split into clearer sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description provides a solid list of returned fields (source id, title, entity kind, accounting-record flag, module availability, published columns) and explains the dynamic inclusion of custom fields. It covers the main behavioral aspects, but misses explaining the workspaceId parameter or any pagination/default behavior. For a simple read with one parameter, it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not mention the workspaceId parameter at all. With only one parameter and no description, the agent is left to infer its meaning, though it is a common identifier across many tools. The description fails to compensate for the schema's lack of documentation, so this dimension scores low.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a read model for the REPORT_SOURCES registry, listing the exact fields returned (source id, title, entity kind, accounting-record flag, module availability, published columns). It distinguishes itself from siblings like reports_runs (execution) and reports_list (listing reports) by specifying its read-only nature and content. The verb is implicit but the resource and scope are explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving data source definitions needed for report building, and mentions a permission gate (A24 reports.read), but does not explicitly state when to use this tool versus alternatives like reports_preview or reports_runs. No explicit exclusions or alternative routing is provided, leaving the agent to infer the context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_updateA
DestructiveIdempotent

Bericht bearbeiten (F01): patch name/filters/columns/format on a saved report. Re-validates the definition against its source; changing source to one that no longer exists is refused (unknown_source). Editing a definition never mutates past report_runs artifacts (history is append-only). Idempotent on idempotencyKey. Gated on A24 reports.write.

NameRequiredDescriptionDefault
patchNo
reportIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it states the required authorization scope (A24 reports.write), that the definition is re-validated against its source with a named refusal code (unknown_source), that idempotency is keyed on idempotencyKey, and that historical report_runs artifacts are append-only and never mutated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the operation, then layered with validation, history, idempotency, and auth constraints in short clauses with no filler. The German lead-in and internal codes (F01, A24) add slight noise but each sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and a nested patch object, the description covers the critical agent concerns: permissions, idempotency, validation failure mode, and blast radius. The only gap is the absence of any detail on the return value or the concrete patch field types.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and 'patch' is an untyped nested object, so the description does real work by enumerating the patchable fields (name/filters/columns/format) and explaining idempotencyKey. However, reportId, workspaceId, and the value shapes/types of the patch fields remain undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (patch/edit) and resource (saved report definition) and enumerates the patchable fields (name/filters/columns/format). The clause about never mutating past report_runs artifacts implicitly separates it from reports_run, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (editing an existing saved definition) but the description never says when to use reports_update versus reports_save, reports_duplicate, reports_run, or reports_delete. The precondition of A24 reports.write is given, but there are no explicit when-not rules or named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_approveA
Idempotent

Approve a pending requisition. Completes the named approval task (or the sole open one when taskId is omitted) and, once every required step is satisfied, moves the requisition to approved. Appends an immutable approval event. CONSEQUENCE: Approves your step of this purchase request; once every required approval is in, it can be ordered. The approval stays on record; a request no longer needed is cancelled while nothing was ordered from it.

NameRequiredDescriptionDefault
taskIdNo
commentNo
workspaceIdYes
requisitionIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint and destructiveHint annotations, the description discloses the approval workflow, final state transition to approved, immutable audit event, downstream ordering consequence, and the fact that the approval remains on record. This gives the agent substantial behavioral context for a consequential mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and generally well structured, with the core action and state transition stated immediately. However, the CONSEQUENCE sentence repeats the earlier multi-step approval and ordering points, and the final cancellation clause is somewhat tangential.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a consequential approval mutation, the description adequately covers the lifecycle and audit implications, and annotations cover idempotency and non-destructiveness. Still, with no output schema and no parameter descriptions, it omits permission requirements, error conditions, and the meaning of most input parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains only taskId, including its omission behavior. With 0% schema description coverage, the required workspaceId, requisitionId, and idempotencyKey plus the optional comment are left undocumented, so most parameters receive no semantic guidance from either the schema or the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Approve a pending requisition') and clearly distinguishes this action from sibling requisition operations such as reject, return, and cancel. It also clarifies that taskId can target a named approval task or the sole open task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly establishes the context for use: approving a pending requisition step. It explains the taskId omission case well, but it does not explicitly name alternatives like requisition_reject or requisition_return, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_cancelA
Idempotent

Cancel a draft, pending or approved requisition that has no conversion yet (status cancelled). A requisition that already has any conversion is has_conversions and must be closed instead.

NameRequiredDescriptionDefault
reasonNo
workspaceIdYes
requisitionIdYes
idempotencyKeyYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered; the description adds the resulting state ('status cancelled') and the precondition that blocks the call. It does not mention permissions, whether 'reason' is surfaced to approvers, or reversibility, which are the remaining behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the cancellation scope front-loaded and the exclusion second. Every clause carries decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-transition mutation with three required identifiers and no output schema, the description covers eligibility and outcome but leaves the agent guessing about the idempotency key's role and what the response contains. Annotations compensate for the safety side but not the parameter side.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 4 parameters, so the description carries the full burden, yet it explains none of them: neither 'reason', nor 'workspaceId'/'requisitionId' scoping, nor the required 'idempotencyKey'. Only the requisition concept is obliquely referenced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Cancel a ... requisition') and narrows the scope by lifecycle state (draft/pending/approved, no conversion yet). It also implies the boundary against the sibling requisition_close by saying a converted requisition 'must be closed instead'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both the when ('no conversion yet') and the when-not ('already has any conversion ... must be closed instead'), effectively routing the agent to requisition_close. The eligibility condition is stated in terms of a concrete state flag (has_conversions), leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_closeB
Idempotent

Close a converted or partially-converted requisition (status closed): the demand is settled and no further conversion follows.

NameRequiredDescriptionDefault
workspaceIdYes
requisitionIdYes
idempotencyKeyYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real value by disclosing the status precondition and the terminal consequence ('no further conversion follows'), but says nothing about failure modes when the precondition is unmet or about required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the precondition and the outcome front-loaded and no filler. It is efficient, though it spends its limited length on state semantics rather than missing parameter or failure information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple state-transition tool with no output schema, the description covers the precondition and the resulting state, which is the core. It remains incomplete on the three undocumented parameters and on error behavior, which matters for an idempotent mutation whose precondition can fail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Three required parameters with 0% schema description coverage, so the description carries the full burden and adds nothing. workspaceId, requisitionId and idempotencyKey are never mentioned, leaving the agent to guess formats, scoping and idempotency-key semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (close) on a specific resource (requisition), plus the resulting status and the effect on conversion. That meaningfully separates it from requisition_cancel or requisition_return, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the trigger condition: the requisition must be converted or partially converted and the demand settled. It does not say when to prefer requisition_cancel instead, nor what happens if the requisition is still unconverted, leaving the routing decision partly inferential.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_convert_to_poA
Idempotent

Convert selected open quantities of an approved (or partially converted) requisition into a D02 purchase order. lines is a list of { lineId, qtyMilli } where each qtyMilli is a positive whole-unit multiple (1000 = one unit) and must not exceed the line open quantity (over_conversion). supplierContactId overrides the lines preferred supplier (required when the selection has none in common). createAs is draft | sent. The requisition becomes partially_converted while any open quantity remains, else converted, with an immutable conversion link back to the PO. CONSEQUENCE: Turns the chosen quantities of the approved request into a purchase order, as a draft or already marked sent. A wrong order is revised or cancelled; its link to the request stays.

NameRequiredDescriptionDefault
linesYes
createAsNo
workspaceIdYes
requisitionIdYes
idempotencyKeyYes
supplierContactIdNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the resulting state machine (partially_converted while open quantity remains, else converted), the immutable link back to the PO, the over_conversion failure condition, and the remedy path ('revised or cancelled; its link to the request stays'). This is consistent with destructiveHint=false and idempotentHint=true, and adds real operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then parameters, then consequences — a sensible order. The CONSEQUENCE paragraph partially restates the opening sentence ('Turns the chosen quantities ... into a purchase order'), so there is some redundancy, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description does not say what is returned (e.g., the new PO id), which is a gap for a conversion tool. Otherwise it covers preconditions, error conditions, resulting requisition state, and the link to the created PO, so an agent can call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description carries the burden and largely does: it defines the lines element shape ({lineId, qtyMilli}), the qtyMilli unit convention (1000 = one unit), the positive-whole-multiple constraint, the open-quantity ceiling, supplierContactId's override/fallback rule, and createAs values (draft | sent). workspaceId, requisitionId, and especially idempotencyKey are left unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Convert ... requisition into a D02 purchase order') plus the scope of what is converted (selected open quantities) and the prerequisite state (approved or partially converted). An agent can distinguish this from siblings like requisition_approve, requisition_upsert, or po_upsert without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions (requisition must be approved/partially converted) and a conditional rule for supplierContactId ('required when the selection has none in common'). It does not name alternatives or explicit when-not-to-use cases, but the invocation context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_getA
Read-only

Read one requisition: header, lines with open quantities, the full approval-event history, the open approval tasks, and the conversion links to any resulting purchase orders.

NameRequiredDescriptionDefault
workspaceIdYes
requisitionIdYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description does not need to restate safety. It adds value by specifying the returned components (header, lines, history, tasks, conversion links), which is useful behavioral context beyond the annotation. It does not mention side effects (correctly, as it's read-only) or error conditions, but given the annotation coverage, the added detail about content is sufficient to justify a moderate score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('Read one requisition') and then lists the returned data components with no redundancy. It earns its place with concrete, specific details and avoids filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read operation with readOnlyHint annotation and a simple two-parameter schema, the description is fairly complete. It tells the agent exactly what data will be returned (header, lines, history, tasks, conversion links), which is sufficient to decide whether to call it. Minor missing details like response format or pagination are not critical for a single-get operation, and the safety profile is already covered by annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining the parameters. It does not mention workspaceId or requisitionId at all, relying on their self-explanatory names. While the names are clear, the description provides no additional semantics, such as required format, scope, or relationship to other entities. This falls short of compensating for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation ('Read one requisition') and enumerates the specific data it returns: header, lines with open quantities, approval-event history, open approval tasks, and conversion links to purchase orders. This distinguishes it from list or modification tools and from sibling requisition tools. The verb+resource is 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: it is the read/get for a single requisition, contrasting implicitly with requisition_list or requisition_my_pending_approvals. However, it does not explicitly state when to use this versus alternatives, nor does it mention any exclusion conditions or prerequisites. The usage context is clear from the name and content, but no direct guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_listA
Read-only

List requisitions with filters: status (one value or an array), requesterId, projectId, costCenterId, a neededBy date range (neededByFrom / neededByTo) and a free-text search q over number and description. Accepts a savedViewId (G00 saved-view seam). Ordered by number, newest first.

NameRequiredDescriptionDefault
qNo
statusNo
projectIdNo
neededByToNo
requesterIdNo
savedViewIdNo
workspaceIdYes
costCenterIdNo
neededByFromNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe read operation, and the description does not contradict it. The description adds useful behavioral details like ordering and filter semantics, but it does not disclose pagination behavior, response shape, or any rate or data-volume limits, so it provides only modest value beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with the core purpose stated in the first phrase and the rest as dense, relevant filter details. The parenthetical '(G00 saved-view seam)' is cryptic and adds little for an AI agent, keeping this from a perfect conciseness score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool, the description covers the main invocation concerns: filters, ordering, saved-view support, and the free-text search scope. It does not mention pagination or the shape of returned requisitions, and with no output schema present this is a minor but real gap; still, the essential selection and invocation information is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the burden of explaining parameters. It notably explains that status accepts a single value or an array, q searches over number and description, and neededByFrom/neededByTo form a date range. The only required parameter, workspaceId, is not described, though its necessity is already explicit in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'List requisitions with filters.' It enumerates the filter dimensions and ends with ordering behavior, making the operation's scope unmistakable and distinguishing it from single-record or mutating requisition siblings like requisition_get or requisition_upsert.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly communicates when to use this tool: whenever a filtered, ordered list of requisitions is needed. It does not explicitly call out alternatives or exclusions, such as using requisition_get for a single record, but the list-oriented wording provides strong contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_my_pending_approvalsA
Read-only

The open approval tasks the workspace still owes a decision on, each joined to its requisition header (number, requester, needed-by, urgency, estimated total). The approval inbox read. Accepts a savedViewId (G00 saved-view seam).

NameRequiredDescriptionDefault
savedViewIdNo
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds meaningful context beyond that: it returns open approval tasks joined to requisition headers and describes the returned attributes. It does not contradict the read-only annotation, though pagination or scope limitations are not disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with the core purpose front-loaded. The phrase 'The approval inbox read' is slightly awkward, and 'G00 saved-view seam' is terse, but overall the description is compact and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what is returned and hints at saved-view filtering, and the read-only annotation covers the safety profile. However, the required workspaceId is unexplained, savedViewId semantics are vague, and there is no output schema. For a two-parameter read tool 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.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains savedViewId as a saved-view seam, but the required workspaceId is never described, and 'G00 saved-view seam' is cryptic. The description does not adequately compensate for the schema's lack of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (open approval tasks, 'approval inbox') and a read action, plus the exact joined fields returned (number, requester, needed-by, urgency, estimated total). The 'read' framing clearly distinguishes it from sibling actions like requisition_approve and requisition_reject.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the tool to consult for pending approvals that still need a decision, but it does not explicitly state when to prefer it over alternatives or name any sibling tools. Usage context is evident enough, yet no exclusions or routing guidance are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_rejectA
Idempotent

Reject a pending requisition with a reason. Status becomes rejected (terminal), all open approval tasks are closed, and an immutable approval event records the decision.

NameRequiredDescriptionDefault
reasonYes
taskIdNo
workspaceIdYes
requisitionIdYes
idempotencyKeyYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already covering idempotency and non-destructiveness, the description adds meaningful behavioral context: rejection is terminal, open approval tasks are closed, and an immutable approval event is written. It still does not mention required permissions or what happens when the requisition is not pending.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence that states the action, the main consequence, and the terminal nature of the result without any filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and a bare schema, the description does well on side effects but leaves important gaps: parameter meanings, preconditions/error behavior, and permission requirements are absent. It is adequate for understanding the high-level action but not fully sufficient for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning, but it only implies the purpose of 'reason'. It leaves workspaceId, requisitionId, idempotencyKey, and especially the optional taskId unexplained, including how idempotencyKey interacts with the idempotentHint annotation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Reject a pending requisition') plus the required input ('with a reason'), making the core action unambiguous. It does not explicitly differentiate rejection from nearby sibling actions such as requisition_cancel or requisition_return, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'pending' implies the requisition must be in an open approval state before this tool is used, but the description never states when to choose rejection over cancellation, return, or other sibling workflows. Usage is inferable but not explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_returnA
Idempotent

Return a pending requisition to the requester for revision, with a reason. Status returns to draft, open tasks are cancelled, and the requester can edit and re-submit; the prior approval events stay queryable.

NameRequiredDescriptionDefault
reasonYes
taskIdNo
workspaceIdYes
requisitionIdYes
idempotencyKeyYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint=false; the description adds real substance by disclosing the resulting state (back to draft), the side effect (open tasks cancelled), and that prior approval events remain queryable. It does not cover permission requirements or how the reason is surfaced to the requester.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with the action first and consequences after; every clause carries information an agent needs, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool this covers the state transitions well, and no output schema exists so return values need not be explained. The gap is parameter documentation at 0% schema coverage, which leaves an agent guessing about taskId scoping and idempotencyKey semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description must carry the burden and largely does not. Only the 'reason' parameter is hinted at ('with a reason'); workspaceId, requisitionId, the optional taskId, and especially idempotencyKey (whose presence relates to the idempotentHint) receive no explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Return a pending requisition to the requester for revision') and its immediate effect, so it is clearly distinguishable from a plain approve/reject. It never names the closest siblings (requisition_reject, requisition_cancel), so the differentiation is inferred rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'pending requisition' implies a precondition, and 'for revision' implies the intent differs from outright rejection. However, there is no explicit when-to-use/when-not-to-use guidance and no named alternative for the reject-vs-return decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_submitA
Idempotent

Submit a draft for approval. The policy evaluator decides the required approvers: a zero-estimate requisition auto-approves (status approved) and any positive estimate becomes pending_approval with an open approval task. Submit of an already-pending or terminal document is invalid_transition; a line-less draft is invalid_line.

NameRequiredDescriptionDefault
workspaceIdYes
requisitionIdYes
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (idempotentHint=true, destructiveHint=false) by disclosing the policy evaluator's branching behavior, the two possible resulting statuses, and the exact error codes returned on misuse. This is exactly the kind of outcome disclosure an agent needs before mutating state; only the return payload shape is left unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with zero filler: the action first, then the outcome branch, then the failure modes. Every clause carries actionable information and the most important fact (submit) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotation-level detail on outcomes, the description supplies the status transitions and error taxonomy needed to interpret results. The only meaningful gap is the idempotency contract and what the success response contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so all three parameters (workspaceId, requisitionId, idempotencyKey) rely entirely on their names, and the description adds no meaning for any of them. In particular, idempotencyKey semantics — what a repeat submit with the same key returns — are never explained, which matters for a submission tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Submit a draft for approval') and immediately defines the resulting state machine (approved vs pending_approval). It does not explicitly name sibling tools such as requisition_approve or requisition_convert_to_po, but the scope is unambiguous enough that an agent would not confuse it with an approval or conversion action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Effectively communicates when the tool is applicable (a draft) and when it is not, via the invalid_transition clause covering already-pending or terminal documents and the invalid_line clause covering line-less drafts. It stops short of pointing to an alternative tool for those failure cases, but the preconditions are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

requisition_upsertA
Idempotent

Create or edit a DRAFT requisition (the controlled internal-demand document that opens the procure-to-pay chain). requesterId defaults to the caller; neededBy (ISO date) and urgency (normal | high | critical) are the header; each line carries an optional itemId (else a required description), qtyMilli (> 0, integer milli-units where 1000 = one whole unit), an optional uom, estimatedUnitCostRappen (>= 0), and an optional preferredSupplierId. The header total is the exact integer sum of the line estimates. Editing is refused once the requisition has left draft (invalid_transition). Posts nothing and emits no outward artifact.

NameRequiredDescriptionDefault
idNo
linesNo
urgencyNo
currencyNo
neededByNo
projectIdNo
descriptionNo
requesterIdNo
workspaceIdYes
costCenterIdNo
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses important behavior: only draft requisitions are editable, edits after draft are refused with invalid_transition, nothing is posted, and no outward artifact is emitted. It also clarifies that the header total is the exact integer sum of line estimates, which is meaningful behavioral context for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and scope, then moves efficiently through header fields, line semantics, total behavior, and draft-only refusal. Every sentence adds operational information, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 11-parameter mutation with no output schema, the description covers the draft lifecycle, line item semantics, unit conventions, total calculation, and downstream non-effects well. The main gaps are the required idempotencyKey/workspaceId semantics and the return behavior after an upsert.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds substantial meaning: requesterId defaults to the caller, neededBy is ISO date, urgency accepts normal/high/critical, line items use itemId or required description, qtyMilli is integer milli-units where 1000 equals one whole unit, and estimatedUnitCostRappen is non-negative. However, it does not explain required workspaceId and idempotencyKey, nor top-level id, currency, projectId, costCenterId, or description, so it does not fully compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: create or edit a DRAFT requisition, and identifies it as the controlled internal-demand document opening procure-to-pay. This clearly distinguishes it from sibling lifecycle tools such as requisition_submit, requisition_approve, and requisition_convert_to_po.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly scopes use to draft requisitions and states that editing is refused once the requisition has left draft with invalid_transition. It does not explicitly name requisition_submit or other lifecycle siblings as the alternatives, but the draft boundary provides strong usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_possible_duplicateA
DestructiveIdempotent

Answer a bank line flagged as a possible duplicate (list_bank_inbox: needsDuplicateDecision, possibleDuplicates), or every one-to-one match of one delivery at once. ONE LINE: bankTxnId with decision duplicate ("Duplikat": the line IS a movement already in the books; it is ignored with the reason duplicate, exactly as ignore_bank_line does, written first, and reopen_bank_line brings it back, needing a decision again) | distinct ("Kein Duplikat": its own movement, a normal line again, proposed and bookable); otherBankTxnId (optional) names the candidate judged against and must be one of possibleDuplicates; note (optional) is kept with the answer. ONE DELIVERY: statementId (the bank_statement id an import answered) with scope one_to_one_matches and decision duplicate answers every open line of that delivery that waits for its answer and was matched one to one on its movement (reason same_movement), each line with its own ignore and answer row; the answer lists decided [{ bankTxnId, otherBankTxnId, linkId }] and count. Until answered a line is never sure and no booking path decides it (duplicate_decision_pending). Refuses not_flagged for a line nothing names, line_not_open for a decided line, not_found for an unknown line or delivery. Every answer is recorded append-only (who, when), the latest in force; a re-import never touches it. Idempotent per key. CONSEQUENCE: Answers a possible duplicate: Duplikat ignores the line with that reason, Kein Duplikat keeps it as its own line. You can reopen an ignored line and decide again.

NameRequiredDescriptionDefault
noteNo
scopeNo
decisionYes
bankTxnIdNo
statementIdNo
workspaceIdYes
idempotencyKeyYes
otherBankTxnIdNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond idempotentHint/destructiveHint, the description discloses what actually happens: 'Duplikat' suppresses the line with reason duplicate exactly like ignore_bank_line, is reversible via reopen_bank_line, answers are written append-only with who/when, the latest in force, and a re-import never overwrites them. That is exactly the mutation-and-recovery context the annotations alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, but the body is a chain of nested parentheticals that is hard to parse in one pass, and the closing CONSEQUENCE block largely restates the duplicate/distinct semantics already given earlier. Some pruning would improve it without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an eight-parameter mutation with no output schema, the description covers the decision semantics, the returned shape (decided [{ bankTxnId, otherBankTxnId, linkId }] and count), failure codes, idempotency and reversibility. An agent has what it needs to call this correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description has to carry all eight parameters, and it defines the critical ones well: the two decision values with their German labels, otherBankTxnId constrained to possibleDuplicates, note retention, statementId paired with scope one_to_one_matches, and idempotencyKey semantics ('Idempotent per key'). workspaceId and the allowed values of scope are not spelled out, keeping it off a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Answer a bank line flagged as a possible duplicate') and immediately splits it into two concrete modes (ONE LINE by bankTxnId, ONE DELIVERY by statementId). It self-locates against siblings by referencing list_bank_inbox, ignore_bank_line and reopen_bank_line, so an agent can distinguish it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states exactly when to use each mode: the line comes from list_bank_inbox where needsDuplicateDecision / possibleDuplicates flagged it, while the delivery mode answers all open one-to-one matched lines of an import. It also names when the call will be refused (not_flagged, line_not_open, not_found), which is explicit exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_backupA

Restore a .tillbackup into a brand-new workspace: composes create_workspace, bulk-loads every table preserving ids, and re-verifies balance + referential integrity before commit (all-or-nothing). Agent-staged: pass confirmed:true to proceed, else it returns a plan and writes nothing. Never overwrites an existing workspace. Portal links come back closed (D161.2): every customer and supplier link that was live in the backup lands as a draft until a person hands it over again with portal_grant_send, and portalLinksAwaitingHandover says how many.

NameRequiredDescriptionDefault
sourceYes
confirmedNo
idempotencyKeyNo
newWorkspaceNameYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the single destructiveHint:false annotation, it discloses that the operation is all-or-nothing, re-verifies balance and referential integrity before commit, preserves ids, is staged behind confirmed, and that portal links come back as drafts with portalLinksAwaitingHandover counting them. This is rich behavioral context an agent could not get from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the core restore behavior and staging gate come first, portal-link consequences last. Every sentence earns its place; the 'D161.2' citation is minor noise but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-impact restore with no output schema, it covers the all-or-nothing safety profile, staging gate, non-overwrite guarantee, integrity verification, and a key return signal (portalLinksAwaitingHandover). Nothing an agent needs to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It correctly explains confirmed (proceed vs plan), source (.tillbackup file), and newWorkspaceName (the new workspace), plus the portalLinksAwaitingHandover output field, but leaves idempotencyKey undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Restore a .tillbackup into a brand-new workspace') and elaborates the composition (create_workspace + bulk-load + re-verify). An agent can distinguish it from verify_backup, list_backups, and bootstrap_workspace without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states the usage protocol: pass confirmed:true to proceed, otherwise it returns a plan and writes nothing, and it never overwrites an existing workspace. It does not explicitly name prerequisites like verify_backup or list_restorable_backups as alternatives, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resume_recurring_scheduleA
DestructiveIdempotent

Resume a paused schedule. Periods that fell due while paused are generated by the next tick (each period separately idempotent, at most 24 per schedule per tick), which is the accepted cost D66 states. Already active settles to the same answer; ended refuses with schedule_ended. CONSEQUENCE: Starts the recurring invoice again; the next run also makes the invoices that fell due while it was paused, issuing them if auto-issue is on. You can pause it again at any time.

NameRequiredDescriptionDefault
scheduleIdYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint, but the description earns its place by disclosing the backfill: periods that fell due while paused get generated on the next tick, capped at 24 per schedule per tick, each idempotent. It also discloses the destructive consequence (invoices are issued if auto-issue is on), the error code for ended schedules, and reversibility ('You can pause it again at any time') — all beyond what annotations say.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the consequence is clearly flagged with 'CONSEQUENCE:'. The one wasted clause is the internal citation 'which is the accepted cost D66 states', which points at a spec the agent cannot read and slightly obscures the cap statement preceding it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only two annotations, the description carries most of the burden and does so: state transitions, side effects, tick cap, and error behavior are all covered. The remaining gap is the complete absence of parameter meaning for the two required identifiers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it says nothing about workspaceId or scheduleId beyond them being required. The parameters are fairly self-explanatory identifiers, but no constraints, formats, or lookup guidance are added anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource ('Resume a paused schedule'), which is unmistakable against siblings like pause_recurring_schedule and end_recurring_schedule. It does not name those siblings explicitly, so differentiation is implied by the state machine rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent the applicable precondition (paused), what happens if already active ('settles to the same answer'), and what happens if the schedule ended (refuses with schedule_ended). That is genuine when-to-use context even though alternatives are never named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retainer_burndownA
Read-only

Mandats-Verbrauch (B04): the drawdown/burn-down read model (P5), computed live, never a cached counter. Returns includedMinutes, carryoverInMinutes, consumedMinutes, coveredMinutes, remainingMinutes, coverageValueRappen, capRappen and overCapMinutes for a period. For a generated period it reads the frozen draw ledger; for the current in-flight period it simulates the coverage split over live approved time. An unknown retainerId returns retainer_not_found. Gated on A24 billing.read.

NameRequiredDescriptionDefault
periodKeyNo
retainerIdYes
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond the readOnlyHint annotation: it clarifies that the value is computed live, never cached, and explains the simulation logic for in-flight periods. It also discloses the gating requirement (A24 billing.read) and error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet dense: it front-loads the core purpose, lists return fields, explains period behavior, and closes with error and gating. No wasted words, and the structure logically flows from what to how to edge cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description enumerates all returned fields. It covers both period scenarios, error handling, and permission gate. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has no descriptions (0% coverage), so the description compensates. It explains periodKey's role in distinguishing generated vs in-flight periods and mentions retainerId's error case. workspaceId is not explicitly explained but is self-evident as a required context parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it is a 'drawdown/burn-down read model' and lists the exact metrics returned. It clearly identifies the resource (retainer) and the action (retrieve burndown data), distinguishing it from other retainer tools like retainer_close or retainer_generate_invoice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the behavioral difference between generated and in-flight periods, and the error case for unknown retainerId. While it doesn't explicitly name sibling alternatives, the read-only nature and metric set make it unambiguous when to use this tool versus retainer management operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retainer_closeA
Idempotent

Mandat beenden (B04): end a mandate (active to ended). OR 404 Abs. 1 makes a mandate terminable at any time, so close is always reachable: it refuses period_pending only while a closed period is still unbilled, and skipFinal:true overrides even that. Closing an already-ended retainer settles to the same answer (idempotent). Gated on A24 retainer.manage.

NameRequiredDescriptionDefault
skipFinalNo
retainerIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the idempotentHint/destructiveHint annotations: the permission gate (A24 retainer.manage), the exact precondition that causes refusal (unbilled closed period), the override path via skipFinal, and confirmation that closing an already-ended retainer is a no-op. This is precisely the pre-call behavior an agent needs before mutating.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by reachability, override, and idempotency. The German label and the legal citation ("OR 404 Abs. 1") are somewhat redundant but do justify why the tool is always callable, so they mostly earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and annotations covering only idempotency/destructiveness, the description supplies permission gating, refusal conditions, and idempotent behavior. Only the response shape and the fate of unbilled periods under the default path are left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden; it fully explains skipFinal (the only non-obvious parameter) but says nothing about the three required identifiers, notably idempotencyKey, whose purpose must be inferred from the idempotentHint annotation. Partial compensation for a low-coverage schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and state transition ("end a mandate (active to ended)"), which immediately separates it from retainer_update, retainer_create and retainer_generate_invoice. It does not explicitly name a sibling as an alternative, so it stops just short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-it-works conditions: it is always reachable, refuses only while a closed period is still unbilled, and skipFinal:true overrides that refusal. It lacks an explicit counterpoint such as "use retainer_update to modify instead", but the reachability rules are unusually clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retainer_createA
Idempotent

Mandat anlegen (B04): define a recurring retainer for a C00 contact (monthly|quarterly fee, included hours, optional cap, rollover). Validates feeRappen>0 (invalid_fee) and includedHours>=0 (invalid_hours) as structured refusals (P9). Returns warning:cap_below_included when the cap undercuts the included hours at the resolved rate (OP1), never an error. Mints an active retainer; posts nothing. Gated on A24 retainer.manage.

NameRequiredDescriptionDefault
periodYes
currencyNo
rolloverNo
startsOnYes
capRappenNo
contactIdYes
feeRappenYes
projectIdNo
workspaceIdYes
includedHoursNo
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (idempotentHint/destructiveHint): it discloses validation thresholds with structured refusal codes (invalid_fee, invalid_hours), a non-fatal warning (cap_below_included) instead of an error, that nothing is posted to the ledger, and that a permission gate applies. It does not cover behavior for e.g. an unknown contactId or what the minted retainer's lifecycle state implies, but the disclosure level is strong for a create tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose first, then validation, then warnings, then side effects and the permission gate. Some space is spent on undecodable internal shorthand (B04, C00, P9, OP1, A24) that an agent cannot resolve without outside knowledge, which slightly dilutes otherwise efficient prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter mutation tool with no output schema and no parameter descriptions, the description covers validation outcomes, the warning path, the no-posting side effect and the authorization requirement. The remaining gap is the shape of the success response (what the minted retainer returns, e.g. its id), which matters because there is no output schema to fall back on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load, and it does for the important fields: feeRappen > 0, includedHours >= 0, capRappen as an optional cap whose relation to included hours generates a warning, period as monthly|quarterly, rollover, and contactId as a C00 contact. It leaves workspaceId, idempotencyKey, projectId, currency and startsOn undefined, which prevents a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb ('Mandat anlegen' / define/create) and a specific resource (a recurring retainer for a contact), plus the shape of that resource (period, fee, included hours, cap, rollover). 'Mints an active retainer; posts nothing' implicitly separates it from siblings like retainer_generate_invoice and retainer_update, so an agent can tell what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The creation intent and the A24 retainer.manage gate are stated, so the when-to-use is implied, but there is no explicit routing guidance against close alternatives. Notably, siblings such as create_recurring_schedule, update_recurring_schedule and retainer_update exist and the description never says why an agent should pick retainer_create over them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retainer_generate_invoiceA
Idempotent

Rechnung erzeugen (B04): turn one ENDED retainer period into an A11 invoice DRAFT (one Pauschale line plus one Zusatzaufwand line per over-cap entry), record the drawdown ledger, flip consumed B01 time to billed, and mint the rollover carryover rows, all in one transaction. Delegates to A10 createDocument (P3: no journal entry, no VAT amount, no total minted here). Idempotent per period by the (retainer, period, fee) uniqueness guard: a period already invoiced returns the existing draft with existing:true. Refuses period_not_closed, retainer_not_active, invalid_period_key, currency_mismatch before any write. Always stops at a draft (P8); gated on A24 retainer.manage.

NameRequiredDescriptionDefault
actorNo
periodKeyYes
retainerIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint and destructiveHint; the description adds substantial context beyond that: all side effects happen in one transaction, the delegation to A10 createDocument with no journal entry/VAT/total, the exact idempotency guard and existing:true return, the permission gate (A24 retainer.manage), and that it always stops at a draft. No contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then side effects, then idempotency, then refusals — a logical order with little filler. The density of internal codes (B04, A11, B01, P3, P8, A24) makes it heavy but each clause carries operational meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-effect mutation with no output schema, the description covers transactional scope, side effects, permission gating, failure modes, and return semantics on the idempotent path. The remaining gap is parameter-level detail, which matters given 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across five parameters, so the description must carry the load. It clarifies what periodKey and retainerId represent (via the ENDED-period concept and the retainer/period/fee uniqueness guard) and explains idempotency behavior, but it never defines periodKey format, workspaceId, actor, or the role of idempotencyKey itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (generate) and resource (retainer invoice draft) and enumerates exactly what the operation produces: one Pauschale line, one Zusatzaufwand line per over-cap entry, drawdown ledger, billed time, carryover rows. This is clearly distinguishable from billing_generate_invoice and retainer_close.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The precondition (one ENDED retainer period) and the refusal conditions (period_not_closed, retainer_not_active, currency_mismatch) tell the agent when the tool will and will not succeed. However, no sibling alternative is named, so the agent is not explicitly told which tool to use for a period that is still open or for time-based (non-retainer) billing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retainer_listA
Read-only

Mandate anzeigen (B04): the Mandate list (P5), tenant-scoped, filterable by contactId and status, with the G00 saved-view seam (OP10, savedViewId). Gated on A24 billing.read.

NameRequiredDescriptionDefault
statusNo
contactIdNo
savedViewIdNo
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true. The description adds the billing.read permission gate and tenant scoping, which are useful behavioral details beyond the structured annotations. It does not discuss pagination or return shape, but the annotation lowers the bar for that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core purpose. Internal codes like B04, P5, G00, OP10, and A24 add noise and are unexplained, which slightly reduces clarity, but every sentence still contributes meaningful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no output schema and no param descriptions, the description provides enough to invoke the tool correctly. However, it does not cover return shape, pagination, or how savedViewId interacts with contactId/status filters, leaving some ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of parameter meaning. It explains contactId and status as filters, and savedViewId as the saved-view seam. The required workspaceId is implied by 'tenant-scoped', though not explicitly named.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('list' / 'Mandate anzeigen') and resource ('Mandate list'), and adds tenant scope and filter parameters (contactId, status, savedViewId). This clearly distinguishes it from sibling operations like retainer_create, retainer_update, and retainer_close.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It conveys that the tool is tenant-scoped and filterable by contactId/status, which implies when it should be used. However, it does not explicitly mention alternatives or exclusions, such as when to prefer a sibling tool like retainer_burndown or retainer_generate_invoice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retainer_run_dueA
Idempotent

Alle fälligen abrechnen (B04): bill every active retainer whose period ended before asOf, iterating the retainer table directly (never an A12 recurring_schedule). SELF-KEYED (no idempotencyKey): idempotent per period via the (retainer, period, fee) uniqueness guard, so re-running the tick at any cadence bills each period exactly once; each period is its own transaction. Agent/scheduler/bulk-action oriented. Gated on A24 retainer.manage; denylisted from automation (a bulk generation tick a human or cron owns).

NameRequiredDescriptionDefault
asOfNo
actorNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, it discloses key behavior: idempotency per (retainer, period, fee), each period as its own transaction, no idempotencyKey, permission gate A24 retainer.manage, and the automation denylist. This is rich operational context that directly affects safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and each clause adds behavioral or safety information. It is somewhat dense with internal references (B04, A12, A24), but there is little pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity bulk billing tool with no output schema, the description covers idempotency, transaction scoping, permissions, and automation restrictions well. It is less complete on parameter semantics and does not describe the response shape, but the behavioral picture is mostly sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It explains asOf only indirectly ('period ended before asOf') and gives no meaning for workspaceId or actor, leaving two of three parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific bulk verb and resource: bill every active retainer whose period ended before asOf. It also distinguishes the tool from generating a single retainer invoice by emphasizing the retainer-table iteration and explicitly excluding A12 recurring_schedule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly frames the tool as agent/scheduler/bulk-action oriented and states that it is denylisted from general automation, with a human or cron owning the tick. It does not explicitly compare against sibling tools such as retainer_generate_invoice, but the bulk-run context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retainer_updateA
DestructiveIdempotent

Mandat bearbeiten (B04): patch a retainer. Coverage terms (feeRappen, includedHours, capRappen, rollover) apply to FUTURE periods only, which is structural: a generated period stored its own draws and generation reads the row live, so an edit never rewrites history. The identity fields (period, contactId, projectId) freeze once any draw exists (retainer_has_draws). Gated on A24 retainer.manage.

NameRequiredDescriptionDefault
patchNo
retainerIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds crucial behavioral context beyond the annotations. It explains the structural persistence of edits ('never rewrites history') and the state-dependent behavior of identity fields, which is essential for handling this complex mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and highly technical, using specialized jargon and German (Mandat bearbeiten). While every sentence appears necessary given the structural warning, it is not concisely written for easy consumption by an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a state-dependent patch operation, the description is remarkably complete. It covers data lifecycle, structural implications, and constraints that would be lost without this deep operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, meaning the description must carry the load. It explains the semantics of certain fields (coverage terms like feeRappen, includedHours), but fails to describe the required or structural parameters (workspaceId, retainerId) which are the focus of the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The purpose is clearly stated as patching (editing) a retainer ('patch a retainer'). While it does not explicitly name a sibling tool it is replacing, the technical function is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

This description excels by providing structural constraints that define usage. It explicitly states that coverage terms only apply to FUTURE periods and identifies specific identity fields that freeze when a draw exists, providing clear boundaries for execution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retry_automation_runA
Destructive

Finish a run that is stuck in running, which is what a process death between the claim and the settle leaves behind. Re-sends the SAME stored input, including the derived idempotency key, so a lost invocation that had in fact committed cannot happen twice. Runs as the actor the firing ran as, so a since-demoted author is refused now exactly as it would be on a fresh firing. Requires manage_automations. A settled run refuses with run_not_stuck. CONSEQUENCE: Finishes an automation run that was cut off, sending its stored step again in the name it ran under. What it does stays done; the same step never runs twice.

NameRequiredDescriptionDefault
runIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond destructiveHint=true: it discloses that the SAME stored input and derived idempotency key are re-sent, that it runs under the original actor so a demoted author is refused, that manage_automations is required, and the exact error code on refusal. The final consequence sentence makes the at-most-once semantics unambiguous.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and the failure mode, then permissions, then outcome. The trailing CONSEQUENCE sentence largely restates the earlier 'cannot happen twice' claim, so there is a small amount of duplication, but no filler overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation with no output schema, the description covers preconditions, permissions, idempotency, side effects, and the failure error code. It leaves open what the optional idempotencyKey override does if supplied, and what the agent receives on success.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It does add real value for the optional idempotencyKey by calling it 'derived' and 'stored', implying the caller normally need not supply it, but runId and workspaceId are never characterized (accepted values, format, scope).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource — finish a run stuck in `running` — and explains the exact condition that produces that state (process death between claim and settle). This is clearly distinguishable from list_automation_runs, get_automation_run, and run_due_automations without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger conditions (stuck in `running`, lost invocation) and an explicit exclusion (a settled run refuses with run_not_stuck), plus the required permission. It does not name a sibling alternative for the settled-run case, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reverse_entryA
Idempotent

Reverse a posted entry by posting its faithful mirror (OR 957a). Refuses owned_by on an entry a capability minted with a row of its own (an MWST-Saldierung, an Abgrenzung, a Rückstellung, a payment, a bank-line booking, a vendor bill, an issued invoice or credit note, a depreciation run, an inventory valuation run, and their mirrors): reverse those through the owning verb the refusal names (vat_settlement_reverse, accrual_reverse, provision_reverse, provision_release_reverse, reverse_payment, reopen_bank_line, void_vendor_bill, transition_document to cancelled, asset_depreciation_run_reverse, inventory_valuation_reverse) so the row moves with the entry. An entry a bank line holds (booked or matched on it) always refuses owned_by reopen_bank_line with that line's bankTxnId. CONSEQUENCE: Books a correcting entry that mirrors a posted one; the original stays visible beside it. If the correction was wrong, you correct it the same way.

NameRequiredDescriptionDefault
dateNo
entryIdYes
descriptionNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: it explains the consequence (a new correcting entry appears beside the still-visible original), the refusal behavior for owned entries, the bank-line refusal carrying bankTxnId, and how to undo a bad correction. This is rich behavioral disclosure for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence, followed by refusal routing and then consequence. It is dense and the long parenthetical tool lists are heavy, but every block carries routing or behavioral information that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the safety profile, the resulting state, refusal conditions, and the exact escape hatches. The only gap is per-parameter meaning, and everything an agent needs to choose and safely invoke the tool is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are five parameters (date, entryId, description, workspaceId, idempotencyKey), yet the description adds no meaning about any of them – not what date governs, not the purpose of the free-text description, not idempotencyKey semantics. An agent must infer all parameter usage from the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('reverse') and resource ('a posted entry') and discloses the mechanism ('posting its faithful mirror (OR 957a)'). It explicitly distinguishes itself from owning verbs like reverse_payment, void_vendor_bill and vat_settlement_reverse, so an agent can route between them without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not-to-use guidance by enumerating the capabilities that own their own reversal rows and names the exact alternative verb for each case. The bank-line case is addressed separately and says which tool to use instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reverse_paymentB
Idempotent

Reverse a payment (storniert eine Zahlung): posts a reversing entry and re-opens every document it settled. It never deletes, the original entry stays untouched, and a payment is always reversed as a whole. Requires intent='reverse_payment'. CONSEQUENCE: Reverses the payment with a correcting entry and reopens everything it settled. The original stays visible; if the payment was right after all, you record it again.

NameRequiredDescriptionDefault
dateNo
intentYes
paymentIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond annotations: it never deletes, the original entry stays untouched and visible, and every settled document is re-opened. That is consistent with destructiveHint=false and idempotentHint=true and tells the agent what side effects to expect. Missing: permission/authorization needs and what the call returns or whether reopening documents can fail partway.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical facts are front-loaded, but the 'CONSEQUENCE:' clause re-states the first sentence almost verbatim, and the closing 'if the payment was right after all, you record it again' repeats the 'never deletes / original stays' point. The bilingual gloss in parentheses adds little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Rich on semantics of the reversal itself, which is the hard part for a mutation tool with no output schema. However, with zero schema documentation for four required parameters, an agent still cannot construct a correct call from the description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for 5 parameters, so the description must compensate and largely does not. It gives only one concrete value, intent='reverse_payment'; workspaceId, paymentId, idempotencyKey and date are left entirely unexplained — the idempotencyKey in particular matters for a retryable mutation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Reverse a payment') and immediately describes the mechanism: posts a reversing entry and re-opens settled documents. This distinguishes it materially from a plain entry reversal like reverse_entry, though no sibling is named directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage: 'a payment is always reversed as a whole' and 'if the payment was right after all, you record it again' hint at when this applies and what the recovery path is. But there is no explicit statement of when to use this vs. reverse_entry, void_vendor_bill, or record_payment for correction; intent='reverse_payment' is a calling requirement, not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

review_bank_txnA
Idempotent

Signal that ONE open bank line (credit or debit) needs a human's review because its A39 proposal is below the workspace threshold (A36). Writes no ledger row and books nothing: it is a pure signal whose success emits bank_txn.needs_review for a G01 rule to react to (e.g. create an E03 task). Idempotent per (bankTxnId, idempotencyKey). import_camt already fires the same event once per new line; call this to re-signal a line later.

NameRequiredDescriptionDefault
bankTxnIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint=false, but the description adds real substance: it writes no ledger row, books nothing, and emits the bank_txn.needs_review event that a G01 rule consumes. It also scopes idempotency to the (bankTxnId, idempotencyKey) pair, which the annotation alone does not.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the core action and followed by the no-side-effect guarantee and the sibling relationship. Dense but purposeful; the internal code references (A39, A36, G01, E03) add precision only for an agent that already knows the taxonomy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description covers the meaningful behavior: no ledger writes, an emitted event, and idempotency semantics. It omits what the call returns on success and any permission requirements, which would matter for an agent chaining the result into a follow-up step.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three required parameters, so the description carries the full burden and only partly does so. 'Idempotent per (bankTxnId, idempotencyKey)' clarifies the key's scope and that bankTxnId identifies one open line, but workspaceId is never explained and no format or sourcing guidance is given for any parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Signal that ONE open bank line (credit or debit) needs a human's review' — and pins the exact condition (proposal below workspace threshold). An agent can distinguish it from book_bank_line, ignore_bank_line, and import_camt from the text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: import_camt already emits the event once per new line, so this tool exists to re-signal a line later. That names the alternative and the condition that selects this tool. It does not address line-state exclusions (e.g. already booked or ignored lines), which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

review_statusA
Read-only

Review coverage for a period ('YYYY-MM' or 'YYYY'): approved/flagged/open counts plus every posted entry with its current review state, last reviewer and comment/flag counts. This is the bar behind the review surface, and what says whether a period is ready for lock_period (A03) and export. savedViewId applies a saved review view (G00): its stored period is used when none is named here; an explicit period always wins.

NameRequiredDescriptionDefault
periodNo
savedViewIdNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true, and the description is consistent with that. It adds useful behavioral detail beyond the annotation: period format support, savedViewId precedence, and the fact that an explicit period wins over a saved view's period. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core return values, and every sentence earns its place: output semantics, integration context, and parameter behavior. No filler or redundant restatement of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description appropriately discloses return contents and connects the tool to related workflows (lock_period/export). It does not mention pagination or filtering, but for this read-only review-coverage tool the provided information is sufficient for an agent to select and invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It compensates well for period and savedViewId by explaining the accepted formats ('YYYY-MM' or 'YYYY') and the precedence rule. workspaceId is left implicit, but it is a common scoping parameter and is marked required in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific verb-resource pair: 'Review coverage for a period,' and enumerates exactly what is returned (approved/flagged/open counts, posted entries, review state, last reviewer, comment/flag counts). It gives enough identity to distinguish it from most siblings, though it does not explicitly name an alternative tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear usage context: this tool is 'the bar behind the review surface' and determines whether a period is ready for lock_period (A03) and export. It stops short of listing when-not-to-use conditions or naming alternative review-related tools, but the intended trigger is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_memberA
Idempotent

Remove a member's access to this workspace. The person's identity survives, so re-inviting them restores their history. Revoking the only remaining owner is refused (last_owner). CONSEQUENCE: Removes this member's access from their next step on. What they did stays on record; you can invite them again.

NameRequiredDescriptionDefault
memberIdYes
workspaceIdYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotent and non-destructive; the description explains why non-destructive applies (identity survives, re-invite restores history, records retained) and discloses the last_owner error code and that access ends from the next step on. This is substantive beyond-annotation context, though it omits any permission/authorization requirement for performing the revoke.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentence is front-loaded and useful, but the reversibility point is made twice ('identity survives, so re-inviting them restores their history' and 'What they did stays on record; you can invite them again'), and the 'CONSEQUENCE:' prefix adds emphasis without new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema, the description covers outcome, reversibility and the failure mode well. The remaining gap is purely operational—how to obtain a valid memberId/workspaceId—which is not addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and neither memberId nor workspaceId is described anywhere beyond the phrase 'this workspace'. The description gives no guidance on where memberId comes from (list_members) or whether workspaceId defaults to the current workspace, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a member's access to this workspace'), which is instantly distinguishable from the sibling list_members or invite_member. It stops short of naming what to use instead when you want to downgrade rather than remove (e.g., set_role).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete refusal condition ('Revoking the only remaining owner is refused (last_owner)'), which is a real when-not-to-expect-success rule. It does not point at alternatives such as set_role for a partial downgrade, so routing is inferred rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_statement_gap_confirmationA
DestructiveIdempotent

Withdraw the confirmation that a statement gap holds nothing (A36 §4.7, D150), so the gap is an attention item again. Human only (confirmed=true, a reason; an agent seat is refused human_only). Appends a withdrawal row beside the confirmation, which stays; a gap that is not confirmed answers notConfirmed without a row, and a gap filled since answers gap_not_found. Changes no statement, posts nothing. Idempotent per key. CONSEQUENCE: Withdraws the confirmation that a statement gap holds nothing, so the gap waits for a person again. The confirmation stays on record beside the withdrawal.

NameRequiredDescriptionDefault
reasonYes
confirmedNo
workspaceIdYes
bankAccountIdYes
idempotencyKeyYes
afterStatementIdYes
beforeStatementIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already declaring idempotentHint and destructiveHint, the description adds substantial behavioral detail: it appends a withdrawal row, keeps the original confirmation on record, changes no statement, and posts nothing. It also specifies error-style outcomes for unconfirmed gaps and filled gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence is clear and front-loaded, and the edge cases are useful. However, the description is bloated by repetition: the consequence is stated twice, and the fact that the confirmation stays on record appears more than once.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema, the description covers the human-only gate, side effects, idempotency, and edge-case responses. Its main gap is insufficient explanation of the required identifier parameters, but the operational behavior is otherwise well described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains confirmed, reason, and idempotencyKey, but leaves workspaceId, bankAccountId, afterStatementId, and beforeStatementId unexplained even though all are required to identify the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Withdraw the confirmation that a statement gap holds nothing.' It clearly distinguishes this from the sibling confirm_statement_gap by explaining that the gap becomes an attention item again.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage condition: use this to make a previously confirmed empty statement gap require attention again. It also states the human-only requirement with confirmed=true, a reason, and that an agent seat is refused human_only, but it does not explicitly name confirm_statement_gap as the inverse action to use instead when confirming.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_due_automationsA
DestructiveIdempotent

The tick for schedule triggers: fire every enabled rule whose cadence has come due at asOf, at most ONCE each however far behind it had fallen. Requires manage_automations, because the tick is what makes a schedule rule write unattended. asOf may name a past instant but never a future one: the injected clock decides what is due, not the caller. Safe to call as often as you like: a repeated tick for the same asOf computes the same occurrence key and does nothing. CONSEQUENCE: Runs every enabled automation whose schedule is due, each in its author's name and unattended. What they do can't be undone by TILL; you stop a rule by disabling it.

NameRequiredDescriptionDefault
asOfNo
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint/destructiveHint annotations, it discloses the permission requirement, the temporal constraint that asOf cannot be in the future ('the injected clock decides what is due, not the caller'), the idempotency mechanism (same asOf computes the same occurrence key), and an explicit CONSEQUENCE block naming that runs execute in the author's name, unattended, and are irreversible except by disabling the rule.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core behavior, then permission, timing, idempotency, and a labelled CONSEQUENCE section. Dense but every sentence adds distinct information; the only minor cost is some verbosity in the opening clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, unattended execution tool with two params and no output schema, the description covers permission, timing constraints, idempotency, consequences, and the disable-to-stop escape hatch. The missing workspaceId meaning is the only notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the burden and does well for asOf — its allowed range and the fact that the injected clock governs due-ness. The required workspaceId is never mentioned, leaving one of two parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'fire every enabled rule whose cadence has come due at asOf' for schedule triggers. This clearly distinguishes it from siblings like run_due_recurring (different cadence domain) and list_automation_runs (read-only inspection), so an agent can pick it without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says when to use it ('the tick for schedule triggers'), the permission gate (manage_automations), and that it's safe to call repeatedly. It doesn't explicitly name an alternative like enable/disable_automation_rule or a manual trigger path, so no exclusions are spelled out, but the operating context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_due_recurringA
Idempotent

The tick for Serienrechnungen: settle every due period of every active schedule at asOf (default now; a future asOf is refused; a past one only bounds how far the catch-up reaches, it never dates anything). Each occurrence INVOKES the registered create_document, and issue_invoice when the schedule has autoIssue, through the shared dispatch as the schedule AUTHOR, with a key derived from (scheduleId, periodKey), so a re-tick never double-bills (§H-IDEMPOTENT on rows). Every generated line carries its period as the Leistungsdatum, so a catch-up bills each period at its own VAT era; the due date is the clock day plus dueDays. A locked target period keeps the draft, records skipped_locked and is retried after unlock (§H-PERIOD); a waiting draft a human has since ISSUED settles the period as issued, and one a human has since CANCELLED settles it as discarded, so both operator responses converge and neither can strand a schedule or its siblings. Catch-up generates each missed period, at most 24 per schedule per tick. CONSEQUENCE: Makes every recurring invoice that is due, and issues and books those whose schedule issues automatically. A wrong invoice is corrected with a credit note or a cancellation; the original stays on record.

NameRequiredDescriptionDefault
asOfNo
workspaceIdYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotentHint/destructiveHint annotations: discloses author attribution, the derived idempotency key, locked-period handling (skipped_locked and retry), how human-issued or human-cancelled drafts converge, and how mistakes are corrected with credit notes. This is exactly the behavioral context an agent needs for a consequential mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

All content is relevant, but the description is a single dense run-on block mixing German terms (Serienrechnungen, Leistungsdatum) and internal section references (§H-IDEMPOTENT, §H-PERIOD) that slow comprehension. The closing CONSEQUENCE summary helps, but the text could be structured more clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex invoice-generation tick, it covers idempotency, locking, catch-up limits, and correction paths. It does not address permissions/auth requirements or response shape, and no output schema exists, but the critical behavioral picture is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate; it thoroughly explains asOf (default, future refused, past bounds catch-up but never backdates). It says nothing about workspaceId, though that is a standard scoping parameter, so a small gap remains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (settle every due period of active schedules) and outcome (generates and, when autoIssue is set, issues and books recurring invoices). Clearly distinguishes itself from CRUD-style siblings like create_recurring_schedule and read-only ones like list_recurring_schedules by being the execution/tick operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the asOf semantics (default now, future refused, past bounds catch-up) and the 24-per-schedule-per-tick catch-up limit, which implicitly tells the agent when and how to call it. However, it never explicitly names alternatives (e.g., run_due_automations, retainer_run_due) or states when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

runtime_catalogB
Read-only

Die angebotenen Modelle (P5): the static manifest the installed companion package shipped, a pure read of a local file and never a fetch (new models arrive via npm update). Per row the plain-language German-quality sentence, RAM floor, download size and licence; rows over the RAM of this machine come back fits:false with the have/need figures, and exactly one fitting row is recommended and preselected.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses that the tool reads a local manifest rather than fetching, that rows over the machine's RAM return fits:false with have/need figures, and that exactly one fitting row is recommended and preselected. This adds meaningful behavioral detail beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense, run-on, mixed German/English sentence with parenthetical asides and semicolons. It contains useful information but is poorly structured and not front-loaded for quick agent comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers output-row semantics reasonably well but leaves the sole required parameter entirely unexplained. With no output schema and no parameter documentation, the agent cannot confidently construct a correct call without additional inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one required parameter, workspaceId, with 0% schema description coverage, and the description never explains what workspaceId means, its format, or how it affects the result. Since schema coverage is low, the description had the burden to compensate but does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool exposes the offered models (P5) from a static manifest, with per-row details like RAM floor, download size, licence, and fit status. This conveys a catalog/listing purpose and distinguishes it from network-fetching behavior, though it never explicitly names a sibling like runtime_select to sharpen the contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear contextual signals: the result is a pure read of a local file, never a fetch, and new models arrive via npm update. However, it does not explicitly say when to prefer this over runtime_status/runtime_select, nor does it state any prerequisites beyond the required workspaceId.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

runtime_selectA
Destructive

Wähle das Modell der lokalen Entwurfs-Engine: persists the choice of the workspace from the shipped catalog (source=catalog, validated against the manifest AND the RAM floor of the machine IN THE VERB, so an agent cannot select a model the machine cannot run: unknown_model_ref retains the old selection, insufficient_ram names the have/need GB) or a local .gguf path behind Erweitert (source=byo, unsupported, no quality claim). Reversible and visible in runtime_status.

NameRequiredDescriptionDefault
sourceYes
ggufPathNo
modelRefNo
workspaceIdYes
idempotencyKeyNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true; the description adds genuine value by disclosing that validation happens IN THE VERB (unrunnable models are rejected server-side), the exact error semantics (unknown_model_ref keeps the previous selection, insufficient_ram reports have/need GB), and that the state is observable via runtime_status. However, 'Reversible' sits in tension with destructiveHint=true without explaining what reversibility means or what the previous selection's fate is. Strong behavioral content, but the safety story is muddled rather than reassuring.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One long run-on sentence with nested parentheses, a German lead-in fragment, and interleaved English; the RAM-floor rationale is embedded mid-clause rather than front-loaded. Nothing is strictly wasted — every clause carries information — but the structure makes it harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation with no output schema and only a destructiveHint annotation, the description covers the selection modes, the validation guarantees, the error outcomes, and where the result becomes visible. The remaining gap is idempotencyKey (the schema exposes it but nothing says whether retries are safe) and whether selection is per-caller or per-workspace.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and source is an untyped string, so the description carries the load: it effectively supplies the missing enum (catalog | byo), explains ggufPath as 'a local .gguf path', and ties modelRef to catalog refs via the unknown_model_ref error. workspaceId is only implied ('of the workspace') and idempotencyKey is never mentioned, which keeps it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: selects/persists the model of the local draft engine for a workspace, with two sourcing modes (catalog vs. local .gguf). It also anchors itself against siblings by naming runtime_status (where the choice becomes visible) and the shipped catalog behind runtime_catalog. The sentence is dense and code-switched (German 'Wähle ... Entwurfs-Engine', 'Erweitert'), but the 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly distinguishes the two selection paths: source=catalog for the shipped catalog (validated against manifest and RAM floor) versus source=byo for a local .gguf path 'behind Erweitert', with the caveat that BYO is unsupported and carries no quality claim. That is real routing guidance between modes. It does not state when a caller should prefer BYO over catalog beyond the unsupported warning, nor any prerequisites for the workspace.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

runtime_statusA
Read-only

Der Status der lokalen Entwurfs-Engine (P5): whether an OP6 adapter is registered, which runtime, model and device, why a load failed if it did, and the persisted model selection of the workspace. With nothing installed the answer is registered:false, and no cloud path exists to fall back to.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnlyHint annotation by disclosing the exact output aspects, including failure reasons and the behavior when nothing is installed (registered:false with no cloud fallback). This is valuable behavioral context, though it could further describe error cases or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the main purpose front-loaded and specific technical details following. Every clause adds information about the returned status or edge-case behavior, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main return dimensions and a key edge case, which is substantial for a single-parameter read-only status tool with no output schema. It does not mention all possible failure modes or the meaning of the acronyms, leaving some room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description must compensate for the single workspaceId parameter. It does tie the parameter to the workspace by mentioning the 'persisted model selection of the workspace', so the agent understands the parameter's role, but it does not specify the format, source, or any constraints around workspaceId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as the local design engine (P5) and enumerates exactly what status information is returned: adapter registration, runtime, model, device, load failure reasons, and persisted model selection. The meaning of acronyms like P5 and OP6 is not explained, and no sibling differentiation is stated, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It is clearly a status/diagnostic tool, and the note about 'nothing installed' giving 'registered:false' and having no cloud fallback provides useful context about when to consult it. However, it does not explicitly mention alternatives such as runtime_catalog or runtime_select, nor gives 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.

sales_order_backordersA
Read-only

Liste die Lieferrückstände (P5): every order line with backorder_qty > 0, joined against current D01 on-hand so you see which backorders are coverable now. An agent can poll this after a D02 receipt to trigger a second delivery. An empty list is not an error.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only safety profile (readOnlyHint=true), so the bar is lower. The description adds genuine behavioral value beyond the annotation: the join semantics showing which backorders are coverable now, the polling pattern, and the explicit guard that an empty list is not an error – which prevents an agent from misreporting a normal result as failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the definition, the usage trigger, and the empty-result guard. No filler. The German opening followed by English text is a minor structural inconsistency that keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with a single scoping parameter, no output schema, and a readOnlyHint annotation, the description covers query semantics, the triggering event, and the empty-result behavior. It omits the return shape and pagination, but with no output schema and a self-evident list return those are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions workspaceId, so it fails to compensate for the structured-data gap. The parameter is trivial – a standard workspace scoping string self-evident from its name and the sibling set – but the description itself contributes nothing about it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource statement – 'Liste die Lieferrückstände (P5)' – and sharpens it with the exact filter (backorder_qty > 0) and the D01 on-hand join, so an agent knows precisely what the tool returns. This clearly distinguishes it from siblings like po_open_lines, stock_on_hand, and sales_order_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: poll this after a D02 receipt to trigger a second delivery. That is clear when-to-use context. It stops short of a 5 because it names no alternatives or when-not-to-use exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sales_order_cancelA

Storniere einen Auftrag (draft|confirmed -> cancelled): keeps open-order lists honest. An order with any ISSUED delivery note is refused with has_deliveries, because shipped goods come back only through an explicit D01 return movement, never by erasing the order (H-AUDIT).

NameRequiredDescriptionDefault
workspaceIdYes
salesOrderIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, so the description adds real value by disclosing the guardrail behavior (refusal with has_deliveries) and the audit rationale (H-AUDIT). However it does not disclose permissions, reversibility of the cancellation, or idempotency behavior, leaving several behavioral gaps for a state-mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with verb, resource, and legal state transition, followed by the constraint. Some domain jargon (D01, H-AUDIT) assumes context but does not bloat the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 0% schema coverage and no output schema, the description covers behavior and the refusal condition well but leaves the parameters (notably idempotencyKey) and the success/return shape undocumented, so an agent cannot fully reason about how to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 3 parameters, so the description must compensate but does not. It implies salesOrderId identifies the order to cancel, but workspaceId and especially idempotencyKey are never explained, leaving the agent to infer their semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (Storniere einen Auftrag) and the exact state transition (draft|confirmed -> cancelled), which clearly separates it from siblings like sales_order_confirm or sales_order_invoice. The mixed German/English is slightly awkward but the intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when the operation will be refused (any ISSUED delivery note → has_deliveries error) and routes the agent to the correct alternative (an explicit D01 return movement rather than erasing the order). This is exactly the when-not + alternative guidance needed to select correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sales_order_confirmA
Destructive

Bestätige einen Auftrag (draft -> confirmed): snapshots stock allocation. Every non-stock (service, free-text) line is auto-delivered on confirmation with NO stock movement, which is what makes it invoiceable without a delivery note; a stock line gets backorder_qty = max(0, ordered - D01 on-hand). A pure-service order advances straight to delivered, a mixed order to partially_delivered, an all-stock order stays confirmed. An empty order is refused (no_lines); a non-draft order is refused (invalid_transition).

NameRequiredDescriptionDefault
workspaceIdYes
salesOrderIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the single destructiveHint annotation by explaining stock allocation snapshots, auto-delivery of non-stock lines with no stock movement, backorder calculation, resulting order statuses for pure-service/mixed/all-stock orders, and specific refusal codes. This gives an agent substantial behavioral context for a mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action and effects are front-loaded and every sentence adds substantive information about outcomes or errors. It is dense but appropriately sized for the complexity, with only a minor language inconsistency (German opening followed by English).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is rich on business logic, side effects, and error cases, which is important given the thin annotations and no output schema. It still leaves meaningful gaps around parameters, idempotencyKey behavior, permission/auth requirements, and what the caller receives after confirmation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It never explains workspaceId, salesOrderId, or especially idempotencyKey, which is important for a destructive/mutating confirmation call. Implicit meaning can be inferred for salesOrderId, but idempotency semantics are entirely missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the specific action: confirming a sales order and transitioning it from draft to confirmed, including its stock-allocation effect. The purpose is unambiguous, though the description never explicitly contrasts this tool with siblings such as sales_order_cancel, sales_order_invoice, or delivery_note_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the draft-to-confirmed state requirement and the refusal conditions (no_lines, invalid_transition), which help an agent know when the call will fail. However, there is no explicit guidance on when to choose this tool over alternatives like sales_order_cancel, sales_order_invoice, or delivery-note workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sales_order_createA

Lege einen Auftrag an: a sales order on a C00 contact with D00 item lines. Each item line is priced once through D00 (contact list, segment list, item base) and its tax code resolved once through the item A05 default, then both are snapshotted as literals on the so_line (the freeze, H-VAT-TRACE). POSTS NOTHING and touches no stock: a sales order is a confirmed demand, not a document. A EUR order snapshots the CHF/txn fx_rate for the H-FX trace. An order with zero lines is a legal draft (confirm refuses an empty order); a foreign contact/item id is refused (invalid_reference / unknown_item).

NameRequiredDescriptionDefault
actorNo
linesNo
notesNo
quoteIdNo
currencyNo
contactIdNo
expectedOnNo
workspaceIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavioral context beyond the sparse destructiveHint=false annotation: it posts nothing, touches no stock, snapshots pricing/tax/fx as literals, permits zero-line drafts, and documents refusal errors for foreign contact/item ids. This gives the agent a clear safety and side-effect profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the create action and then covers pricing/tax snapshots, side effects, and edge cases. It is dense but mostly earns its length; a few clauses, such as the mixed German/English framing, could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation with no output schema and only destructiveHint=false, it covers side effects, pricing/tax snapshots, and important error cases well. It remains incomplete on several parameters and on how quoteId/idempotencyKey interact with creation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for 9 parameters, so the description must carry parameter meaning. It explains contactId/item lines, pricing, tax resolution, currency/fx, and zero-line behavior, but leaves workspaceId, actor, notes, quoteId, expectedOn, idempotencyKey, quantityMilli, unitPriceMinor, and line description largely or entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific creation action: a sales order on a C00 contact with D00 item lines. The resource and core scope are clear, and the note that it posts nothing distinguishes it from invoice/posting flows. It does not explicitly differentiate itself from sales_order_from_quote or sales_order_confirm beyond the empty-order note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies when to use it by describing a draft sales order and the fact that confirm refuses an empty order. However, it does not explicitly say when to use this versus sales_order_from_quote, sales_order_confirm, or other sibling creation paths.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sales_order_from_quoteA

Wandle eine angenommene Offerte in einen Auftrag um: reads the accepted C02 quote and copies its FROZEN lines (item, qty, price, tax_code travel unchanged, the VAT trace) into a new draft order linked by quote_id. Idempotent and single-order: converting the same quote twice returns the FIRST order, never a second. A non-accepted quote is refused (quote_not_accepted).

NameRequiredDescriptionDefault
quoteIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the single destructiveHint=false annotation: it is idempotent, converting the same quote twice returns the first order, non-accepted quotes fail with a specific error, and frozen line data including VAT trace is copied. These are exactly the behavioral traits an agent needs for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with no wasted sentences. The first sentence is long and mixes German and English, but it still communicates the core operation efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 0% parameter description coverage, the description carries a lot of burden. It covers behavior, idempotency, errors, and copied fields well, but leaves parameters and the exact return shape under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are three parameters, but the description does not explain workspaceId or idempotencyKey as parameters. It only indirectly implies quoteId through the accepted-quote conversion behavior and quote_id linkage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: converting an accepted quote into an order, including that frozen lines are copied into a draft order linked by quote_id. It is clear, but it does not explicitly distinguish itself from nearby siblings such as quotes_convert or sales_order_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage conditions: the quote must be accepted, and a non-accepted quote is refused with quote_not_accepted. It does not name an alternative tool or say when a sibling should be used instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sales_order_getA
Read-only

Lies einen Auftrag mit Positionen (ordered / delivered / invoiced / backorder qty), seinen Lieferscheinen und den verknüpften Rechnungen. The one read that shows the whole order -> delivery -> invoice chain for a single order. savedViewId is the G00 coverage seam over the delivery_note kind (its custom-field columns surface in the order detail).

NameRequiredDescriptionDefault
savedViewIdNo
workspaceIdYes
salesOrderIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and the description is consistent with it ('Lies'/'read'). Beyond the annotation, it discloses what the tool aggregates — positions with per-status quantities, delivery notes, and invoices — and explains how savedViewId surfaces delivery_note custom-field columns in the order detail. This adds meaningful context without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences each do real work: what is returned, how the tool is positioned among siblings, and what the optional parameter does. The mix of German and English is slightly awkward and 'G00 coverage seam' is jargon, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-order read with no output schema, the description inventories the return payload (positions with qty breakdown, delivery notes, linked invoices) and resolves the savedViewId nuance. It falls short of a 5 because it never describes the response shape or how the delivery/invoice records are nested.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the full burden. It genuinely explains savedViewId as a 'G00 coverage seam over the delivery_note kind' whose custom-field columns surface in the order detail, but workspaceId and salesOrderId, though likely inferable from names and the required list, get no descriptive support.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Lies einen Auftrag') and enumerates exactly what is returned: positions with ordered/delivered/invoiced/backorder quantities, delivery notes, and linked invoices. It then distinguishes itself from the sales_order_* siblings by positioning itself as 'The one read that shows the whole order -> delivery -> invoice chain for a single order,' making it easy to tell apart from sales_order_list and the mutation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'The one read that shows the whole order -> delivery -> invoice chain for a single order' gives clear context for when to select this tool over a list or status read. It does not explicitly name an alternative or state when not to use it, so it stops short of full exclusion guidance that would earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sales_order_invoiceB

Erstelle eine Rechnung aus einem Auftrag (P8, lands as an A11 DRAFT): collects the delivered-but-uninvoiced qty (including confirm-time auto-delivered service lines) and delegates to A10 createDocument (type invoice). D03 mints NO journal entry and stores no totals: A11 -> A02 own the posting at issue (P3). Each invoiced portion is one so_line_invoice link row, so a line invoiced across two partial invoices carries two rows; the invoiceable remainder is pre-checked, so a fully-invoiced line writes ZERO rows and returns nothing_to_invoice. NO DOUBLE-BILLING.

NameRequiredDescriptionDefault
actorNo
workspaceIdYes
salesOrderIdYes
idempotencyKeyNo

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false in annotations, the description carries the load and does add real behavioral context: no journal entry is minted, no totals stored, posting happens later at issue, one link row per invoiced portion, and a fully-invoiced line writes zero rows and returns nothing_to_invoice. The recurring opaque codes (P8, A11, D03, A02, P3) blunt the readability but the underlying side-effect story is disclosed well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, which is good, but the body is dense with internal cross-reference codes (P8, A11, A10, D03, A02, P3) that an agent cannot resolve without an external legend. Several of these could be dropped without losing the actionable meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a draft-creating mutation with no output schema, the description covers side effects and the nothing_to_invoice outcome, but leaves parameter meanings (especially idempotencyKey) and the normal success return shape unexplained. Adequate but with clear gaps given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for four parameters (actor, workspaceId, salesOrderId, idempotencyKey). The description implies salesOrderId via 'aus einem Auftrag' but says nothing about workspaceId, actor, or idempotencyKey semantics, so it does not compensate for the undocumented schema in a mutation tool where idempotency behavior especially matters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The German opener 'Erstelle eine Rechnung aus einem Auftrag' gives a specific verb+resource (create invoice from sales order) and the English continuation specifies the exact source of quantities (delivered-but-uninvoiced qty, including auto-delivered service lines). It clearly differs from siblings like create_document or issue_invoice by being the SO-to-invoice bridge, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'collects the delivered-but-uninvoiced qty' and 'the invoiceable remainder is pre-checked' tell the agent the precondition (something must be delivered and uninvoiced). But there is no explicit when-to-use-vs-alternative guidance against create_document, issue_invoice, or billing_generate_invoice, which are close siblings in this tool list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sales_order_listA
Read-only

Liste die Aufträge (P5): filter by status or contact. Each row carries the number, status, currency and order date. savedViewId support rides G00`s saved-view seam on the customization surface.

NameRequiredDescriptionDefault
statusNo
contactIdNo
savedViewIdNo
workspaceIdYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, covering the read-only behavior. The description adds the row fields (number, status, currency, order date), but the cryptic sentence about savedViewId ('rides G00`s saved-view seam') adds no clarity and may confuse. Minimal additional transparency beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, but the second sentence about savedViewId is confusing and unhelpful. The first sentence is clear, but the overall structure is not well-optimized for an agent; the cryptic phrase detracts from conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides the row fields, which is useful, but lacks details on pagination, sorting, or default behavior. It also omits explanation of workspaceId and does not clarify savedViewId. Adequate for a simple list tool, but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains status and contactId via 'filter by status or contact', mentions savedViewId vaguely, but does not explain workspaceId (which is required) at all. Only half the parameters are meaningfully described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists sales orders (Aufträge) and supports filtering by status or contact. The verb 'Liste' and the resource 'Aufträge' are explicit, and the tool is distinguished from siblings like sales_order_get (which retrieves a single order) and sales_order_create (which creates orders).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies when to use the tool: to list orders with optional filters by status or contact. However, it does not explicitly contrast with alternatives like sales_order_get or mention when not to use it, so the guidance is clear but not fully exclusionary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_draftB
DestructiveIdempotent

Create or update a draft journal entry (no money effect until posted).

NameRequiredDescriptionDefault
refNo
dateYes
linesYes
entryIdNo
descriptionNo
workspaceIdYes
idempotencyKeyYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already disclose idempotentHint=true and destructiveHint=true, and the description adds useful context that the draft has no money effect until posted. It does not explain what destructive behavior may occur on update, nor what permissions or validations apply, leaving a gap for a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted language. It is appropriately concise, even though it omits details needed elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with nested line items, idempotency requirements, destructive annotation, and no output schema, the description is too sparse. It gives the core purpose but omits required parameter guidance and key behavioral details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters, including required workspaceId, date, lines, and idempotencyKey. The description does not explain any parameter semantics, such as how entryId selects an update or what the line objects require.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: "Create or update a draft journal entry." It also distinguishes draft saving from posting by noting "no money effect until posted," though it does not explicitly name sibling tools such as post_entry or compose_entry.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "no money effect until posted" implies this is for pre-posting work, not final posting. However, it does not explicitly say when to use save_draft versus compose_entry, delete_draft, or post_entry, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_globalA
Read-only

Die globale Suche (global search): one query across every searchable record kind at once (Kontakte, Artikel, Belege, Projekte, Deals, Aufgaben, Lieferantenrechnungen, Aufträge, Bestellungen), including workspace-defined custom fields of type text/select/multiselect, findable the moment a value is set (no reindex exists). Results are grouped hits {entityKind, entityId, title, snippet?, matchedVia, route}, ranked exact > prefix > contains > custom-field-only (no relevance score is invented), deduped, paged by limit/cursor with hasMore/nextCursor. Every kind is fenced by that kind's own read capability: a kind the caller cannot read is silently absent, never counted, never hinted at, so an empty result set is indistinguishable from "no such record". q under 2 characters answers query_too_short; an entityKinds value outside the searchable roster answers unknown_entity_kind naming the roster; limit is capped at 50; savedViewId re-runs a saved global search (its stored q/entityKinds merge under any explicitly named field), so either q or savedViewId must be present. Reads only the local database and never local correspondence (mail, voice, drafts): those kinds are structurally absent from the roster. A pure read: writes nothing, needs no idempotencyKey.

NameRequiredDescriptionDefault
qNo
limitNo
cursorNo
entityKindsNo
savedViewIdNo
workspaceIdYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true, and the description reinforces this with 'A pure read: writes nothing, needs no idempotencyKey.' It goes well beyond the annotation by disclosing result grouping, ranking semantics (exact > prefix > contains > custom-field-only), deduping, pagination, permission fencing (silently absent kinds), error conditions, and search freshness (no reindex). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Though longer than typical descriptions, every clause delivers a necessary fact: result shape, ranking, dedup, pagination, permissions, errors, exclusions, and read-only guarantees. It is front-loaded with the core definition, and the density is justified for a cross-entity search tool with many behavioral edge cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is self-contained: it explains the return shape, paging contract, permission behavior, validation errors, parameter constraints, and scope limitations. Given there is no output schema and the parameter schema is minimal, this description thoroughly equips an agent to invoke the tool correctly and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden. It explains q (min length, query_too_short error), entityKinds (valid roster, unknown_entity_kind error), limit (capped at 50), savedViewId (re-runs saved search with merge behavior), and cursor (paging with hasMore/nextCursor). Every parameter gains meaning beyond its bare type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise definition: 'one query across every searchable record kind at once' and enumerates the entity kinds (Kontakte, Artikel, Belege, etc.). It clearly differentiates this global search from sibling kind-specific searches like serial_search, lot_search, files_search, and asset_search by emphasizing cross-kind coverage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes clear context: this is the cross-entity search across all searchable records, with explicit exclusions (never mail, voice, drafts, which are 'structurally absent'). It does not name alternative tools for those exclusions, but the scope is stated so clearly that an agent can infer when to use it versus kind-specific searches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_plugin_registryA
Read-only

Durchsuche das Erweiterungs-Verzeichnis (US-G02.5): query a configured registry through the OSS core`s registryClient seam and return a page of results (publisher, capability summary, requested permissions) that route into the same install-review flow as a local file. The OSS core wires NO client, so this answers needs_registry (never a hardcoded remote host); a configured registry that does not respond answers registry_unreachable (P9).

NameRequiredDescriptionDefault
pageNo
queryNo
workspaceIdYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true, the description goes well beyond the annotation by disclosing that no client is wired into the core, that no hardcoded remote host is ever used, that a non-responsive configured registry maps to registry_unreachable, and that results feed into the install-review flow. This is substantial behavioral context beyond what annotations already provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and mostly front-loaded, with purpose stated first and all sentences contributing meaningful behavior or error context. The mixed German/English phrasing and internal codes like US-G02.5 and P9 add slight noise but do not waste space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search tool with no output schema, the description covers purpose, result content and error semantics, which is helpful. However, it lacks guidance on the required workspaceId, pagination behavior, and how the response is structured, leaving the agent with important gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It implies that 'query' is the search term and that results are paginated, but it never explains the required workspaceId, page format, or query semantics. An agent would have to infer too much from parameter names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: search the extension registry through the OSS core's registryClient seam and return a paged result set with publisher, capability summary, and requested permissions. It is clearly distinguishable from sibling tools like get_plugin_registry_entry by emphasizing directory search and paged results, though it does not explicitly name that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete operational context: it is the tool to use when needs_registry applies because the OSS core wires no client, and it maps an unresponsive configured registry to registry_unreachable. It does not explicitly state when to prefer get_plugin_registry_entry or other plugin tools, but the intended flow is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_dunning_runA
DestructiveIdempotent

Email an issued Mahnlauf's letters, one per debtor, through the configured transport. Settlement is re-checked against the OP-Liste (A16) at the moment of sending: a letter naming ANY invoice that CHANGED since issue (a payment partial OR full, a cancellation, or a credit note) is skipped whole, counted and named by its distinct cause (outcome paid | partially_paid | cancelled | credited, plus a changedItems list and the skippedSettled document ids on the result), because the frozen letter cannot shed an item and must never chase an invoice whose demand is no longer true (US-A15.4); the frozen run record stays untouched (D73). The same re-check rides get_dunning_run, so the Studio warns before a manual download too (the MIT core has no transport). Per-debtor outcomes are recorded (sent, no_email, send_failed, and the four change causes), a retry sends only what has not gone out, and the run turns 'sent' when every debtor's letter has. Degrades honestly: needs_email_config when no transport exists, needs_email_transport when one is configured but not wired, and a debtor without an email keeps a downloadable PDF. P8: outbound is draft-by-default, pass confirmed=true or enable the workspace dial. CONSEQUENCE: Emails the reminder letters, one per customer, skipping any letter whose invoices changed since the run was issued. A sent letter can't be called back; a correction goes out separately.

NameRequiredDescriptionDefault
runIdYes
confirmedNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description materially expands beyond the annotations, disclosing the A16 settlement re-check, whole-letter skipping, outcome causes, retry semantics, status transitions, transport error codes, and that a sent letter cannot be recalled. The destructiveHint=true annotation is consistent with the irreversible email consequence.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded, but the description is heavily overstuffed with jargon, internal references (OP-Liste A16, US-A15.4, D73, P8), and a redundant 'CONSEQUENCE' paragraph that largely repeats the opening.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex irreversible send operation with no output schema, it covers many important behaviors: skip logic, debtor outcomes, transport degradation, and draft confirmation. The main completeness gap is insufficient documentation of the non-confirmed required parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain all four parameters. It explains confirmed=true and hints at retry/idempotency, but never describes workspaceId, runId, or the required idempotencyKey semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Email an issued Mahnlauf's letters, one per debtor, through the configured transport.' That clearly distinguishes this send action from siblings like issue_dunning_run and get_dunning_run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the run must already be issued and gives operational conditions such as draft-by-default with confirmed=true, retry behavior, and degraded transport modes. It does not explicitly compare against issue_dunning_run or state prerequisites in a compact when-to-use section.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_invoiceA
Destructive

Send an issued invoice by email (renders + attaches the PDF, transitions to sent). Outbound step is P8-gated: pass confirmed=true or enable the workspace dial. CONSEQUENCE: Sends it to the recipient. Once it is out, it can't be called back; a correction goes out separately.

NameRequiredDescriptionDefault
emailNo
confirmedNo
invoiceIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint annotation: it discloses the irreversible outbound side effect, the state transition to 'sent', the P8 approval gate and how to satisfy it, and that a correction must be sent separately. That is exactly the context an agent needs before an unrecoverable action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: what it does, how the gate works, what the consequence is. Front-loaded with the action and the irreversibility warning is capitalized and prominent. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description covers the safety-critical picture: gating, irreversibility, and the resulting state. It could have noted retry/idempotency behavior and the email parameter's effect, which is the remaining gap for a destructive tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across five parameters, so the description must carry the load. It explains 'confirmed' thoroughly and implies the email send, but leaves 'email' (recipient override?), 'idempotencyKey', and the workspace/invoice scoping unexplained — a notable gap for a non-reversible send.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Send an issued invoice by email') and immediately clarifies the mechanics it performs (renders + attaches the PDF, transitions to sent). This clearly separates it from issue_invoice, ebill_transmit, and the document transition tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The prerequisite ('an issued invoice') and the P8 gate ('pass confirmed=true or enable the workspace dial') give clear conditions for invoking it. It stops short of naming an alternative action such as a correction/credit note flow, so the agent must infer the fallback path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

serial_archiveA
DestructiveIdempotent

Soft-archive a serial (status archived). Refused with serial_has_balance while the unit is still available or reserved (issue, return or scrap it first). Deletion is never offered.

NameRequiredDescriptionDefault
serialIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the guard condition and the exact error code (serial_has_balance), plus the important nuance that archiving is soft and deletion is never offered — useful context when destructiveHint=true could otherwise be misread as permanent removal. It stops short of saying what happens to existing history/links or how the idempotency key is used across retries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and its resulting state, followed by the blocker and the negative scope. Every sentence carries distinct information with no repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple state-mutation tool with annotations covering idempotency and destructiveness, the description covers purpose, preconditions and the no-hard-delete guarantee. However, with no output schema and 0% parameter coverage, the undefined idempotencyKey (and lack of any statement about the response) leaves a real gap for an agent actually composing the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and all three parameters (serialId, workspaceId, idempotencyKey) are undocumented in both schema and description. The description refers to 'a serial' but says nothing about identifying it, scoping by workspace, or — most importantly — what value to supply for idempotencyKey and how it interacts with the idempotentHint annotation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Soft-archive a serial') and pins the resulting state ('status archived'), so the agent knows exactly what the call does. It also rules out a hard delete, which separates it from a hypothetical delete tool. It does not explicitly distinguish itself from sibling mutations like serial_set_status or serial_update, so it falls short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit precondition and failure mode: refused with serial_has_balance while the unit is available or reserved. It then names the alternative actions (issue, return, scrap) that must happen first, so the agent knows both when to call this and when to call something else.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

serial_createA
Idempotent

Create one serial (an individually identified unit) against a serial-tracked item. number is 1-60 chars, unique per item case-insensitively (serial_number_taken); the item must be serial-tracked (else tracking_not_applicable). When the item is lot_and_serial a lotId is required (lot_reference_required) and must belong to the same item (lot_item_mismatch). Starts status available.

NameRequiredDescriptionDefault
lotIdNo
notesNo
itemIdYes
numberYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the description goes beyond them by disclosing the initial status ('available'), case-insensitive uniqueness behavior, and specific validation failures. It does not explain idempotencyKey behavior on retries, but the core behavioral context is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded: it defines the operation, key constraints, conditional requirements, error codes, and initial state in a few short sentences. Every clause earns its place by preventing a specific misuse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with annotations and no output schema, the description covers preconditions, validation errors, and initial state well. It leaves gaps around idempotencyKey and notes, but those are minor relative to the critical serial-creation constraints already documented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It meaningfully documents number (1-60 chars, unique case-insensitively) and lotId (conditionally required, same-item constraint), but does not explain workspaceId, itemId, notes, or idempotencyKey semantics. Partial coverage warrants a baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Create one serial (an individually identified unit) against a serial-tracked item.' It also implicitly distinguishes from serial_create_bulk by emphasizing 'one serial.' An agent can tell exactly what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear preconditions (item must be serial-tracked; lotId required for lot_and_serial items; lot must belong to the same item) and names the relevant error codes. It does not explicitly name alternatives like serial_create_bulk or serial_update, but the context is sufficiently clear for correct use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

serial_create_bulkA
Idempotent

Create many serials at once for one item from a list of numbers (receiving a carton). ALL-OR-NOTHING: any duplicate number (against the store or within the batch) aborts the whole call with serial_number_taken and writes nothing. Same lotId rules as serial_create.

NameRequiredDescriptionDefault
lotIdNo
itemIdYes
numbersYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotent/destructive annotations by disclosing transactional semantics: any duplicate (in the store or inside the batch) aborts the entire call, returns serial_number_taken, and writes nothing. That atomicity guarantee is exactly what an agent needs before choosing a bulk write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, each earning its place: what it does, the hard constraint, and the pointer to related rules. The critical ALL-OR-NOTHING clause is front-loaded and capitalized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param mutation tool with no output schema and zero schema coverage, the behavioral contract is well covered, but nothing is said about the success response (created serial records? ids?) or idempotencyKey semantics, leaving a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning; it explains numbers, itemId, and defers lotId to serial_create, but never mentions workspaceId or idempotencyKey (though idempotentHint covers the concept indirectly). Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create many serials at once') plus the scope constraints: one item, a list of numbers, carton receiving. An agent can distinguish it from serial_create (single) without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(receiving a carton)' gives a concrete use context, and 'Same lotId rules as serial_create' routes to the sibling for lot handling. It stops short of saying explicitly when to prefer this over looping serial_create, but the bulk-vs-single split is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

serial_getA
Read-only

Read one serial by id, including its lot link, status and current-location projection.

NameRequiredDescriptionDefault
serialIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already exists, and the description reinforces it with 'Read' while adding useful output context (lot link, status, current-location projection). It does not cover error or not-found behavior, but for a read-only getter this is a reasonable level of transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence states the action, target, and key returned fields with no filler. Every part of the description contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-string getter with no output schema, the description gives sufficient context: what it reads, how it is keyed, and what key data it returns. Minor omissions like not-found or error behavior are acceptable given the tool's simplicity and read-only annotation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies that serialId is the lookup key ('by id'), but it does not explain workspaceId's role or expected value format; the parameter names are self-explanatory enough to avoid major ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation, 'Read one serial by id', and names specific returned aspects (lot link, status, current-location projection). This clearly distinguishes it from serial_list and serial_search, which are sibling tools for finding or listing serials.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Read one serial by id' makes it clear this is for single-record retrieval by identifier, implying it should be used over list/search alternatives. It does not explicitly name alternatives or state when not to use it, but the use case is clear enough for a simple getter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

serial_listA
Read-only

List serials, filterable by itemId, lotId, current locationId, status, and a case-insensitive search over number. Archived serials are hidden unless includeArchived or an explicit status is given. Accepts a savedViewId (G00 saved-view seam).

NameRequiredDescriptionDefault
lotIdNo
itemIdNo
searchNo
statusNo
locationIdNo
savedViewIdNo
workspaceIdYes
includeArchivedNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already supply readOnlyHint=true, and the description adds behavioral detail beyond that: archived serials are hidden unless includeArchived or an explicit status is given, search is case-insensitive over number, and savedViewId follows the G00 seam. This helps an agent predict results without contradicting the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three compact sentences with no filler. It front-loads the core list/filter operation, then adds archiving behavior and the saved-view hook, all in under 30 words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool, the description covers the operation, filters, archiving semantics, and the savedViewId seam, which is enough for an agent to invoke it correctly. Pagination and return-shape details are absent, but this is a modest gap given the simple list purpose and readOnly annotation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the bare schema. It meaningfully explains most parameters: itemId, lotId, current locationId, status, case-insensitive search over number, includeArchived, and savedViewId. Only workspaceId, the required parameter, is not explicitly described, but its role is reasonably inferable from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (List) and resource (serials), and enumerates the main filter dimensions. It is clearly a list/query operation and easy to tell apart from single-record siblings like serial_get, though it does not explicitly contrast with serial_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool: any listing of serials filtered by item, lot, location, status, or search term. It documents the archived-serial behavior and savedViewId seam, which informs invocation. It does not state exclusions or name alternatives, but the intended use is obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

serial_set_statusA
DestructiveIdempotent

Change a serial status: available | reserved | issued | returned | scrapped | archived, with an optional reason. Scrapping an available unit is allowed and removes it from availability. Never mints a stock movement.

NameRequiredDescriptionDefault
reasonNo
statusYes
serialIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare idempotentHint=true and destructiveHint=true. The description adds useful behavior beyond those fields: scrapping an available unit removes it from availability and the operation never mints a stock movement. It does not discuss permissions or reversibility, but the destructive annotation already signals caution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and status list, followed by two specific behavioral constraints. There is no filler or redundant restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent mutation with five parameters and no output schema, the description does provide the key status semantics and a stock-movement caveat. It is still incomplete because the required idempotencyKey and serial/workspace identifiers are undocumented in both the schema and description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden. It explains the status values and that reason is optional, but says nothing about serialId, workspaceId, or the required idempotencyKey, leaving three of five parameters unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: changing a serial's status, and it enumerates the exact allowed status values. It does not explicitly distinguish this tool from close siblings such as serial_update or serial_archive, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The allowed statuses and optional reason imply when to use the tool, and the note that scrapping an available unit is allowed provides a concrete use case. However, it gives no explicit guidance on when to choose this over serial_update, serial_archive, or lot_set_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

serial_updateA
DestructiveIdempotent

Edit a serial through a descriptive patch (number if still unique, notes, lotId which must belong to the same item). The status is changed via serial_set_status, not here. Only the fields present in patch change.

NameRequiredDescriptionDefault
patchNo
serialIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, so the safety profile is carrier-provided. The description adds genuine patch semantics ("Only the fields present in patch change"), which tells the agent that omitted fields are preserved rather than nulled — no contradiction with the annotations. However, it never explains why the operation is flagged destructive or what a bad patch does to existing references, leaving the most consequential behaviour undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler. The mutation mechanism and the field list come first, the sibling exclusion second, and the patch-preservation rule last — a sensible front-loading for an agent skimming before a write.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation with no output schema and heavy annotation coverage, the essentials are present: which fields change, which are left alone, and where status goes. What is missing is the identity/retry plumbing (serialId, workspaceId, idempotencyKey) and any statement of failure or permission behaviour, which matters given destructiveHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does add real constraints the schema lacks: number must still be unique and lotId must belong to the same item. But it covers only the three nested patch fields and is silent on serialId, workspaceId, and idempotencyKey — three of four top-level parameters, including the one that makes retries safe.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Edit a serial") and immediately qualifies the mechanism ("through a descriptive patch"), listing the mutable fields. It also names the one sibling that superficially looks similar (serial_set_status) and rules it out, so the agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit when-not and names the alternative: status changes go to serial_set_status, not here. That is a real routing decision an agent would otherwise get wrong. It stops short of covering the other neighbours (serial_archive, serial_get) or any prerequisite conditions, so it is clear context rather than full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_agent_dialA
DestructiveIdempotent

Set one approval-dial level to ask or auto for one governed capability (post/issue/send/dun/pay/vat-file/customize/plugin-install/close-period/go-live). ask drafts the agent write for human approval; auto executes it when RBAC also permits. An unknown capability or level is rejected. Owner-only (manage_agent_dial).

NameRequiredDescriptionDefault
levelYes
capabilityYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: owner-only permission (manage_agent_dial), RBAC dependency for auto execution, and rejection of unknown capabilities/levels. It does not disclose that an existing dial is overwritten or how idempotencyKey affects retries, which matters given destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action, then behavior, then constraint. The parenthetical capability list is long but earns its place as the only source of allowed values.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, permission requirement, valid values, and failure behavior for a mutation tool with no output schema. The only gap is the idempotencyKey's role and what happens when a dial already has a value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does add value by enumerating valid capability strings (post/issue/send/.../go-live) and the two level values, but workspaceId and idempotencyKey remain completely undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set one approval-dial level') plus scope ('for one governed capability'), and enumerates the exact capability values. It is clearly distinguishable from the read-only sibling get_agent_dial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the two levels precisely: 'ask' drafts agent writes for human approval, 'auto' executes when RBAC also permits, and unknown values are rejected. It doesn't explicitly contrast with get_agent_dial or state when an admin should prefer ask over auto, but the semantics are clear enough to choose a value.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_aging_bucket_configA
DestructiveIdempotent

Redefine where the aging buckets cut, as a strictly increasing list of positive day counts (the default [30, 60, 90] gives 0-30, 31-60, 61-90 and 90+). This changes the VIEW only: the buckets re-partition the same receivables total and can never change it, and the reconciliation to 1100 Debitoren holds for any boundary set. It is a DACH reporting convention, not a statutory figure, and it is not a dunning deadline (A15 owns those). A repeat call under the same idempotencyKey writes nothing.

NameRequiredDescriptionDefault
workspaceIdYes
boundariesDaysYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true, and the description adds exactly the context they lack: the change is view-only, re-partitions the same receivables total and can never alter it, the reconciliation to 1100 Debitoren holds for any boundary set, and a repeat call under the same idempotencyKey writes nothing. That reassures the agent about the blast radius of a 'destructive' operation without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the action and value format, then effect, then domain framing, then idempotency. Every clause contributes either parameter semantics or blast-radius information; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter mutation with no output schema and annotations covering safety, this covers value format, invariants, and idempotency well. It omits permission/role requirements and error behavior for invalid boundary lists (e.g. non-increasing values), which would complete the picture for a write tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description has to carry the load: it does for boundariesDays (strictly increasing, positive day counts, default example) and implies the contract for idempotencyKey ('a repeat call under the same idempotencyKey writes nothing'). workspaceId is left as conventional/undocumented, which is the only material gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Redefine where the aging buckets cut') and immediately defines the accepted value form with a concrete default example ([30,60,90] -> 0-30, 31-60, 61-90, 90+). It also carves itself away from the dunning configuration tools by stating it is 'not a dunning deadline (A15 owns those)', so an agent can place it against get_aging_bucket_config / aging_report without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear about the conditions and effects of use ('changes the VIEW only', 'not a statutory figure'), and it explicitly excludes the dunning-deadline territory owned by another tool. It stops short of naming the read-side sibling (get_aging_bucket_config) as the alternative, and gives no prerequisite/authorization guidance, so it is strong but not a full when/when-not map.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_bank_csv_mappingA
DestructiveIdempotent

Save the CSV column mapping of one Bankkonto (the shape bank_csv_preview describes): from then on import_bank_statement reads that bank's CSV exports with it, by header text, so reordered columns still map. One mapping per Bankkonto; a later save replaces it (each change is in the audit log). Checks the shape only (unknown target field or date format refuses invalid_input); the file is checked at preview and import. Writes no ledger row. Idempotent per key. CONSEQUENCE: Saves how this bank account's CSV exports are read (date, amount, debit and credit columns): later CSV imports read amounts and signs this way. Saving another mapping replaces it.

NameRequiredDescriptionDefault
mappingYes
workspaceIdYes
bankAccountIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint; the description adds the substance behind them: one mapping per account, a later save replaces the previous one with an audit-log entry, validation is shape-only (invalid target field or date format returns invalid_input), and no ledger row is written. That is a full behavioral picture including failure mode and side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and dense with useful facts, but the closing CONSEQUENCE block restates material already given earlier ('import_bank_statement reads that bank's CSV exports' and 'Saving another mapping replaces it'). Those two sentences could be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, it covers side effects, validation, replacement semantics, and audit logging, which is what an agent needs to call it safely. It does not say what the call returns (e.g., the saved mapping or a confirmation), a minor remaining gap given there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% on four parameters including a nested 'mapping' object, so the description must carry the load. It does explain that mapping follows the bank_csv_preview shape and that the idempotency key scopes idempotency, but it never characterizes workspaceId/bankAccountId or the mapping's internal fields beyond a parenthetical list of column kinds. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Save the CSV column mapping of one Bankkonto') with precise scope, and distinguishes itself from the siblings that surround it: bank_csv_preview describes the shape, import_bank_statement consumes the mapping, and one mapping exists per Bankkonto. An agent can tell exactly what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes the workflow context (the mapping follows bank_csv_preview's shape, preview and import do the file validation) and the replacement rule, so an agent knows when to call it. It does not explicitly point at get_bank_csv_mapping as the read-back alternative or state when a mapping should not be saved, which keeps it just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_bank_opening_balanceA
Idempotent

Post a Bankkonto's opening balance as a real balanced journal entry (debit the bank account, credit 9100 Eröffnungsbilanz), in integer Rappen. Explicitly confirmed and idempotent: re-sending the same idempotencyKey returns the original entry and never posts twice. A correction to a posted opening balance is a reversing entry, never a second opening. CONSEQUENCE: Books the bank account's opening balance against 9100 Eröffnungsbilanz, once. A correction is a correcting entry, never a second opening; both stay visible.

NameRequiredDescriptionDefault
dateYes
fxRateNo
currencyNo
amountMinorYes
workspaceIdYes
bankAccountIdYes
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotent and non-destructive annotations, the description explains exactly what journal entry is created, how idempotencyKey prevents double posting, and how corrections remain visible as reversing entries. It clearly discloses the financial consequence of the operation without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded with the core action and accounting mechanism, and most sentences earn their place. However, the correction rule is restated in the CONSEQUENCE section, and the 'never a second opening' point appears twice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the business meaning, idempotency, and correction behavior well for a mutation tool, but there is no output schema and no schema description coverage for seven parameters. It does not explain expected success output, permission requirements, or how optional currency and fxRate affect the posted amount.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden, but it only explains amountMinor as integer Rappen and the behavior of idempotencyKey. It leaves date, currency, fxRate, workspaceId, and bankAccountId largely or entirely unexplained, which is a significant gap for a financial posting tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: posting a bank account's opening balance as a balanced journal entry, including the debit/credit accounts and Rappen units. It is clearly distinct from a preview in substance, but it does not explicitly name the sibling preview_bank_opening_balance or other opening-balance tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states an important when-not-to-use rule: a correction to a posted opening balance must be a reversing entry, never a second opening. It also signals that the operation is explicitly confirmed and idempotent, but it does not route agents to alternatives such as preview_bank_opening_balance or set_opening_balances.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_bank_standardA
DestructiveIdempotent

Save a Buchungsregel (a STANDARD) from ONE bank line (bankTxnId), or edit a live one by its standardId (no line needed; the edit replaces it, kept on record): from now on every open line of this line's counterparty (its IBAN, else its normalised name) in the same direction (money in or money out) is proposed booked like this. Simplest form: accountId with taxCode (a code, or null for no MWST): the whole line to that account, certainty sure, reason standard, so the bulk button books it (unless the setting bank.buchungsregel_mode is suggest). A recipe instead: legs (1 to 20) [{ accountId, taxCode, amount: { kind: rest } | { kind: ask, label }, against?, description? }] with exactly ONE rest leg; an asked leg's amount is typed when the line is booked (book_bank_line target rule), so such a rule proposes check, never sure; with legs, accountId and taxCode are ignored. viaAccountId routes the booking through a Durchlaufkonto (a balance account, no leg, no Bankkonto, no control or VAT account). matchText limits the rule to lines whose REMITTANCE text contains it (never the payer name); a counterparty may hold one rule without text and one per distinct text, and a text rule that matches beats the rule without text. label names the rule. Posts nothing and books nothing by itself; the line itself is not booked. A new rule for the same counterparty, direction and text replaces the old one (kept on record); the same recipe, label, text and Durchlaufkonto again answers unchanged: true. Refuses no_counterparty (the line has no IBAN and no name), invalid_account (archived, a Bankkonto's ledger account, the 1100/2000 control accounts, a VAT account 1170/1171/2200/2201), invalid_tax_code (not in this book or archived), vat_not_applicable (a code on an account where MWST cannot apply: only income, expense and asset accounts 12xx, 14xx to 17xx carry one); with legs or viaAccountId, the same checks answer invalid_recipe with detail (legs_count, leg_shape, rest_count, ask_label, against_on_rest, description, invalid_account, invalid_tax_code, vat_not_applicable, via_account) and legIndex. A leg's amount may also be { kind: same, legIndex } (the amount of the asked leg it names; detail same_target otherwise), or COMPUTED from the line: { kind: factor, label, num, den, explain? { vatBp?, feeBp? } }, the amount round-half-up(line amount x num / den) in Rappen (num and den positive integers, e.g. 1081/180 for a gross of MWST 8.1 % plus a 9.9 % fee on the net; explain only words it; detail factor otherwise, and always on a Vorlage); a rule whose only unknowns are computed proposes reason rule_computed, check, or sure under the setting bank.buchungsregel_computed_mode bulk. outcome ignore (instead of legs) makes a "Nicht buchen" rule: ignoreReason (booked_elsewhere | clearing_account | before_start | duplicate | other) and ignoreNote, proposed as reason rule_ignore (check, or sure under the setting bank.buchungsregel_ignore_mode bulk); detail ignore_outcome when legs are given or the reason is missing. followUpStandardId names a live Vorlage of this workspace offered as the next step once the line is decided (detail follow_up otherwise). scope manual saves a VORLAGE for the Buchungssatz composer instead: no bankTxnId, label required (one live Vorlage per name, folded: saving or renaming onto a name another live Vorlage holds refuses label_taken naming it (standardId); to replace that Vorlage pass its id as replaceStandardId, and when the name is held by another row at write time, because the Vorlage was edited since, the save refuses label_taken again), legs 2 to 20, every leg with side (debit | credit), exactly one rest leg (what balances the entry), asked and same legs; no matchText, viaAccountId, outcome ignore or followUp; a Vorlage never names a bank ledger, control or VAT account. Book from it with post_entry { template: { standardId, asks } }. Editing refuses rule_not_found (not a live rule of this workspace) and wrong_scope (a Vorlage edited as a bank rule or the other way round). Idempotent on idempotencyKey. CONSEQUENCE: Saves a standard: later bank lines of this counterparty in this direction are proposed to this account and MWST code, ready for the bulk button. Nothing is booked now; you can remove it any time.

NameRequiredDescriptionDefault
legsNo
labelNo
scopeNo
outcomeNo
taxCodeNo
accountIdNo
bankTxnIdNo
matchTextNo
ignoreNoteNo
standardIdNo
workspaceIdYes
ignoreReasonNo
viaAccountIdNo
idempotencyKeyYes
replaceStandardIdNo
followUpStandardIdNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already declaring idempotentHint and destructiveHint, the description adds substantial behavioral context: what future lines are affected, that nothing is booked now, that replacing keeps old rules on record, the unchanged:true idempotent response, and a long list of refusal codes with detail fields. It discloses consequences far 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.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is valuable but delivered as an extremely long run-on block with dense parentheticals and jargon, lacking bullets or clear sectioning. It is front-loaded with the core purpose, but the remainder is hard to parse and repetitive, so structure and conciseness suffer significantly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 16-parameter tool with no parameter descriptions, no output schema, and only coarse annotations, the description is remarkably complete: it covers both scopes, all amount kinds, replacement semantics, idempotency, and exhaustive refusal/detail codes. Nothing essential to calling it correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage across 16 parameters, the description carries the full burden and does so: it explains bankTxnId vs standardId, accountId/taxCode shorthand vs legs, amount kinds (rest, ask, same, factor), against, description, viaAccountId, matchText, label, outcome ignore with ignoreReason/ignoreNote, followUpStandardId, scope manual, replaceStandardId, and idempotencyKey. Nearly every parameter gains meaning beyond its bare schema type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb (save/edit) and resource (Buchungsregel/STANDARD) tied to a bank line or standardId, and the description clearly distinguishes the bank-rule mode from the manual Vorlage mode. An agent can tell this creates/edits matching rules rather than booking transactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the internal modes (new from bankTxnId, edit via standardId, scope manual for Vorlagen), but never names sibling alternatives such as book_bank_line, clear_bank_standard, or list_bank_standards and when to prefer them. Usage is implied by the mode breakdown rather than by explicit when-to-use/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_bank_sync_scheduleA
DestructiveIdempotent

Set the daily automatic statement fetch of an EBICS connection (D142): mode 'daily' or 'off' and atTime as a Swiss local time HH:MM (default 07:00; an active connection that never set a mode is fetched daily). Under till up the scheduler then fetches once a day at that time, catches up at start when TILL was closed, and retries a bank that did not answer or was busy hourly, at most three attempts a day; till serve has no scheduler. No automation rule fetches statements: passing a ruleId is refused sync_schedule_parked, and the call also clears a rule pointer an older build stored. Idempotent; banking-write. Posts nothing. CONSEQUENCE: Sets when TILL fetches your bank statements each day, or turns that off. The fetch runs in the name of whoever set it, or the owner's once that person loses the right.

NameRequiredDescriptionDefault
modeNo
atTimeNo
ruleIdNo
workspaceIdYes
connectionIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotency and destructiveness, and the description adds substantial non-obvious behavior: retry semantics (hourly, max three attempts), catch-up behavior when TILL was closed, the fact that no automation rule fetches statements, the clearing of an older rule pointer, and that the fetch runs in the name of whoever set it. Nothing 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description front-loads the core action and proceeds logically through scheduler behavior, exclusions, and consequences. It is dense and long, but most sentences carry useful information; the trailing CONSEQUENCE summary adds clarity rather than repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter banking mutation with no output schema and only partial annotation coverage, the description is quite complete: it covers retry behavior, permissions, ruleId refusal, and the effect of disabling the schedule. The main gap is the lack of explanation for the required identifier parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains mode ('daily'/'off'), atTime (Swiss local HH:MM, default 07:00), and ruleId behavior well, but leaves workspaceId, connectionId, and idempotencyKey undocumented, including the three required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: setting the daily automatic statement fetch of an EBICS connection, with mode 'daily' or 'off'. This clearly separates it from an immediate manual sync, though it never names a sibling tool like bank_sync for explicit contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: mode 'daily' or 'off', the default 07:00 time, the fact that till serve has no scheduler, and that passing a ruleId is refused with sync_schedule_parked. It does not explicitly say 'use this instead of X' but the exclusions and consequences make the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_camt_matchingA
DestructiveIdempotent

Tune the workspace debit-matching (A36 §6b): valueDateWindowDays (0-60, default 5) widens or narrows the value-date proximity signal, and reviewThreshold (any|medium|high, default any) sets the confidence floor below which a booked debit reports needsReview. These tune ranking and the review event only; they never touch the mandatory exact amount + currency gate. Idempotent; one row per workspace.

NameRequiredDescriptionDefault
workspaceIdYes
idempotencyKeyYes
reviewThresholdNo
valueDateWindowDaysNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes meaningfully beyond the annotations by bounding the blast radius: it tunes ranking and the review event only and 'never touches the mandatory exact amount + currency gate', plus 'one row per workspace', which explains the idempotentHint. The destructiveHint=true is only obliquely covered by 'one row per workspace' — the description never says existing values are overwritten or that omitted fields may be reset, which is the main residual gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the two tunables front-loaded and the safety constraint second; no filler. The parenthetical notation ('A36 §6b', '(0-60, default 5)') is compact rather than wasteful, though the density makes it slightly harder to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter configuration tool with no output schema and no annotations covering the overwrite behavior, the critical unanswered question is whether omitted fields keep their current values or revert to defaults — an upsert ('one row per workspace') could mean either. The matching-semantics coverage is strong, but that update-semantics gap matters for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the schema declares no enums, so the description carries the load and does so for the two behavioral knobs: valueDateWindowDays is given a 0-60 range and default 5, reviewThreshold its allowed values (any|medium|high) and default any. It adds nothing for workspaceId or idempotencyKey, which are self-evident but still undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Tune') and a precisely scoped resource ('workspace debit-matching', with a domain reference to A36 §6b), then names the two knobs it exposes. An agent can tell this apart from sibling configuration tools like set_bank_standard or set_qr_auto_apply without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by describing what the two settings affect (value-date proximity signal, review-confidence floor), which is enough to infer 'use when tuning debit match strictness'. However, no sibling alternative is named and no when-not condition is given, so routing between this and the many other matching tools (set_bank_standard, match_three_way_override, set_qr_auto_apply) is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_creditor_bank_profileA
DestructiveIdempotent

Set (or correct) the IBAN a vendor is paid at. A17's vendor bill carries no IBAN of its own; this is where a creditor's bank details live so create_payment_batch can build a pain.001 instruction. Validates the IBAN (A19's validateIban) and derives whether it is a QR-IBAN, which decides whether the bill's own vendorReference must be a QRR (a QR-IBAN never accepts free-text remittance). This alters who a future payment reaches: it is on the automation denylist (D65 leg f), mirroring update_bank_account and set_creditor_profile. CONSEQUENCE: Changes the IBAN this vendor is paid at, for every later payment run. Check it against the vendor's invoice.

NameRequiredDescriptionDefault
ibanYes
vendorIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint/idempotentHint annotations: discloses that the IBAN is validated via validateIban, that QR-IBAN status is derived and forces QRR remittance, that the tool sits on the automation denylist, and spells out the blast radius ('changes the IBAN this vendor is paid at, for every later payment run').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then adds validation, downstream effect, and a consequence warning — each mostly earning its place. Internal doc codes (A17, A19, D65 leg f) are opaque overhead for an agent and could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a mutation tool with no output schema, the definition covers motivation, validation behavior, downstream payment impact, and safety status well. The remaining gap is operational: no note on required permissions or how idempotencyKey should be supplied/treated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It adds real meaning for the 'iban' parameter (validation, QR-IBAN derivation, remittance consequences) but says nothing about vendorId, workspaceId, or idempotencyKey semantics, leaving three of four required parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource+scope: setting/correcting the IBAN a vendor is paid at, and explains the data model (the bill carries no IBAN of its own; the creditor bank profile holds it). It also names the closely related siblings (set_creditor_profile, update_bank_account) so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains why and when the tool is needed: create_payment_batch requires the IBAN here to build a pain.001, and the IBAN must be checked against the vendor's invoice. It lacks an explicit 'do not use this to change address/name — use set_creditor_profile instead' exclusion, but the sibling reference points that way.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_creditor_profileA
DestructiveIdempotent

Set the QR-bill creditor: IBAN (a QR-IBAN gives a QRR reference, a plain IBAN gives SCOR), optional name (defaults to the company name) and optional structured address. The IBAN saves without the address; the address is needed before the first QR-bill renders (buildQrBill answers needs_creditor_address until then). A partial address is refused (needs_structured_address). CONSEQUENCE: Changes the account every QR-bill is paid into, including the QR-bills of invoices already open when they are downloaded, sent again or dunned. A customer who already paid is not affected.

NameRequiredDescriptionDefault
ibanNo
qrIbanNo
addressNo
workspaceIdYes
creditorNameNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructive/idempotent annotations it discloses the real blast radius: the payment account changes for every QR-bill, including already-open invoices when re-downloaded, re-sent or dunned, while already-paid customers are unaffected. It also documents the default for the name and the two named error outcomes, which the annotations do not cover. This is consistent with, and richer than, the destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then prerequisites, then consequence — a deliberate and readable order with no filler sentences. It is dense and long-winded in places (parenthetical error codes, the P.S.-style customer note), but nearly every sentence adds operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, everything an agent needs is here: what it changes, the effect on in-flight documents, the prerequisite ordering, the default name, and the failure modes. The only omissions are `workspaceId` semantics and a return-value note, both minor against the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry meaning, and it delivers the key semantic distinction: a QR-IBAN yields a QRR reference while a plain IBAN yields SCOR, plus the name defaulting to the company name and the address's all-or-nothing nature. Gaps remain: `workspaceId` is never explained and it is unclear which of the two parameters (`iban` vs `qrIban`) is expected for which reference type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb+resource: 'Set the QR-bill creditor' with the fields it governs (IBAN, name, address). Its purpose is clear against most siblings, but it never explicitly distinguishes itself from the confusingly similar sibling `set_creditor_bank_profile`, which an agent could easily confuse with this one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful sequencing/prerequisite guidance (IBAN can be saved alone; address required before the first QR-bill renders; partial address refused with `needs_structured_address`). However, it offers no when-to-use/when-not guidance relative to alternatives and no exclusions, so usage routing is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_default_document_templateB

Make a template THE default for its document kind: the prior default clears in the same atomic write (at most one default per kind), and every document of that kind issued afterwards freezes to it. Wide-effect and reviewable: this changes the workspace's outward face. CONSEQUENCE: Makes this template the default for its kind of document, for everything issued from now on; issued documents keep theirs. You can choose another default at any time.

NameRequiredDescriptionDefault
templateIdYes
workspaceIdYes
documentKindYes
idempotencyKeyNo

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the single destructiveHint=false annotation: it discloses that the prior default clears in the same atomic write, that at most one default exists per kind, that only future documents freeze to it, and that the change is reversible. Missing: permission/auth requirements, whether the call is idempotent, and any failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core atomicity fact is front-loaded, which is good, but the second half is redundant: 'Wide-effect and reviewable: this changes the workspace's outward face' and the CONSEQUENCE block restate the same future-documents-only semantics already given in sentence one.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and thin annotations, the behavioral picture is well covered, but a mutation tool with 0% parameter documentation and no stated prerequisites leaves gaps an agent must guess at before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters, so the description must compensate and does not. Only documentKind is indirectly implied ('for its document kind'); workspaceId, templateId, and especially idempotencyKey are never explained in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Make a template THE default for its document kind'. The scope (per document kind, one default) is unambiguous. It does not name or contrast with close siblings such as update_document_template, create_document_template, or archive_document_template, so differentiation is left to the reader.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what happens after the call but never says when an agent should prefer this over update_document_template or archive_document_template, nor what prerequisites exist (does the template need to exist, be published, be in the same workspace?). Usage is only implied by the effect description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_diagnosticsA
DestructiveIdempotent

Turn error recording on or off for this computer. Off is the default, and turning it off also deletes what was recorded. Set this only when the person asks for it.

NameRequiredDescriptionDefault
captureYes
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond destructiveHint=true by specifying that disabling also deletes previously recorded data and that off is the default state. That deletion-on-off detail is genuinely useful and not recoverable from annotations. It stops short of saying whether deletion is immediate or recoverable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the destructive default, then the usage constraint. No filler, and each sentence adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive two-parameter toggle with no output schema, the description covers risk and default state well but leaves both parameters undocumented and never confirms what the call returns or whether it is scoped to a workspace. Adequate but with a clear parameter-level gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden. It implies the boolean 'capture' semantics through 'on or off', but never names the parameter, and workspaceId is entirely unexplained while the text says 'this computer'. An agent must guess whether workspaceId is required to target the right machine.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: turning error recording on or off. An agent can distinguish it from read-only diagnostics siblings like get_diagnostics or clear_diagnostics, though those are never named. The scope phrase 'for this computer' is slightly at odds with the workspaceId parameter, which adds minor ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Set this only when the person asks for it' gives an explicit restraint condition, which is valuable for a destructive settings toggle the agent might otherwise call speculatively. It does not mention the related read/inspect tools (get_diagnostics, clear_diagnostics) that an agent would plausibly want first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_dunning_configA
DestructiveIdempotent

Set the Mahnwesen policy: all three levels in one write, thresholds strictly increasing. A Mahngebühr has NO statutory basis and is chargeable only when contractually agreed, so it defaults to zero; a positive fee always BOOKS (the letter demands exactly what books) and needs an income account. There is no tax code to configure: the fee's VAT splits pro rata across the chased invoice's own rate bases at issue (D69, ESTV practice: the fee is part of the underlying supply's Entgelt). minIntervalDays per level is the minimum days that must pass after the previous level's letter issued before this level is reached (default 10), so an invoice already past every threshold escalates one letter per interval rather than 1./2./3. in three days; 0 disables the spacing for that level. The Verzugszins rate floor is 500 bp (Art. 104 OR) and the note is computed on the invoice principal, actual days over 365. A repeat call under the same idempotencyKey writes nothing.

NameRequiredDescriptionDefault
levelsYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description explains significant behavior: fees default to zero unless contractually agreed, positive fees always book and require an income account, VAT splits across the chased invoice's rate bases, minIntervalDays controls escalation spacing, the interest floor is 500 bp, and repeat calls under the same idempotencyKey write nothing. These are domain-specific consequences an agent could not infer from idempotentHint/destructiveHint alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence, followed by legal/fee rules, interval semantics, interest rules, and idempotency. It is dense and long, but most sentences carry meaningful configuration or behavioral constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, mutation-oriented configuration tool with no output schema, the description covers the critical policy composition rules, booking behavior, VAT treatment, escalation timing, interest floor, and idempotency. Some nested parameter semantics remain unspecified, but an agent has enough to invoke it correctly in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining key nested fields: feeMinor/bookFee/feeIncomeAccountId, minIntervalDays, interestBp, and idempotencyKey. It does not explicitly define every field such as templateKey, showInterest, level, or daysOverdue, so it is strong but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Set the Mahnwesen policy') plus the crucial scope ('all three levels in one write, thresholds strictly increasing'). This clearly distinguishes it from the read-only sibling get_dunning_config and from dunning-run execution tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when this configuration applies and constraints such as strictly increasing thresholds and all levels in one write. It does not explicitly name get_dunning_config as the read alternative or state when not to use this tool, so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_ebill_configA
DestructiveIdempotent

Record the eBill-Biller-ID after enrolling with a certified network partner (a commercial step outside the product). Validates the SWP billerPid shape (41 followed by 15 digits) and upserts the one config row per workspace; a malformed id returns invalid_biller_pid and persists nothing. Naturally idempotent (asserts an absolute state), so it takes no idempotency key. Posts nothing.

NameRequiredDescriptionDefault
billerPidYes
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: the SWP shape check (41 followed by 15 digits), the invalid_biller_pid error, atomic failure ("persists nothing"), and that no ledger posting occurs. The idempotency sentence is consistent with idempotentHint=true and explains why no key is accepted. It does not spell out that an existing billerPid is overwritten (relevant given destructiveHint=true), which is the one gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and precondition, followed by validation/error semantics and then side effects. Every clause carries distinct information; nothing is repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation with annotations and no output schema, the description covers validation, failure mode, atomicity, idempotency, and side effects. It does not describe what the caller gets back on success or note permission requirements, a small residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden and largely does: it fully specifies billerPid syntax (41 + 15 digits) and ties workspaceId to the one-row-per-workspace upsert key. The workspaceId parameter itself is never explicitly described, keeping it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: recording the eBill-Biller-ID by upserting the single per-workspace config row. An agent can immediately distinguish it from the read-only sibling get_ebill_config, and the parenthetical clarifies the surrounding business context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition: the caller must have enrolled with a certified network partner first ("a commercial step outside the product"), which prevents premature invocation. It does not name get_ebill_config as the read-side alternative or say what to do if a config already exists, so it stops short of explicit when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_field_valueA
Destructive

Set one custom field value on one record, validated against the field type (a money value is an integer Rappen count, a date is ISO-8601, a select value is one of its options). Passing null clears the value. Requires whatever capability editing that entity itself requires, never a G00 capability: a custom field is not a side door.

NameRequiredDescriptionDefault
valueNo
entityIdYes
fieldKeyYes
entityKindYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint annotation by disclosing auth requirements ('requires whatever capability editing that entity itself requires, never a G00 capability') and the null-clears-value overwrite semantics. This is strong added context, though it doesn't cover side effects such as audit logging or the response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, and each sentence carries substantive information. The 'a custom field is not a side door' clause is slightly editorial but reinforces the security constraint rather than wasting space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and 0% schema coverage, the description supplies the essentials an agent needs: value typing, null-clearing, and capability requirements. The remaining gap — valid entityKind values and the idempotencyKey contract — is moderate but not disqualifying.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry the load, and it does explain the most important parameter (value) richly: integer Rappen for money, ISO-8601 for dates, one option for select, null clears. It says nothing about entityKind, entityId, fieldKey, or idempotencyKey, so several parameters remain undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Set) and precisely scoped resource (one custom field value on one record), including that validation is against the field type. An agent can distinguish this from sibling field tools like define_field, confirm_field, and list_field_values without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear operational context — validation rules and that passing null clears the value — which implicitly tells an agent when to send null. However it never names an alternative or an explicit when-not-to-use condition relative to siblings like define_field or the batch field tools, leaving selection guidance implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_fiscal_configA
DestructiveIdempotent

Set legal form, base currency, or fiscal year start (currency/year lock once the ledger is non-empty).

NameRequiredDescriptionDefault
legalFormNo
workspaceIdYes
baseCurrencyNo
fiscalYearStartNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true; the description adds the crucial explanation of what makes it destructive — currency and fiscal year become locked once the ledger has entries. That is real context beyond the annotations, though permissions requirements or whether legalForm stays editable are not stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence naming the settable fields first and the locking caveat second. No filler, though it is dense enough that the lock condition could be easy to miss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent-looking config mutation with no output schema and zero documented parameters, the description covers the main risk but leaves open value formats and whether re-setting a locked field errors or silently no-ops.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description has to compensate. It names three of the four parameters, which correlates with the schema, but provides no format guidance (ISO currency code, date format) and does not mention workspaceId, leaving the agent to infer from the schema types alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb plus the three concrete resources it sets (legal form, base currency, fiscal year start), so the agent knows exactly what is being configured. It does not explicitly differentiate itself from neighbours like update_company_profile or settings_set, which keeps it below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical 'currency/year lock once the ledger is non-empty' implicitly tells the agent to call this early, before posting begins. However, no alternative tool is named and there is no explicit when-not guidance beyond the lock condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_fx_methodA
DestructiveIdempotent

Elect the MWSTV Art. 45 conversion basis for a Steuerperiode: daily (Tageskurs, Devisenkurs Verkauf), monthly_avg (Monatsmittelkurs) or group (Konzernumrechnungskurs, group members only). taxPeriod is a calendar year (MWSTG Art. 34 Abs. 2) and defaults to the current one. The election carries forward until it is changed. Art. 45 Abs. 5 binds it for at least one Steuerperiode, so it may only be written while that period, and every period after it, still holds no posted foreign-currency entry. bank (Abs. 3bis) is not electable: it is the mandated fallback for currencies the ESTV publishes no rate for and stays admissible under every election. CONSEQUENCE: Chooses the exchange-rate basis MWST uses for foreign-currency amounts from this tax year on. You can change it only while that year and later ones hold no posted foreign-currency entry.

NameRequiredDescriptionDefault
methodYes
taxPeriodNo
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say idempotent and destructive; the description adds the crucial behavioral facts: the choice carries forward until changed, is bound for at least one Steuerperiode (Art. 45 Abs. 5), and becomes unchangeable once foreign-currency entries are posted. That is exactly the kind of irreversibility context an agent needs before calling a destructive config write, and it is consistent with destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and allowed values are front-loaded, then constraints, which is good ordering. The trailing CONSEQUENCE sentence largely restates the carry-forward and posting-lock rules already stated earlier, and the heavy statutory citations add density without new operational meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter configuration mutation with no output schema and no annotation detail, the description supplies everything an agent needs to decide eligibility and call it correctly: valid values, default period, binding period, and the posting precondition. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and there are no enums in the schema, so the description carries the full burden — and it does: it defines all three allowed `method` values (Tageskurs/Devisenkurs Verkauf, Monatsmittelkurs, Konzernumrechnungskurs restricted to group members), explains why `bank` is rejected, and states that `taxPeriod` is a calendar year defaulting to the current one. Only `workspaceId` is left implicit, which is self-evident in a multi-tenant tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a precise verb+resource: electing the MWSTV Art. 45 conversion basis for a Steuerperiode, and enumerates the three electable values (daily, monthly_avg, group). This is clearly the write-side counterpart to the sibling get_fx_method, so an agent can distinguish them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a strong when-not rule: the election may only be written while the period and every later period hold no posted foreign-currency entry, and it rules out `bank` as non-electable fallback. However, it never explicitly points at get_fx_method as the way to inspect the current election or at a sibling for the underlying rate data, so the routing guidance is implicit rather than complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_opening_balancesA
Idempotent

Seed the workspace's opening position as ONE balanced, posted, immutable opening entry (Eröffnungsbilanz), each account carrying exactly one side in integer Rappen. Accounts are named by id or by chart number. If the set does not tie out it is REFUSED with the signed Rappen difference and nothing is written: pass differenceAccount (KMU 9100 Eröffnungsbilanz is the usual one) to book the delta explicitly, because a difference is never plugged silently. asOf defaults to the fiscal-year start. Once the prior year is closed the position is carried from that close and this verb answers carried_forward. An account that already carries a balance on that date is refused with account_already_has_balance, naming what it holds: seeding on top of it would double-count, and a bank opening balance from set_bank_opening_balance is the usual reason. A posted position has no edit path: correct it with a reversing entry (reverse_entry) and a fresh call under a new key, which this verb accepts once the storno has unwound the old position. reference records the Inventar or Beleg the position is traced to, and get_opening_balances reads it back. CONSEQUENCE: Books your opening position as one balanced opening entry for the year. If it is wrong, you correct it with a correcting entry and enter the position again; both stay visible.

NameRequiredDescriptionDefault
asOfNo
linesYes
referenceNo
descriptionNo
workspaceIdYes
idempotencyKeyYes
differenceAccountNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare idempotentHint=true and destructiveHint=false; the description adds the genuinely load-bearing behaviour: the entry is posted and immutable, there is no edit path, differences are never silently plugged, refusals return signed Rappen deltas or named error states (carried_forward, account_already_has_balance) and write nothing. This is consistent with, and richer than, the annotation profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the refusal/recovery logic follows in a sensible order, but the block is dense and long, and the closing 'CONSEQUENCE:' sentence largely restates the immutability and correcting-entry points already made earlier. Heavy capitalisation for emphasis is a small readability cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still tells the agent what comes back (carried_forward, account_already_has_balance, the signed Rappen difference) and where to read the result afterwards via get_opening_balances. For a 7-parameter mutation with zero annotation coverage beyond idempotency, nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does: lines hold one side per account in integer Rappen with accounts named by id or chart number, asOf defaults to fiscal-year start, differenceAccount explains the plug account, reference records the Inventar/Beleg, and the idempotencyKey is implied by 'fresh call under a new key'. Only workspaceId and description go unmentioned, a minor residual gap at 7 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+constraint: seed the workspace's opening position as ONE balanced, posted, immutable opening entry (Eröffnungsbilanz). It distinguishes itself from neighbours by naming set_bank_opening_balance as a different verb and get_opening_balances as the read path, so an agent can separate it from the sibling import/after-preview tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to call it, when it will be refused (does not tie out, account already carries a balance), and what to do instead in each case: pass differenceAccount for the delta, or use reverse_entry plus a fresh call under a new key. It also flags that after the prior year closes the position is carried forward rather than seeded, which prevents a wrong-year invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_qr_auto_applyA
DestructiveIdempotent

Switch the workspace's auto-apply dial for QR matching (P8, default OFF). ON means apply_qr_match may settle WITHOUT a per-call confirmation when, and only when, the live score is 'high' (exact reference, exact amount) for exactly the invoice being applied; every 'medium' and every override still waits for confirmed=true. This verb is deliberately not automatable (D65): a rule that could switch the unattended-money dial on would bypass the human approval the dial exists to record. A repeat call under the same idempotencyKey writes nothing. CONSEQUENCE: Turns automatic settling on or off: when on, a received payment whose reference and amount match exactly settles its invoice with no separate confirmation. You can turn it off at any time.

NameRequiredDescriptionDefault
autoApplyYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses the default state, the exact conditions under which unattended settling occurs, that the verb is deliberately not automatable (D65), that a repeat call under the same idempotencyKey writes nothing (reinforcing idempotentHint), and the full consequence including that it can be turned off at any time. Consistent with destructiveHint=true since it governs money movement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the dial and default, then the conditions, then the consequence. It is dense but every sentence carries operational meaning; internal code references (P8, D65) add minor noise without blocking understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-param mutation toggle with no output schema, the description supplies everything needed: what changes, the exact settlement conditions, idempotency behavior, non-automatability, and reversibility.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It gives real meaning to autoApply (ON/OFF behavior) and idempotencyKey (repeat call writes nothing); workspaceId is left implicit but is self-evident from the name and body.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (set/switch) and resource (the workspace's QR auto-apply dial) with an explicit default (OFF) and scope. The agent knows exactly what this changes and how it relates to the QR matching siblings (apply_qr_match, override_qr_match).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains precisely when ON takes effect (only 'high' score: exact reference and exact amount for the exact invoice) and when it does not (every 'medium' and every override still needs confirmed=true), naming the affected sibling verbs. It lacks an explicit 'use this instead of X' exclusion statement, keeping it just below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_roleA
DestructiveIdempotent

Change a member's role. It takes effect on their next call: nothing caches a capability resolution. Demoting the only remaining owner is refused (last_owner). CONSEQUENCE: Changes what this member may see and do, from their next step on. You can change it again at any time.

NameRequiredDescriptionDefault
roleYes
memberIdYes
workspaceIdYes

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the idempotent/destructive annotations: it discloses that the change applies on the member's next call because capability resolution is not cached, that the last-owner demotion is rejected with a named error, that the change alters what the member may see and do, and that it is reversible. These are exactly the traits an agent needs before mutating permissions, and they are consistent with destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then effect timing, refusal rule, consequence, and reversibility, with no filler. The 'next call / next step' timing is stated twice, a small redundancy that keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behavior is well covered for a permission mutation and no output schema exists, so nothing about return values is required. However, with 0% parameter coverage and no annotation about authorization, the description omits who may call this and what role values are legal, which an agent must know to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the schema only declares three untyped-role string fields, yet the description adds no parameter detail: it never says what role values are valid, how memberId is obtained, or what workspaceId scopes. With the schema carrying no semantics, the description should compensate and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Change a member's role'), which is clear enough to distinguish from role-definition tools. It never names a sibling such as define_role or archive_role, so an agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an implicit when (changing an existing member's role) and one explicit when-not (demoting the last owner is refused with last_owner). It names no alternative tool and states no prerequisites, leaving the agent to infer the comparison with define_role and revoke_member.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_getA
Read-only

Read one workspace setting by key: the value in force, the default, whether it is overridden, who changed it and when. An unknown key is refused unknown_setting.

NameRequiredDescriptionDefault
keyYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes safety, and the description adds useful behavior beyond it: it names the returned fields (effective value, default, override status, changer, timestamp) and specifies that an unknown key is refused as unknown_setting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the operation and followed by the meaningful return details and error case. There is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read, the description covers purpose, returned information, and one error case. However, with no output schema and 0% schema description coverage, the lack of parameter detail for workspaceId and key format leaves a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It clarifies that 'key' identifies a workspace setting, but it does not explain workspaceId semantics or the expected key format, leaving half of the required parameters under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: read one workspace setting by key. It also scopes the operation to a single setting and lists the meaningful return fields, which distinguishes it from settings_list and settings_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'one workspace setting by key' and the unknown-key error behavior, but the description does not explicitly state when to use this instead of settings_list or when a setting should be changed via settings_set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_listA
Read-only

List every workspace setting (Einstellungen) from the registry: its key, the value in force, the default, whether this workspace overrides it (stale: true with ignoredStoredValue when a stored override no longer fits and the default applies), the value schema (type and bounds), the capability needed to change it, the dial family a change drafts under, and an en and de-CH label and description. A setting with no override reads its default.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered, and the description adds real value beyond them: the stale/ignoredStoredValue semantics, the fact that a no-override setting reflects its default, and that each setting carries the capability required to change it. It stops short of stating ordering, pagination, or size of the result set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the action and then enumerates returned fields in a readable order. Every clause carries information, though the parenthetical about stale/ignoredStoredValue is packed tightly enough to need re-reading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the whole burden of describing the return shape and does so field by field, including the tricky stale-override case. Combined with readOnlyHint, an agent has what it needs to call and interpret this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One parameter (workspaceId) with 0% schema description coverage, and the description never addresses it directly – the workspace scope is only implied by 'workspace setting' and 'this workspace overrides it'. Format or validation of the id is not given, so the description only partially compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: list every workspace setting from the registry, and enumerates the fields returned. An agent can distinguish it from settings_get/settings_set by the word 'every', but the description never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: it is clearly the bulk-read tool for settings, versus settings_get (single) and settings_set/reset (mutation) among the siblings. There is no explicit 'use this when...' or 'do not use for...' statement, and no mention of prefs_list as the preference counterpart.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_resetA
DestructiveIdempotent

Return one workspace setting to its default by removing this workspace's override. reason is required (reason_required when missing or blank) and recorded with the old value in the setting's history and on the audit trail. A setting without an override is left as it is. A Belegnummer setting whose default could hand out a voucher number that already exists is refused (belegnummer_display_clash). The way back is settings_set to the previous value. CONSEQUENCE: Returns a workspace setting to its default for everyone here from the next action on; nothing already booked or sent changes. The removed value stays in its history, so you can set it again.

NameRequiredDescriptionDefault
keyYes
reasonNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond idempotentHint/destructiveHint by naming the error codes an agent must handle (reason_required, belegnummer_display_clash), disclosing that the old value is written to history and the audit trail, that the effect applies to all workspace users from the next action, and that nothing already booked or sent is affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then prerequisites, edge cases, and consequences in a readable order. Mild redundancy: the revertibility idea appears twice ('The way back is settings_set...' and 'The removed value stays in its history, so you can set it again'), and CONSEQUENCE restates the opening sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation with no output schema, this covers errors, side effects, audit/history, scope, and the reversal path. The remaining gap is that it never says what the call returns (e.g. the removed default), which matters absent an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It fully explains `reason` (required, blank rejected via reason_required, recorded in history) and implies `key` ('one workspace setting'), but says nothing about workspaceId or idempotencyKey semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: removes this workspace's override so one setting returns to its default. Scope ('one workspace setting') is precise and the paired tool settings_set is named. It does not, however, differentiate itself from the analogous prefs_reset or explain why one would reset a workspace setting rather than a preference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete no-op condition ('A setting without an override is left as it is') and the undo path ('The way back is settings_set to the previous value'), which tells the agent what to do instead when relevant. It stops short of telling the agent to inspect settings_list/settings_get first to find which settings have overrides.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_setA
DestructiveIdempotent

Change one workspace setting. value must fit the key's schema exactly (invalid_setting_value otherwise; an unknown key is unknown_setting), reason is required (a missing or blank reason is reason_required on every face) and recorded with the old and new value in the setting's history and on the audit trail. Needs the capability that owns the key. A Belegnummer setting is also refused when ledger.belegnummer_prefix is not empty or 1 to 12 characters from A-Z a-z 0-9 . _ / - starting with a letter or digit and not ending in a digit (belegnummer_prefix_invalid), and when the change could hand out a voucher number that already exists (belegnummer_display_clash, naming it). Setting the value already in force changes nothing. The way back is settings_set to the previous value or settings_reset. CONSEQUENCE: Changes a workspace setting for everyone here from the next action on; nothing already booked or sent changes. The old value stays in its history, so you can set it back or reset it at any time.

NameRequiredDescriptionDefault
keyYes
valueYes
reasonNo
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare idempotentHint=true and destructiveHint=true, and the description adds substantial context beyond that: audit/history recording, required capability, exact error outcomes, special Belegnummer refusal rules, global workspace consequence, and reversibility. The details are consistent with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and organized around errors, consequence, and undo. It is long but mostly earns its length, though the reversibility point is repeated in slightly different words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It covers behavior, error conditions, prerequisites, consequences, and reversibility well for a complex mutation. However, for a five-parameter tool with no schema descriptions, it omits workspaceId and idempotencyKey semantics and conflicts with the schema on whether reason is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains key, value, and reason and gives error codes, but never defines workspaceId or idempotencyKey. It also states reason is required while the schema lists it as optional, creating ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Change one workspace setting', scoped to one setting. Error cues and the mention of settings_reset make its role clear against sibling settings tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Makes clear it is used to change a setting and names settings_reset as the undo alternative, including same-value no-op behavior. It does not explicitly contrast with settings_get or settings_list, but the use case is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_vat_methodA
DestructiveIdempotent

Set the VAT method (effektiv/saldo) and accounting timing (soll/ist). CONSEQUENCE: Changes how MWST is worked out for your returns: effective or net tax rate method, agreed or received payments. You can set it back, but the earlier setting is not kept.

NameRequiredDescriptionDefault
vatMethodYes
workspaceIdYes
vatAccountingYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true; the description adds real value by explaining what 'destructive' means here – it changes how MWST is computed on returns – and states that the prior setting is not retained, so reverting is possible but history is lost. It does not cover permissions or whether already-filed returns are affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then a labelled CONSEQUENCE block. Slightly redundant in restating effektiv/saldo as 'effective or net tax rate method' and soll/ist as 'agreed or received payments', but the translation aids correctness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 0% schema coverage and no output schema, the description supplies the crucial value vocabulary and the irreversibility note, but leaves open whether the change applies retroactively to open VAT periods and how it differs from vat_configure/vat_seed_defaults. Adequate for a minimal call, incomplete for confident tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the parameters are plain untyped strings with no enums, so the description is the only source of valid values: vatMethod = effektiv/saldo and vatAccounting = soll/ist. workspaceId is not explained but is self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb (Set) plus two named resources (VAT method and accounting timing), with the concrete option vocabulary effektiv/saldo and soll/ist. It is clearly narrower than the generic vat_configure sibling, though it never names that sibling to draw the boundary explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies you'd call it when configuring VAT, but gives no explicit when-to-use, no prerequisites, and no alternatives – notable in a workspace that also exposes vat_configure, vat_config, and vat_seed_defaults.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_write_off_thresholdA
DestructiveIdempotent

Set the residual below which the Studio may offer a one-click Ausbuchung, in Rappen (default CHF 1.00). It governs the offer only: a larger write-off stays recordable when it is stated deliberately. This is a product setting and not a rounding rule. CONSEQUENCE: Sets the leftover amount below which the Studio offers a one-click write-off of an open item. Larger write-offs stay possible when stated deliberately; you can change the amount again.

NameRequiredDescriptionDefault
workspaceIdYes
idempotencyKeyYes
thresholdMinorYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the idempotent/destructive annotations by clarifying scope of impact: it governs the offer only, larger write-offs stay deliberately recordable, and the amount is re-changeable. That is real context about what the change does and does not disable. It does not state whether permissions are required or how the current value is read before changing it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the qualifying caveats are useful, but the CONSEQUENCE block largely restates the opening sentence ('Sets the leftover amount below which...' duplicates 'Set the residual below which...'). Some redundancy could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple settings-mutation tool the description covers the hard parts: effect scope, reversibility, units and default. With no output schema and no per-parameter schema docs, it leaves gaps on workspaceId scoping, idempotencyKey behavior, and the response, which an agent would need to resolve elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the burden. It meaningfully defines the key parameter by giving the unit in Rappen and the default CHF 1.00, which the schema does not convey. However, workspaceId and idempotencyKey are left entirely undocumented, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a concrete verb+resource (set the write-off threshold) and states the effect precisely: it sets the residual below which the Studio offers a one-click write-off of an open item. It distinguishes itself from a rounding rule and from actual write-off postings, but doesn't route against sibling settings tools like settings_set or set_fiscal_config.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: configure a product setting that controls when the one-click offer appears, with the reassurance that it can be changed again. There is no explicit when-to-use/when-not or named alternative among the many other setter tools, so the agent must infer that this is the correct tool for the write-off-offer policy.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_requests_completeA
Destructive

Markiere als signiert und lege die signierte Fassung ab: verifies originalSha256 against the requested file version (document_hash_mismatch on a swapped file), then delegates to E00 files_new_version so the signed PDF becomes a new version of the SAME file (supersedes_id, retention carried forward per OR 958f). Legal from draft (the manual wet-ink path when no provider is wired), sent and viewed (the provider path). E01 never writes file bytes itself. CONSEQUENCE: Files the signed copy as a new version of the document and marks the request signed; the unsigned version stays kept. A signed request cannot be reopened.

NameRequiredDescriptionDefault
mimeNo
workspaceIdYes
signRequestIdYes
idempotencyKeyNo
originalSha256Yes
signedContentBase64Yes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry destructiveHint=true; the description adds the substantive consequences: the unsigned version stays kept, retention is carried forward per OR 958f, supersedes_id linkage is created, and the state becomes terminal. It also discloses the integrity gate (originalSha256 verified against the requested file version, returning document_hash_mismatch on a swapped file), which is exactly the kind of pre-condition an agent needs before a destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the action and the hash check come first, the CONSEQUENCE block is clearly demarcated. Minor waste from cryptic internal codes (E00, E01, OR 958f) and a mixed German/English lead-in, though the legal reference does carry meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, terminal-state mutation with no output schema and 0% schema coverage, the description supplies the state preconditions, the integrity check and its failure mode, the downstream effect on file versions and retention, and irreversibility. An agent can call this correctly and predict the side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it only does so for originalSha256 (verified against the requested file version, with a named error code). signedContentBase64, mime, idempotencyKey, workspaceId and signRequestId get no explanation, leaving the idempotency and content-encoding semantics — the risky ones for a write — undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific compound action: mark the sign request as signed and file the signed rendition as a new version of the SAME file, explicitly delegating to files_new_version rather than writing bytes itself. That delegation note distinguishes it cleanly from the file-version siblings in the tool list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the exact request states it is legal from — draft (manual wet-ink path when no provider is wired) and sent/viewed (provider path) — plus the hard exclusion that a signed request cannot be reopened. It does not name sibling alternatives such as sign_requests_record_event or sign_requests_withdraw, so it stops just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_requests_createA
Destructive

Fordere eine Signatur an: creates a draft sign request on an E00 file (fileId, the current head version) for one signer (signerContactId, must carry an email), at a signature level (ses or qes, the ZertES/OR Art. 14 classification), with an optional message and expiry. Writes the provider-agnostic local artifact (OP4); nothing is transmitted. One open request per signer and file (request_already_open); a superseded file version is refused (not_head_version).

NameRequiredDescriptionDefault
fileIdYes
messageNo
expiresAtNo
workspaceIdYes
idempotencyKeyNo
signatureLevelYes
signerContactIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description discloses important behavior: it writes a provider-agnostic local artifact, nothing is sent, only the current head version is accepted, and specific business-rule failures such as request_already_open and not_head_version occur. This is substantial context for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense but efficient paragraph front-loaded with the core action. Every sentence contributes scope, constraints, or behavioral context, and there is little wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, minimal annotations, and zero schema descriptions, it covers the essential purpose, write behavior, constraints, and most key parameters. It stops short of explaining workspaceId, idempotencyKey, or the return value, but it is otherwise sufficient to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains fileId as the current head version, signerContactId as requiring an email, signatureLevel as ses/qes with legal classification, and message/expiry as optional, though workspaceId and idempotencyKey are left undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: creating a draft sign request for an E00 file for one signer at a given signature level. It clearly distinguishes this from sending because it explicitly says nothing is transmitted, and the sibling sign_requests_send exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context that this creates a local draft and does not transmit anything, implying it is a precursor to sending. It also names two operational exclusions, one open request per signer/file and refusal of superseded file versions, but it does not explicitly name an alternative tool to use for transmission.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_requests_delete_draftA
Destructive

Verwirf einen Signatur-Entwurf: deletes a draft request that never went anywhere. Only a draft may be deleted (invalid_transition otherwise); sent and later states are withdrawn or completed, never erased, because their event trail is evidence. CONSEQUENCE: Deletes the unsent signature request draft for good; nothing went out. You can start a new request.

NameRequiredDescriptionDefault
workspaceIdYes
signRequestIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

destructiveHint=true already flags the mutation, but the description adds real value on top: the deletion is permanent ('for good'), no signature ever left the system, misuse yields invalid_transition, and the rationale (event trail is evidence) explains why later states can't be erased. It stops short of covering idempotency or permission requirements, which matters for a destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core constraint is front-loaded, which is good, but the bilingual opening ('Verwirf einen Signatur-Entwurf: deletes a draft request...') adds noise, and the CONSEQUENCE sentence repeats what the first sentence already said ('never went anywhere' vs 'nothing went out'). Roughly a third of the text is restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description covers state eligibility, error behavior, permanence, and a next step, which is most of what an agent needs. The remaining hole is parameter-level behavior (idempotencyKey semantics, workspace scoping), which is undocumented in both schema and description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters, and the description never mentions workspaceId, signRequestId, or idempotencyKey. For a destructive operation, leaving idempotencyKey completely unexplained (is retry safe? is the key reused or generated per attempt?) is a meaningful gap the description should have filled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('deletes a draft signature request') and immediately bounds the scope ('only a draft', 'never went anywhere'). It explicitly contrasts with the sibling actions sign_requests_withdraw and sign_requests_complete, so an agent can pick it out of the sign_requests_* family without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a hard precondition ('Only a draft may be deleted, invalid_transition otherwise') and names the correct alternatives for other states ('sent and later states are withdrawn or completed'). Both the when and the when-not are stated explicitly, with the sibling verbs to use instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_requests_getB
Read-only

Eine Signaturanfrage mit ihrem lokalen Artefakt (the OP4 envelope incl. the event trail). Reading an overdue open request persists its expiry first (lazy sweep, no background daemon in the OSS core).

NameRequiredDescriptionDefault
workspaceIdYes
signRequestIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already marks it as read-only, but the description adds valuable behavioral context: reading an overdue open request triggers a lazy sweep that persists its expiry, and notes there is no background daemon in the OSS core. This goes beyond what annotations provide and sets correct expectations about side effects despite the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The main purpose is front-loaded and the important behavioral caveat about the lazy sweep is included. The German/English mix is slightly awkward but does not waste words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter get operation with a readOnly annotation, the description is close to sufficient. It lacks any indication of the return structure (the OP4 envelope and event trail are named but not described), and the parameter semantics are left entirely to the schema. The behavioral note is useful but the description still relies on the tool name for most of the meaning.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain what workspaceId or signRequestId mean beyond their obvious names. For a get-by-id operation these parameter names are fairly self-explanatory, but the description adds no detail about formats, required scoping, or how they relate to the returned artifact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('Signaturanfrage' / sign request) and the specific verb ('get' / reading), and mentions it returns the local artifact including the OP4 envelope and event trail. It is reasonably distinct from sibling sign_requests_* tools, though the mixed German/English wording ('Signaturanfrage' with English parenthetical) adds some ambiguity about what exactly is returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains a specific side effect when reading an overdue open request (lazy sweep persists expiry first), which serves as an implicit warning about when to use this tool. It does not explicitly state when to choose this over sign_requests_list or sign_requests_create, nor does it provide exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_requests_listA
Read-only

Die Signaturanfragen-Liste (P5): filterable by file (the per-file list in the drawer), status (the "Offene Signaturen" tracking filter) or signer. savedViewId applies a saved view (G00): its stored filters merge underneath any filter named explicitly here. Listing persists overdue expiries first (lazy sweep).

NameRequiredDescriptionDefault
fileIdNo
statusNo
savedViewIdNo
workspaceIdYes
signerContactIdNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only readOnlyHint=trueassword, and the description adds meaningful behavioral context: it states that listing 'persists overdue expiries first (lazy sweep)' and explains how savedViewId merges filters underneath explicit filters. These are non-obvious behaviors not inferable from the schema or annotations, and they do not contradict the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with focused details. It front-loads the core purpose and then adds necessary filter and ordering caveats. The parenthetical references (P5, G00) add a slight layer of internal jargon but do not bloat the text. Every sentence contributes information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with 5 parameters and no output schema, the description covers filtering and ordering behavior but lacks information about pagination, response format, or whether all signature requests are returned or limited. The absence of an output schema increases the need to describe return payloads onthere, which is not addressed. Still, the core filtering and saved-view semantics are well-covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description bears the burden of explaining parameters. It explains the semantics of 'file' (per-file list in the drawer), 'status' (the 'Offene Signaturen' tracking filter), 'signer', and 'savedViewId' (merging behavior). It omits 'workspaceId', but that is a common required parameter with obvious meaning, so the description compensates adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states this is 'Die Signaturanfragen-Liste' (the signature request list) and enumerates filter dimensions (file, status, signer). This is a clear verb+resource statement. It does not explicitly name a sibling to differentiate from, but the function name and filter description make 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool vs. alternatives like sign_requests_get or search_global. The context about saved views and filters implies usage scenarios, but there is no explicit 'use this when...' or 'instead of...' statement. An agent would have to infer the tool's role from its name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_requests_record_eventA

Erfasse ein Statusereignis auf einer Signaturanfrage: viewed (sent -> viewed; recording viewed twice is a no-op), declined (sent|viewed -> declined, with optional declinedReason: also the manual "Als abgelehnt markieren" in the drawer), or expired (sent|viewed -> expired, a provider deadline event). Optional evidence is appended to the event trail of the local artifact. Every illegal edge answers invalid_transition.

NameRequiredDescriptionDefault
statusYes
evidenceNo
workspaceIdYes
signRequestIdYes
declinedReasonNo
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the sparse annotation: duplicate viewed is a no-op, illegal edges return invalid_transition, evidence is appended to the local event trail, and declinedReason is optional. This is strong disclosure for a mutation tool whose annotations only set destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the state-machine details are useful, not filler. The single dense sentence with nested parentheses is slightly hard to scan but remains appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation with no output schema and minimal annotations, the description covers the core state transitions, error behavior, and evidence handling well. It still omits the success response shape and idempotencyKey behavior, which keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description has to carry parameter meaning. It explains the key status values, optional declinedReason, and optional evidence, but does not clarify workspaceId, signRequestId, or idempotencyKey semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: record a status event on a signature request. The listed event types (viewed, declined, expired) make the tool distinguishable from neighboring signature-request actions, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context by enumerating the allowed event types and their legal source states. It does not explicitly name alternatives such as complete or withdraw, but the status constraints make the intended usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_requests_sendA
Destructive

Sende die Signaturanfrage an den Anbieter: the ONE outbound e-sign verb (draft -> sent). P8 confirm-gated (needs_confirmation without confirmed true, for humans and agents alike), and honest about the OP4 boundary: with no e-sign provider wired (the OSS-core default) it returns needs_provider with the local artifact and the request stays a draft, for the manual wet-ink path via sign_requests_complete. CONSEQUENCE: Sends the document to the e-signing service for signature; with no service connected, nothing leaves and it stays a draft. What was sent can't be called back; you can still withdraw the request.

NameRequiredDescriptionDefault
confirmedNo
workspaceIdYes
signRequestIdYes
idempotencyKeyNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true, so the description carries the real burden and does: confirm-gating applies to agents and humans alike, the OSS-core default returns needs_provider without sending anything, the record remains a draft, and the send is irreversible ('what was sent can't be called back') while withdrawal is still possible. That is the exact context an agent needs before invoking a destructive verb.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the draft->sent transition, and most sentences carry real information. It loses a point for redundancy ('CONSEQUENCE' restates the no-provider outcome already described) and for opaque internal tokens (P8, OP4) that consume space without informing the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only a destructive hint for annotations, the description still covers confirmation gating, the degraded no-provider path and its return signal (needs_provider), irreversibility, and the alternative tools. Nothing an agent needs in order to decide or call safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate; it does explain the critical `confirmed` flag (needs_confirmation unless confirmed true) but says nothing about `idempotencyKey` or the roles of workspaceId/signRequestId. Partial compensation for a 4-parameter schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — send the signature request to the provider — and pins the state transition (draft -> sent). It explicitly positions itself as 'the ONE outbound e-sign verb' and names sign_requests_complete as the manual wet-ink alternative, so it is distinguishable from all sign_requests_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit about when to use it (outbound e-sign), when it is blocked (needs_confirmation without confirmed=true), what happens when no provider is wired (needs_provider, stays draft, use sign_requests_complete), and what the fallback to sign_requests_withdraw is. Alternatives and exclusions are named, not implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_requests_withdrawA

Ziehe eine gesendete Signaturanfrage zurück: sent|viewed -> expired with expired_reason withdrawn (no seventh status is minted, §H-ENUM stays six states). A draft is not withdrawn but discarded via sign_requests_delete_draft; a terminal request answers invalid_transition.

NameRequiredDescriptionDefault
workspaceIdYes
signRequestIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the destructiveHint=false annotation by disclosing the status transition, the expired_reason value, the six-state enum constraint, draft handling, and terminal-request behavior. It does not explain idempotency handling or authorization requirements, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description front-loads the action and transition, then adds the alternative and invalid-state behavior. Every sentence contributes useful routing or behavioral information, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple state-changing mutation with no output schema, the description covers the critical preconditions, resulting status, alternative tool for drafts, and terminal-state error. It could be more complete by addressing idempotencyKey behavior or what a successful response represents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three parameters, so the description must carry parameter meaning. It identifies the target as a sent signature request and implies the relevant signRequestId state, but says nothing about workspaceId or idempotencyKey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: withdraw a sent signature request. It also defines the exact state transition sent|viewed -> expired with expired_reason withdrawn, so the agent can distinguish this from unrelated signature-request actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly limits use to requests in sent or viewed state. It also names the alternative for drafts, sign_requests_delete_draft, and states that terminal requests return invalid_transition, 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.

stock_location_upsertA
Idempotent

Create or edit a stock location (Lagerort). Pass locationId to edit, omit it to create. type is an organisational tag only (warehouse/store/...), never a valuation input.

NameRequiredDescriptionDefault
nameNo
typeNo
archivedNo
locationIdNo
workspaceIdYes
idempotencyKeyYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that with the semantic warning that 'type' is an organisational tag only and never a valuation input — a business rule that would otherwise be invisible. It does not explain the required idempotencyKey or what the call returns, but on a mutation tool with annotation coverage this is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, with the core create-or-edit distinction front-loaded immediately after the purpose statement. Every sentence carries non-obvious information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description need not describe return values, and the two biggest semantic traps (mode selection and the meaning of `type`) are covered. Still, for a 6-parameter mutation tool with 0% schema coverage, the unexplained idempotencyKey requirement and archived-flag behaviour leave gaps an agent could stumble on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 6 parameters, so the description carries the burden and only covers two of them: locationId (mode switch) and type (business meaning). name, archived, workspaceId and the required idempotencyKey go entirely unexplained, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-plus-resource ('Create or edit a stock location (Lagerort)') and clarifies the upsert semantics (create vs. edit) plus a domain gloss for the German term. It is clear on its own, but it never addresses the existence of the closely related siblings location_create/location_update, so the agent cannot tell from the description why it should pick this upsert over those.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'Pass locationId to edit, omit it to create' gives concrete mode-selection guidance, which is genuinely useful. However, no when-to-use/when-not-to-use context against the overlapping create/update location tools is given, and prerequisites (e.g. that a workspaceId is mandatory) are left implicit in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stock_low_stockB
Read-only

The stock-tracked items whose total on-hand is at or below their D00 reorder point. Empty is not an error.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already marks this as a safe read operation. The description adds useful behavioral context beyond that: the result set is based on stock-tracked items and a specific reorder threshold, and an empty result is a valid outcome, not an error. This helps an agent avoid misinterpreting a successful empty list as a failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is a single compact sentence. It front-loads the core selection criterion and ends with a valuable interpretive note about empty results. Every word contributes meaningful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one required parameter, the description covers the essential selection logic and the meaningful empty-result behavior. It does not describe the response shape, but with no output schema present, this is a minor gap. Some potential overlap with sibling low-stock tools is not addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has only workspaceId with no description, and the description text does not mention workspaceId at all. With 0% schema description coverage, the description should compensate but offers no parameter-level meaning, leaving the agent to infer that workspaceId identifies the workspace context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific resource and filter condition: stock-tracked items whose total on-hand is at or below their D00 reorder point. It reads as a noun phrase rather than an explicit imperative like 'List' or 'Retrieve,' but the intent is unambiguous. It does not differentiate from the closely named sibling inventory_low_stock, so it loses the last point.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as inventory_low_stock, inventory_reorder_candidates, or stock_on_hand. The statement 'Empty is not an error' hints at how to interpret results but provides no selection context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stock_moveA
Idempotent

Record a stock movement (Bewegung). reason is one of receipt|issue|adjust|transfer|return: receipt/return add, issue subtracts, adjust keeps the signed qty (a stocktake shrink is negative), transfer writes a paired issue+receipt across two locations (pass toLocationId). qty is a non-zero integer. A move that would drive on-hand negative is refused with insufficient_stock unless allowNegative is set. Never posts to the ledger (OP2). CONSEQUENCE: Records a stock movement for the item; nothing is booked to the ledger. A wrong movement is corrected with an opposite one, and both stay on record.

NameRequiredDescriptionDefault
qtyYes
refIdNo
itemIdYes
reasonYes
movedAtNo
refKindNo
locationIdYes
workspaceIdYes
toLocationIdNo
allowNegativeNo
unitCostMinorNo
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (idempotentHint, destructiveHint=false), the description delivers real behavioral context: it refuses negative on-hand with insufficient_stock unless allowNegative is set, never posts to the ledger, and states that corrections are made with an opposite movement while both stay on record — which corroborates the non-destructive annotation. It omits any mention of idempotencyKey semantics, which is a required parameter and the very thing idempotentHint advertises.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The paragraph is front-loaded with the verb and the reason taxonomy, and most sentences carry unique information. There is avoidable redundancy: 'Never posts to the ledger (OP2)' is restated in full by the CONSEQUENCE sentence, and the 'Records a stock movement' framing is repeated three times.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation with no output schema and only two annotations, the description covers the interesting behavioural edges well but leaves the identity/audit parameters (idempotencyKey, refId, refKind, movedAt, unitCostMinor) undocumented anywhere. An agent could call it correctly for a simple receipt/issue but would be guessing on retry-safety and cost/backdating fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It adds strong semantics for reason (all five values and their effects), qty (non-zero integer), toLocationId and allowNegative. But seven of twelve parameters — workspaceId, itemId, locationId, idempotencyKey, refId/refKind, movedAt, unitCostMinor — get no explanation at all, which is a substantial remaining gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Record a stock movement") and defines the operation's scope through the reason taxonomy. It does not, however, distinguish itself from close siblings such as inventory_move, inventory_transfer, inventory_adjust, or inventory_stocktake_commit, which all sound like they touch the same stock ledger — an agent cannot tell from this text alone which one to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied through the reason mapping (transfer requires toLocationId, adjust keeps the signed qty, stocktake shrink is negative), which gives useful situational cues. There is no explicit 'use this instead of X' guidance and no stated prerequisites (permissions, period locks) despite a crowded sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stock_on_handA
Read-only

On-hand per item x location (a P5 read model = the signed sum of stock movements), plus the location and stock-tracked-item pickers. Filter by itemId, locationId, or asOf (inclusive).

NameRequiredDescriptionDefault
asOfNo
itemIdNo
locationIdNo
savedViewIdNo
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already discloses that this is a safe read operation; the description goes beyond that by explaining that the value is a derived read model – the signed sum of stock movements – and that the asOf filter is inclusive. This adds meaningful behavioral context about the computation and filter semantics without contradicting the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core function and definition, and then lists the filters. Every clause adds information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query with five parameters and no output schema, the description covers the essential purpose and the main filter semantics, but it leaves savedViewId unexplained and does not describe the response structure beyond mentioning that pickers are included. Given the tool's modest complexity, this is an adequate but not complete description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for the schema's silence. It usefully explains itemId, locationId, and asOf (including that asOf is inclusive), but it leaves workspaceId implied and does not mention savedViewId at all, so two of the five parameters still lack semantic guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the tool as returning on-hand stock per item and location, and explicitly defines the read model as the signed sum of stock movements. It includes extra context about pickers and filters, but it does not explicitly name a sibling tool to differentiate it, so the agent must infer its niche among many inventory tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that the tool can be filtered by itemId, locationId, or asOf, and notes the inclusive asOf semantics. However, it gives no explicit guidance about when to prefer this tool over related siblings such as inventory_balance_by_location, and it does not name any alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stock_run_valuationA
DestructiveIdempotent

Run the period-end inventory valuation (Bestandesbewertung): computes the full inventory value at asOf by method (fifo|weighted_avg) and records a valuation run row with the figure and the delta against D01 own last run. REPORT-ONLY (K68): it posts NO journal entry. J06 inventory_valuation_post is the sole path inventory value reaches the books (Dr 1200 / Cr 4200); running this verb never touches the ledger, so it cannot double the Vorräte asset. A locked period is refused with period_locked before the run row is written; a re-run at the same asOf supersedes the prior run row (never edits it). Idempotent on idempotencyKey. CONSEQUENCE: Works out the inventory value on the date and records it as a valuation run; nothing is booked to the ledger. The run stays on record for good; a new run on the same date supersedes it.

NameRequiredDescriptionDefault
asOfYes
methodYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotent/destructive annotations, the description discloses that no journal entry is posted, that a locked period is refused with period_locked before the run row is written, that a same-date re-run supersedes rather than edits the prior run, and that the run stays on record. That is real behavioral context not available from annotations alone; minor tension with destructiveHint is explained by the supersede semantics rather than contradicted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is strong and front-loaded, but the description repeats itself: the REPORT-ONLY paragraph and the CONSEQUENCE paragraph both restate that nothing is booked and that the run remains on record. Internal codes (K68, D01, Vorräte) are also used without definition, adding noise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating run-creation tool with no output schema and four required parameters, the description covers the critical behaviors: no ledger impact, lock refusal, supersede-on-rerun, and idempotency. What remains missing is return/result information and the meaning of workspaceId plus asOf format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It usefully adds the method enum values (fifo|weighted_avg) and ties asOf and idempotencyKey to observable behavior, but it never explains workspaceId and gives no format for asOf, leaving a meaningful gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Run the period-end inventory valuation (Bestandesbewertung)' and states exactly what it computes (full inventory value at asOf by method) and what it records (a valuation run row with figure and delta). It explicitly names sibling J06 inventory_valuation_post and distinguishes this verb from it, so an agent can tell them apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly frames this as a report-only path and states that J06 inventory_valuation_post is the sole route to the ledger, which implicitly tells the agent when to use this versus the posting tool. The exclusion is solid, but it does not explicitly address other siblings like inventory_valuation_preview or inventory_valuation_list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stock_stocktake_commitA
DestructiveIdempotent

Commit an Inventur: posts every difference in one batch, each minting a stock movement through the same movement path (reason:adjust, moved_at=frozenAt, ref_kind:stocktake), and seals the session as the committed Bestandesnachweis (OR 958c Abs. 2). No ledger reach: any financial effect arrives later through stock_run_valuation. Refused with uncounted_lines if any line is not counted; idempotent, differences never post twice. CONSEQUENCE: Books each counted difference as a stock adjustment on the count date and seals the count for good as your inventory record; nothing goes to the ledger. It can't be reopened; later stock errors get a new adjustment.

NameRequiredDescriptionDefault
sessionIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say idempotentHint=true and destructiveHint=true; the description adds critical context: the exact movement records created, the refusal error code, idempotency semantics ('differences never post twice'), no ledger impact, and irreversibility ('can't be reopened'). The 'CONSEQUENCE' block spells out destruction/commitment scope precisely, matching the destructiveHint rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the operation and its record shape, and every sentence carries substantive information. There is some redundancy between the opening ('seals the session') and the CONSEQUENCE block ('seals the count for good'), and the jargon density (frozenAt, ref_kind, OR 958c Abs. 2) slows parsing, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, irreversible mutation with no output schema and undocumented parameters, the description covers effects, side effects (none to ledger), failure mode, and rollback impossibility. The only real gap is per-parameter guidance, which the 0% schema coverage leaves unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for all three parameters, so the description must carry the load; it partially does by explaining what the session becomes when sealed and what idempotency means (no double posting), plus the frozenAt count date. But it never explains the role or format of sessionId, workspaceId, or idempotencyKey individually, leaving the agent to infer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource (commit an Inventur / stocktake session) and describes exactly what is produced: a batched stock movement per difference with reason:adjust, moved_at=frozenAt, ref_kind:stocktake, and a sealed Bestandesnachweis. It also pinpoints what it is NOT (no ledger reach), so an agent knows this is a stock-only operation even though the near-twin sibling inventory_stocktake_commit is left unaddressed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear operating condition ('refused with uncounted_lines if any line is not counted'), which tells the agent to count all lines first, and points to stock_run_valuation for the financial follow-up plus a new adjustment for later stock errors. It stops short of explicitly naming the sibling alternative (e.g. when to use inventory_stocktake_commit vs this one) or stating exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stock_stocktake_countA
DestructiveIdempotent

Record the counted qty on one stocktake line (item x location). Only while the session is open. Setting counted to the book qty is how a line is confirmed unchanged.

NameRequiredDescriptionDefault
itemIdYes
sessionIdYes
countedQtyYes
locationIdYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered without the description. The description adds real domain context (session must be open, book-qty convention to confirm), but it never explains what 'destructive' means here — whether a re-count overwrites a prior value, and whether the write is reversible before commit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, followed by the constraint and then the domain tip. No filler, and each sentence adds information the agent cannot get from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-line write with five required identifiers and no output schema, the definition covers the action, the precondition and the confirmation idiom, which is enough to call it correctly. Missing only what the call returns and how errors surface when the session is closed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across five required parameters, so the description must carry the load. It meaningfully clarifies countedQty, itemId and locationId (the item x location grain), but workspaceId and sessionId are only obliquely implied, and nothing states the unit or whether countedQty may be fractional or negative.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource plus the grain of the operation ('Record the counted qty on one stocktake line (item x location)'), which lets an agent tell it apart from session-level tools like stock_stocktake_open or stock_stocktake_commit. It does not, however, distinguish itself from the near-identical sibling inventory_stocktake_count, leaving a real ambiguity unresolved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Only while the session is open' states an explicit precondition, and the note about setting counted to the book qty to confirm a line unchanged is a genuine usage convention rather than a restatement. There is still no explicit pointer to the commit/approve siblings, so the agent must infer the next step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stock_stocktake_openC
DestructiveIdempotent

Open an Inventur (physical stocktake): snapshots book qty per item x location as of frozenAt (the balance-sheet date) into a session, optionally scoped to one location. The frozen book qty is the on-hand read model captured at that instant.

NameRequiredDescriptionDefault
frozenAtYes
locationIdNo
workspaceIdYes
idempotencyKeyYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare destructiveHint=true and idempotentHint=true, but the description does not explain what destructive state change occurs when opening a stocktake, whether existing sessions are affected, or how the required idempotencyKey governs repeated calls. It adds useful snapshot semantics, but leaves the destructive and idempotency behavior largely undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with the core action and scope front-loaded. The second sentence reinforces what the frozen book quantity represents without wasted preamble.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with four parameters, no output schema, and no parameter descriptions, the definition is incomplete. It omits idempotencyKey semantics, destructive consequences, workspace scoping, and what the resulting session looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains frozenAt as the balance-sheet date and locationId as an optional location scope, but says nothing about workspaceId or the required idempotencyKey, and gives no format details for frozenAt.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Open an Inventur (physical stocktake)' and explains that it snapshots book quantities into a session. This clearly distinguishes its role from counting or committing stocktakes, though it does not explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the tool is used to start a physical stocktake, but gives no explicit guidance on when to use it versus related tools such as inventory_stocktake_create, stock_stocktake_count, or stock_stocktake_commit. No prerequisites, exclusions, or alternative routing are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stock_stocktake_reportC
Read-only

The stocktake diff read model (P5): book vs counted per line with the computed difference, and the uncounted/over/under tallies.

NameRequiredDescriptionDefault
sessionIdYes
savedViewIdNo
workspaceIdYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the read-only nature, so the description does not need to restate that. It adds value by describing the output content (line-level differences and tallies). However, it does not disclose behavioral prerequisites like whether a session must exist or be in a certain state, nor any pagination or filtering behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no fluff; it front-loads the key concept ('stocktake diff read model') and packs useful detail about the data. The 'P5' parenthetical is cryptic and unexplained, but overall the structure is efficient and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema, zero parameter descriptions, and no usage guidance, this description is not sufficient for an agent to confidently call the tool. It does not clarify what a valid session is, what the response shape looks like, or how this report fits into the stocktake workflow. The tool name and readOnly annotation provide some context, but the description leaves too much to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention any parameter. It does not explain what workspaceId, sessionId, or savedViewId refer to in the context of a stocktake report. The agent must guess that sessionId likely identifies a stocktake session, but no explicit semantic mapping is provided, so the description fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource ('stocktake diff read model') and indicates the core content: book vs counted per line with computed differences and uncounted/over/under tallies. It is distinguishable from sibling stocktake tools like stock_stocktake_open or stock_stocktake_commit. However, 'P5' is unexplained jargon and there is no explicit verb (get/report), making the purpose slightly less crisp.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. The description does not state prerequisites (e.g., an open or counted stocktake session) or exclude scenarios where other stocktake report tools would be more appropriate. The agent is left to infer usage context from the tool name and siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stock_valuation_reportA
Read-only

The valuation read model (P5): per-item quantity, unit cost and value at asOf by method, the value already posted to the ledger and the unposted delta, the OR 960c lower-of-cost-or-market flag, a Stetigkeit warning when the method differs from the last run, and the linked committed Inventur (OR 958c Abs. 2 Bestandesnachweis) when one exists at asOf.

NameRequiredDescriptionDefault
asOfYes
methodYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description is consistent. It adds behavioral context beyond the annotation: it is a read model, it computes posted vs unposted delta, it emits a Stetigkeit warning conditionally, and it links a committed Inventur when one exists. This tells the agent the call is side-effect-free and what conditional outputs to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence with no filler. It front-loads the core report contents and then appends the regulatory and warning flags. It is efficient, though the long list of clauses makes it slightly harder to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the report tool has no output schema, the description thoroughly enumerates the report sections and conditional elements. The main gap is parameter semantics: method values, asOf format, and any default behavior are not specified. Still, for a read-only report with rich output, it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for parameter meaning. It clarifies that method determines valuation method and asOf is the valuation date, but it does not specify allowed method values or date format. It adds partial meaning beyond the raw schema, but not enough for a parameter-complete understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it is the valuation read model (P5) for stock. It enumerates exact outputs (quantity, unit cost, value, posted/unposted delta, OR 960c flag, Stetigkeit warning, linked Inventur), which makes it distinguishable from sibling report tools like inventory_valuation_report or stock_run_valuation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: call this tool when you need a valuation report at a given asOf date by method, including LCM and consistency warnings. However, it does not explicitly state when not to use it or point to alternatives, leaving the selection among stock_valuation_report, stock_run_valuation, and inventory_valuation_report to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_bank_linesA
Idempotent

Let the LOCAL decision model (E05, D144) suggest an account for the open bank lines no reference and no earlier booking can place (their proposal is open, no_proposal). For each such line, newest first, at most 50 are put to the model per call (remaining counts the rest; a line already decided on the same input does not count, so the next call reaches them), TILL builds up to 8 candidate accounts from this book's own bookings and its chart, the model picks one with a calibrated probability, and the answer is recorded (model, pinned sha256, every probability) BEFORE list_bank_inbox shows it as the proposal reason model_suggested, always certainty check, never sure; a choice below 50 % is recorded and shows nothing. Posts nothing and books nothing: book the line with book_bank_line as always. bankAccountId or bankTxnIds (at most 200, e.g. the lines in view) narrow the scope. A line already decided on the same input by the same model adds no row. Refuses needs_local_runtime (no local runtime installed; there is no cloud fallback), needs_model_selection, needs_decide_model (the model cannot decide or its calibration was never measured), unsupported_model_language (the model does not read German and French). Idempotent on idempotencyKey.

NameRequiredDescriptionDefault
bankTxnIdsNo
workspaceIdYes
bankAccountIdNo
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: batch cap of 50 per call with a 'remaining' count, 8 candidate accounts built from this book's bookings and chart, calibrated probability recorded with model and pinned sha256, sub-50% choices recorded but not surfaced, and an enumerated refusal set (needs_local_runtime with no cloud fallback, needs_model_selection, needs_decide_model, unsupported_model_language). The destructiveHint=false claim is corroborated by 'Posts nothing and books nothing'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, so the opening is right, but the body is one dense run-on chain of parenthetical clauses and hyphen-joined asides that is hard to parse. Almost all content is substantive, yet the packaging costs readability and several clauses could be split or trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a novel tool (local model inference, no output schema) the description covers everything an agent needs before calling: eligibility, batching and continuation semantics, what gets persisted, what is deliberately not shown, refusal codes, and the division of labour with book_bank_line. No output schema exists, and the description compensates by describing what gets recorded and how it surfaces in list_bank_inbox.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden and mostly does: bankTxnIds is capped at 200 with an example use ('the lines in view'), bankAccountId is described as narrowing scope, and idempotencyKey is tied to idempotency. Only workspaceId is left unexplained, which is a minor omission for an otherwise well-covered four-parameter schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: a LOCAL decision model suggests a chart account for open bank lines that no reference or earlier booking can place. That is far more than a restatement of the name. It does not, however, differentiate against the other suggestion siblings (suggest_matches, suggest_payment_matches, suggest_bank_lines' neighbours), so an agent gets the purpose but not the full routing picture from this dimension alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly defines the eligible population (lines with proposal open / no_proposal that no reference or prior booking can place) and states the follow-up action: "Posts nothing and books nothing: book the line with book_bank_line as always." It also tells the caller how to narrow scope and why a repeat call may return rows the previous call did not, which is exactly the usage context an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_matchesA
Read-only

Propose a match for every txn of an imported statement, writing nothing. A routed credit shows A21's live score (an invoice, or none). A debit or a reversed entry is RANKED (A36): the exact amount + currency gate is mandatory, then value-date proximity (workspace window, default +/- 5 days), counterparty-name overlap and reference hits order the gated bills, each proposal carrying a signals[] list (amount/value_date/counterparty/reference) and its confidence. A debit whose batch PmtInfId matches a generated A18 payment batch proposes the batch itself (kind:payment_batch); a batch-total mismatch is shown blocked (one-click disabled, use the manual split). Each txn also carries needsReview: true when no proposal reaches the workspace review threshold.

NameRequiredDescriptionDefault
statementIdYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite the readOnlyHint annotation already covering safety, this description goes far beyond with algorithm details: mandatory amount+currency gate, value-date window, ordering criteria, signals[] composition, confidence, batch matching (A18), and the needsReview flag. It even discloses edge cases like batch-total mismatch and blocked proposals. No contradictions with the readOnlyHint are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but structured logically: starting with the overall purpose, then credit handling, debit ranking, batch special cases, and a closing note on needsReview. It is lengthy due to the complex behavior it must communicate, but each clause adds value and it front-loads the primary action. It could be broken into bullets, but remains appropriately sized for a complex matching engine.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes care to enumerate important return elements: signals[] fields, confidence, kind:payment_batch, blocked proposals, and needsReview. It covers the main decision logic and edge cases. Minor gaps exist around exact response shape or error conditions, but the essential information an agent needs to interpret results is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has only workspaceId and statementId with zero description coverage ×. The description indirectly references these ('workspace window', 'imported statement') but never explicitly maps them to parameters. Parameter names are self-explanatory, yet the description doesn't compensate fully for the missing schema descriptions – it provides context but not direct definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Propose a match for every txn of an imported statement'. It clearly distinguishes this from write operations by stating 'writing nothing', and the detailed behavior (A21, A36, payment_batch) makes the purpose unmistakable. It also differentiates from siblings like confirm_match or review_bank_txn by placing the emphasis on suggestion rather than confirmation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes the context for use: matching transactions from an imported statement after import, while 'writing nothing' indicates a read-only pre-step. It doesn't explicitly name alternatives like suggest_payment_matches or state when not to use it, but the focus on imported statements vs. other matching flows gives a clear contextual trigger.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_payment_matchesB
Read-only

Rank the open items a payment might settle, with the reason in words: reference matches, amount and customer match, or amount close. A QR or Creditor Reference whose check digit fails is reported as a typo and never ranked as a match, and a candidate that fits no tier carries no reason at all. This is the same read model the Studio's candidate list renders.

NameRequiredDescriptionDefault
currencyNo
directionNo
referenceNo
amountMinorNo
workspaceIdYes
counterpartyIdNo

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral details beyond the readOnlyHint annotation: it explains that check-digit failures are reported as typos and never ranked, and that candidates fitting no tier carry no reason. It also notes the tool uses the same read model as the Studio's candidate list, giving agents insight into expected behavior. However, it doesn't clarify what the tiers are or how the ranking order works.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and packs substantial detail about behavioral nuances. It is efficient and avoids fluff, though the second sentence is dense and could be clearer about tier definitions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters, no schema descriptions, and no output schema, the description is incomplete. It does not describe the output structure, required fields, or the meaning of parameters like direction or amountMinor. It also leaves the notion of 'tiers' undefined. An agent would struggle to use this tool correctly without additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain any of the six parameters (currency, direction, reference, amountMinor, workspaceId, counterpartyId). With 0% schema description coverage, the description should compensate but only loosely mentions 'reference' and 'amount' without mapping them to parameters. This is a significant gap for an agent trying to construct valid calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool ranks open items a payment might settle, with reasons in words. It mentions reference matches, amount and customer match, or amount close, and notes check digit failures are treated as typos. However, it does not explicitly differentiate from the sibling 'suggest_matches', relying on the phrase 'same read model' which is somewhat indirect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives like suggest_matches, preview_payment, or match_qr_payment. It implies a read-only suggestion role but does not state when it is the right choice or what distinguishes it from other matching/suggestion tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

supplier_performance_alertsA
Read-only

Offene Leistungs-Warnungen (performance alerts, US-I05.5): for every supplier active in the window, each configured alert threshold a metric currently breaches (by default overall score below 70 or OTIF below 85) becomes an open alert with the supplier, metric, current value, threshold and period. Alerts are DERIVED and recomputed on every read, not stored as tickets. Pass onlyOpen:false to also see the metrics that were evaluated and did not breach. Posts nothing.

NameRequiredDescriptionDefault
asOfNo
onlyOpenNo
windowDaysNo
workspaceIdYes
configOverrideNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description states that alerts are DERIVED, recomputed on every read, and not persisted as tickets, and explicitly says 'Posts nothing.' This meaningfully clarifies side effects and data freshness without contradicting the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences cover purpose, behavior, and a key parameter. The German label and requirement ID add a little noise, but the content is front-loaded and every sentence contributes information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description names the output fields (supplier, metric, current value, threshold, period) and explains derivation, which is valuable given the lack of an output schema. It misses details on configOverride and asOf semantics, but the core call shape and behavior are sufficiently clear for a read-only listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry parameter semantics and does explain onlyOpen behavior and the window concept, and references configurable thresholds. However, it does not document asOf, windowDays units/defaults, or the shape of configOverride, leaving significant gaps for a five-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as returning open supplier performance alerts for threshold breaches, with a concrete resource (suppliers/metrics) and output fields. It distinguishes itself from sibling analytics tools by emphasizing that alerts are derived and not stored as tickets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear scope (suppliers active in window, configured thresholds) and parameter guidance (onlyOpen:false for non-breached evaluations), but does not explicitly say when to prefer this over sibling supplier-performance tools such as supplier_performance_rank or supplier_performance_trend. The usage context is implied rather than stated as a routing rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

supplier_performance_explainA
Read-only

Die Herleitung einer Kennzahl (metric explanation, US-I05.3): the exact formula applied, the workspace tolerance / weight values used, and the full list of contributing source documents (goods-receipt ids and po-line ids for the delivery metrics, po_match ids for price and override) with their per-row values. This is the audit view a Treuhänder reads to reconstruct any number on the scorecard down to the Beleg. Re-running it with the same live data yields the identical result.

NameRequiredDescriptionDefault
toNo
fromNo
metricYes
supplierIdYes
windowDaysNo
workspaceIdYes
configOverrideNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint: true, and the description adds behavioral details beyond that: it states that re-running with the same live data yields identical results (determinism), and it describes the audit scope (full list of contributing documents). It does not contradict annotations and provides useful behavioral context about the tool's reliability and output scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences) and front-loaded with the core purpose. It includes relevant details about output content without excessive fluff. The use of German in the first phrase adds a slight redundancy with the English explanation, but overall it is well-structured and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters (3 required) and no output schema, the description is incomplete for correct invocation. It explains what the tool returns (formula, tolerances, source documents) but does not explain how parameters affect the output, what the optional parameters (to, from, windowDays, configOverride) mean, or the structure of the response. An agent would need additional context to call it correctly with appropriate parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate by explaining parameters. It does not describe any of the 7 parameters (workspaceId, supplierId, metric, to, from, windowDays, configOverride). Even the required parameters are only implied by the context (metric, supplier, workspace) but not explicitly documented. The description focuses entirely on the return value and fails to provide parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: it explains the derivation of a metric by showing the exact formula, tolerance/weight values, and contributing source documents with per-row values. This is a specific verb+resource (explain supplier performance metric) and clearly distinguishes it from sibling tools like supplier_scorecard_get or supplier_performance_rank, which retrieve scorecard data rather than audit derivations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is the audit view a Treuhänder uses to reconstruct any scorecard number down to the source documents. It implies when to use it (when an audit trail or detailed derivation is needed) and mentions deterministic re-runs, but it does not explicitly name alternative tools or conditions for not using it. However, the context is strong enough for an agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

supplier_performance_rankA
Read-only

Rangliste der Lieferanten (supplier ranking) by one metric over a window (default the overall score): each row carries the supplier, the metric value, the overall score, the activity count and the delta versus the previous window. Suppliers below minActivity receipts are moved to a separate insufficient[] list rather than ranked on thin data. Ordering is stable (ties break by supplier name then id) and defaults to best-first for the chosen metric. Pure derivation over live receipts and matches; posts nothing.

NameRequiredDescriptionDefault
toNo
fromNo
limitNo
orderNo
metricNo
windowDaysNo
minActivityNo
workspaceIdYes
configOverrideNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, and the description reinforces this with 'posts nothing' and 'pure derivation'. It adds meaningful behavioral detail beyond annotations: the insufficient[] list separation, stable ordering with tie-break rules, default best-first ordering, and the fact that it derives from live receipts and matches. This is strong transparency for a read-only reporting tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured: it states the output shape, the threshold behavior, ordering rules, and side-effect profile in four sentences. Every sentence adds distinct information and the most important facts (ranking, window, default metric) are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only ranking tool with no output schema, the description covers the key output fields, ordering, threshold behavior, and side-effect safety. It does not document the exact format of date parameters (from/to) or configOverride, but the core invocation context is sufficiently clear for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It explains the meaning of metric, window, minActivity, and order implicitly (default best-first, stable ties), but does not explain to, from, limit, configOverride, or workspaceId. The description adds value for the core ranking parameters but leaves several parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool produces a supplier ranking (Rangliste der Lieferanten) by one metric over a window, with each row carrying specific fields. It distinguishes itself from sibling tools like supplier_performance_trend and supplier_scorecard_get by specifying the ranking/derivation nature and the separate insufficient[] list behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the default metric (overall score), the window concept, and the minActivity threshold behavior, which tells an agent when this tool is appropriate for ranking suppliers. It does not explicitly name alternative tools or state when NOT to use it, but the context of 'pure derivation over live receipts and matches; posts nothing' plus the sibling names gives reasonable usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

supplier_performance_trendA
Read-only

Der Trend einer Kennzahl (metric trend) for one supplier over the last N consecutive windows, oldest first: each point is a pure re-evaluation of the chosen metric for that window, and a window with no activity reports value null (a genuine gap), never a fabricated zero. Use it for the scorecard sparkline or to see whether delivery reliability is improving. Derived, not stored.

NameRequiredDescriptionDefault
toNo
metricYes
periodsNo
supplierIdYes
windowDaysNo
workspaceIdYes
configOverrideNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds valuable behavioral details: each point is a pure re-evaluation, missing windows are genuine nulls rather than fabricated zeros, and the data is derived rather than stored. This richness helps the agent anticipate edge cases and trust the output semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose. The null-gap behavior and derived-not-stored distinction add high-value information without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The core purpose and key output semantics are clear, but the tool has 7 parameters including a nested configOverride and no output schema. The description does not explain how periods and windowDays interact, what configOverride does, or the response shape, so an agent is left guessing on several invocation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only obliquely references supplier, metric, and windows. It does not explain periods, windowDays, to, or configOverride, leaving 7 parameters largely underspecified for a tool with no property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool as computing a metric trend for one supplier over consecutive windows, with explicit direction (oldest first). It distinguishes itself well from closely related siblings like supplier_performance_rank or supplier_scorecard_get by focusing on trend visualization and improvement assessment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names concrete use cases: scorecard sparkline and checking whether delivery reliability is improving. However, it doesn't explicitly say when to prefer an alternative tool, so while usage context is clear, exclusions are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

supplier_price_listA
Read-only

Liste die Lieferantenpreise (P5): the append-only price history for a supplier/item filter. When BOTH a supplier and an item are named, the ONE effective resolved price at at (including the item-cost fallback with source:item_cost) rides the read, so an agent can price a reorder in one call.

NameRequiredDescriptionDefault
atNo
itemIdNo
workspaceIdYes
supplierContactIdNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description adds meaningful behavior beyond that: the price history is append-only, and both-filter queries return one effective resolved price including an item-cost fallback with source:item_cost. This is useful context. The phrase 'rides the read' is jargon, but the overall behavioral disclosure is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: two sentences, with the core purpose stated first and the special resolved-price behavior front-loaded in the second sentence. Every sentence contributes. Minor jargon like 'rides the read' and the unexplained 'P5' reduce clarity slightly, but the structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 4 parameters, the description should be more explicit about return shape and edge cases. It explains the both-filters-effective-price mode well but does not describe what a normal history response looks like, what happens with only one filter, or the meaning of workspaceId. It is adequate for a basic call but incomplete for robust agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It does explain the supplier/item filter and references `at` as the effective-price timestamp, and mentions the item-cost fallback. However, it does not define each parameter explicitly, nor explain what happens when only one filter is provided or what format `at` should take.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (supplier prices / P5 history) and a concrete behavior: listing append-only price history with a supplier/item filter. It also describes the special one-effective-price mode when both filters are present, which distinguishes it from a plain list. However, it does not explicitly contrast itself with related siblings like price_resolve or supplier_price_upsert, and the 'P5' parenthetical is unexplained.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear conditional rule: when both supplier and item are named, the tool returns the single effective resolved price at `at`, so it can be used to price a reorder. This effectively tells an agent when the resolved-price mode is appropriate. It does not explicitly state when NOT to use this tool or name alternatives, so it stops short of a full usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

supplier_price_upsertA

Erfasse einen Lieferantenpreis (append-only Historie nach valid_from): persists a supplier_item_price row (supplierContactId -> C00, itemId -> D00, supplierSku?, priceRappen, currency, validFrom, leadTimeDays?), mirroring D00s price-list discipline. po_upsert pre-fills each lines price (and derives expected_on from the longest lead time) from resolveSupplierPrice. A supplier that is not a C00 contact or an unknown itemId is refused (invalid_reference); priceRappen < 0 is refused.

NameRequiredDescriptionDefault
actorNo
itemIdYes
currencyNo
validFromYes
priceRappenYes
supplierSkuNo
workspaceIdYes
leadTimeDaysNo
idempotencyKeyNo
supplierContactIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond the single destructiveHint=false annotation: the record is append-only history rather than an overwrite, and two concrete refusal conditions are named (supplier not a C00 contact or unknown itemId -> invalid_reference; priceRappen < 0). It does not cover permission requirements or what the response returns, keeping it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and its persistence model, then terse supporting clauses; every sentence carries information. It is dense with internal jargon (C00/D00, 'price-list discipline') and mixes German and English, which costs a little readability but not substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation with no output schema and only a destructiveHint annotation, the description covers the data model, validations and downstream use well. Gaps remain on idempotency/duplicate handling and on the unmentioned workspaceId/actor/currency parameters, which an agent writing supplier prices would want resolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 10 parameters, so the description must carry the load; it names most fields and adds genuine domain mapping (supplierContactId -> C00, itemId -> D00, priceRappen as minor units) plus leadTimeDays' downstream effect. But workspaceId, actor and especially idempotencyKey — material for an upsert's retry semantics — are left unexplained, and no format hints are given for validFrom or currency.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Erfasse einen Lieferantenpreis' / persists a supplier_item_price row) plus the key semantic — an append-only history keyed on valid_from — which distinguishes it from a plain update. It also positions itself relative to siblings by naming po_upsert and resolveSupplierPrice as the consumers of the data it writes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context on where this fits: it is the write path that feeds po_upsert's line-price pre-fill and lead-time derivation. However, it never explicitly states when to prefer it over neighbours like price_lists_set_price or when not to call it (e.g. correcting an existing row instead of appending a new valid_from).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

supplier_scorecard_getA
Read-only

Die Lieferanten-Scorecard (supplier scorecard) for one supplier and window: OTIF, on-time %, quantity fill %, average delivery delay, quantity variance %, price variance %, match-override rate, inspection-rejection rate and a weight-normalised overall score 0-100, each with a green/amber/red light, plus the previous-window comparison and the top contributing exceptions (late deliveries, short shipments, price overrides) with deep-link PO / receipt / match ids. Every number is DERIVED from the live I02 goods receipts and the D02 three-way-match rows and is reproducible (same data, same result); nothing is posted. Empty period answers ok with empty:true, never an error. A supplier id from another workspace is not_found (tenant isolation). Pass configOverride for a what-if with different weights or tolerances.

NameRequiredDescriptionDefault
toNo
fromNo
supplierIdYes
windowDaysNo
workspaceIdYes
configOverrideNo

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the readOnlyHint annotation: states nothing is posted, data is derived and reproducible, empty periods return empty:true, tenant isolation yields not_found, and configOverride enables what-if analysis. These are non-obvious behavioral details an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the core purpose and then details output and edge cases. Every clause adds relevant information, though it could be broken into clearer segments for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers key output elements (metrics, lights, comparison, exceptions with deep-links) and edge cases, but lacks explicit return format structure or parameter syntax, which is critical given no output schema and 6 parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, and the description only vaguely references 'window' and 'configOverride' without explaining format, units, or required relationships. It fails to compensate for the lack of parameter documentation, especially for to/from/windowDays.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a supplier scorecard for one supplier and time window, listing specific metrics and comparisons. It unambiguously identifies the resource and scope, distinguishing it from broader procurement tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides context (single supplier, window) and mentions configOverride for what-if scenarios, but does not explicitly differentiate from sibling tools like supplier_performance_trend or supplier_performance_rank. No clear when-not-to-use guidance or alternative selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_artifact_readA
Read-only

Resolve a published artifact.* handle by its content hash (sha256), returning the stable reference the blob is addressed by. The stream carries handles, never inline bytes; the blob itself is fetched from the content store the runtime binds. A hash that is not a published handle in this workspace is artifact_not_found. Requires the sync.read capability.

NameRequiredDescriptionDefault
sha256Yes
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, so the description correctly does not repeat that. It adds valuable behavioral context: the stream carries handles, not inline bytes, and the blob is fetched from a bound content store. It also discloses the error behavior (artifact_not_found) and the required capability, which goes beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and then adding behavioral and error context. Every sentence contributes meaning without waste, and the structure is clear and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a resolver with no output schema, the description covers the essential aspects: what it does, how it behaves (returns handles), error conditions, capability requirements, and scope. It does not explicitly describe the return type format, but it is sufficient for an agent to invoke correctly. Given the annotations and simple parameter set, this is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains that sha256 is a content hash and that the workspace scope is implied by 'in this workspace'. However, it does not explicitly define workspaceId, and it lacks detailed parameter descriptions. The description adds some meaning but does not fully compensate for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool resolves a published artifact handle by its content hash (sha256) and returns the stable reference. The verb 'resolve' and the resource 'artifact handle' are specific, and it distinguishes from siblings like sync_stream_read and sync_publish_enable by focusing on resolution rather than streaming or publishing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides useful context: it clarifies the tool returns handles, not inline bytes, and that the blob is fetched from the content store. It also states the required capability and the error condition for missing hashes. However, it does not explicitly mention alternatives or when to use this over sibling tools like sync_stream_read, leaving usage guidance implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_publish_disableA
DestructiveIdempotent

Turn the till-sync publish stream OFF for this workspace. Stops new appends and refuses stream reads (publishing_disabled), but the already-published outbox rows remain, append-only, for audit; the epoch is kept so re-enabling resumes the same stream. The stop button.

NameRequiredDescriptionDefault
workspaceIdYes
idempotencyKeyYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the annotations: it explains that new appends stop, stream reads are refused with publishing_disabled, existing outbox rows remain for audit, and the epoch is preserved so re-enabling resumes the same stream. This clarifies the consequences and reversibility of a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: it leads with the action, then explains the operational consequences and reversibility. There is no redundant or filler text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema mutation tool, the description gives enough behavioral context to understand what happens to the stream, existing data, and future re-enabling. It is only incomplete in parameter semantics and does not describe failure conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only indirectly refers to workspaceId as 'this workspace' and does not explain idempotencyKey at all. An agent gets little semantic guidance for either required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: turning the till-sync publish stream OFF for a workspace. It is clearly distinguishable from sync_publish_enable and sync_stream_read, and the effect is front-loaded.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied by 'Turn ... OFF' and 'The stop button,' but the description does not explicitly say when to use this versus the sibling sync_publish_enable tool or when disabling would be inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_publish_enableA
DestructiveIdempotent

Turn the till-sync publish stream ON for this workspace (owner dial, default OFF: a local install publishes nothing). Enabling is the consent act for any egress; it mints the stream epoch once and backfills existing posted history so the stream is complete. Reversible with sync_publish_disable. CONSEQUENCE: Turns on publishing: your postings, past ones included, can then be read from this workspace's sync stream. You can turn it off again, but whatever was read stays with the reader for good.

NameRequiredDescriptionDefault
workspaceIdYes
idempotencyKeyYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint and idempotentHint annotations, the description discloses that enabling mints the stream epoch once, backfills existing posted history, and exposes past postings to readers. It also explicitly warns that turning publishing off later does not retract what has already been read, which is exactly the kind of consequence an agent needs before invoking a destructive consent tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The action is front-loaded in the first sentence, followed by operational detail, the reversal path, and a clearly marked consequence. Every sentence adds decision-relevant information and nothing is wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive consent-style tool with no output schema, the description is strong on behavior and consequences. However, because the schema has no parameter descriptions, the omission of any explanation for idempotencyKey leaves invocation guidance incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the two required parameters. It only implies workspaceId through 'this workspace' and never mentions idempotencyKey, leaving the agent without meaningful guidance on either parameter's role or format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: turning the till-sync publish stream ON for a workspace. It distinguishes this from the default OFF state and explicitly names sync_publish_disable as the reversal sibling, so an agent can tell exactly what this tool does and what it does not do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the enabling condition as the consent act for egress, notes that the default is OFF and a local install publishes nothing, and names sync_publish_disable as the alternative for reversing the state. The when-to-use and alternative path are explicit enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_stream_readA
Read-only

Read the append-only publish stream from a consumer-held cursor {seq, epoch}, up to limit events, with the current headSeq so you know your lag. At-least-once: a re-read from the same cursor is always safe. A cursor beyond the head is invalid_cursor; a cursor from a superseded epoch (after a restore) is cursor_reset_required. Requires publishing to be on and the sync.read capability.

NameRequiredDescriptionDefault
limitNo
cursorNo
workspaceIdYes
contractVersionNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the read-only nature is already known. The description adds valuable behavioral context: at-least-once guarantee, specific error conditions (invalid_cursor, cursor_reset_required), and prerequisites (publishing enabled, capability). This goes well beyond annotations and provides the agent with important operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences with no fluff. The main purpose and key behavior are front-loaded; every sentence adds distinct information about semantics, safety, or errors.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but the description mentions returning headSeq for lag awareness skipping the full response format. It covers error states, requirements, and semantics. Missing details on contractVersion and the exact nature of limit (required vs optional, upper bound) keep it slightly below complete, but it is still strong given the context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies 'cursor' as {seq, epoch} and 'limit' as 'up to limit events'. However, it omits the meaning of contractVersion and does not explicitly document workspaceId beyond its requirement. Partial compensation for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('read'), a clear resource ('append-only publish stream'), and precise mechanics: consumer-held cursor {seq, epoch}, limit events, and returning headSeq for lag. This distinguishes it from siblings like sync_stream_status (status) and sync_artifact_read (artifact-specific read).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: reading with a cursor, at-least-once semantics making re-reads safe, and explicit requirements ('publishing to be on and the sync.read capability'). It does not explicitly name alternative tools or exclusions, but the usage context is sufficiently conveyed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_stream_statusA
Read-only

The monitoring read: whether publishing is on, the stream head and epoch, and (when you pass your cursor) the lag = head - cursor.seq. Operational metadata only, no tenant rows. Requires the sync.read capability.

NameRequiredDescriptionDefault
cursorNo
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already flags this as a safe read; the description adds substantive behavior on top: it returns operational metadata only (publishing flag, stream head, epoch), computes lag only when a cursor is passed, and explicitly excludes tenant rows. The sync.read capability requirement and the lag formula are useful context beyond what the annotation provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first front-loads the purpose and outputs, the second narrows scope with an exclusion, and the third states the required capability. No filler and no repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter read tool with a readOnly annotation, the description is nearly complete: it explains what will be returned, the triggering condition for the optional argument, the exclusions, and the auth requirement. The only gaps are the unexplained `workspaceId` and the unstated meaning of 'epoch,' neither of which is fatal for a monitoring read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter semantics. It gives real meaning to `cursor`: optional, and its presence triggers the lag computation (lag = head - cursor.seq). But `workspaceId`, the required parameter, is never mentioned in the description, so its purpose and constraints remain unexplained despite the schema only labeling it as a string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('monitoring read') and resource (stream status), and enumerates exactly what it reports: publishing on/off, stream head, epoch, and lag computed as head - cursor.seq. It also differentiates itself by scope ('operational metadata only, no tenant rows'), distinguishing it from sibling sync tools that deal with tenant data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes clear context: this is the read/monitor variant within the sync_* family, distinct from sync_publish_enable/sync_publish_disable which mutate state. The exclusion 'no tenant rows' implies a sibling (sync_stream_read) handles actual data reads, and 'Requires the sync.read capability' states the prerequisite. However, no alternative is named explicitly, so routing guidance is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_cancelA

Brich eine Aufgabe ab: the terminal "wird nicht erledigt", distinct from done. No activity is logged and no recurrence occurrence is spawned; a cancelled task returns only through an explicit status filter.

NameRequiredDescriptionDefault
taskIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide destructiveHint=false, while the description adds substantive behavior: terminal status, no activity logging, no recurrence occurrence spawned, and default invisibility in results. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the action and terminal state, with little wasted text. The mixed German/English phrasing slightly reduces polish but not size.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behavioral effects are unusually complete for a cancel tool, but with no output schema and no schema parameter docs, the description leaves key call semantics unexplained, especially idempotencyKey and workspace scoping. Adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for three parameters, and the description never explains taskId, workspaceId, or idempotencyKey. It adds no parameter meaning beyond the property names and therefore fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Brich eine Aufgabe ab' = cancel a task) and explicitly distinguishes the terminal 'wird nicht erledigt' state from done. This differentiates it clearly from tasks_complete and similar task siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the key alternative/contrast: cancellation is distinct from done, and a cancelled task only reappears with an explicit status filter. It does not name tasks_update or tasks_list or spell out prerequisites, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_completeA

Erledige eine Aufgabe: sets done and stamps completedAt; with logActivity true on a contact-linked task, appends one OP5 timeline entry through contacts_log_activity; on a recurring task, mints the next occurrence anchored on the completed due date (never on completion time) and answers spawnedTaskId, or seriesEnded when UNTIL or COUNT closes the series. One idempotency key covers complete, log and spawn together. Allowed for holders of tasks.write and for the task assignee.

NameRequiredDescriptionDefault
taskIdYes
logActivityNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite minimal annotations, the description discloses important behavior beyond destructiveHint=false: it sets done/completedAt, can append a timeline entry through contacts_log_activity, mints the next recurring occurrence based on the due date, returns spawnedTaskId or seriesEnded, and uses one idempotency key across the combined operation. It also states the required permissions, giving strong behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with the core action and avoids filler. It packs several important side effects into a compact statement, though the semicolon-heavy structure makes it slightly harder to scan than a cleanly segmented description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema, the description covers the key side effects, recurring behavior, return hints, idempotency, and permissions. It does not describe error cases or the full response shape, but it is sufficiently complete for an agent to invoke the tool with the right expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains logActivity and idempotencyKey semantics well, but taskId and workspaceId are only implied by name and are not described. This is adequate but leaves a clear gap for the required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: completing a task, setting it done and stamping completedAt. It also distinguishes the operation from generic updates by describing side effects like timeline logging and recurring-task spawning, so an agent can identify exactly 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening 'Erledige eine Aufgabe' clearly frames this as the completion operation, and the description specifies conditional usage for logActivity and recurring tasks. It does not explicitly compare against alternatives such as tasks_cancel or tasks_update, but the context is clear enough for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_createB

Lege eine Aufgabe an: a cross-entity to-do with an assignee, an optional due date (dueAt, may be in the past: it lands in the Überfällig bucket), an optional reminder (reminderAt, refused when already past or after the due date), an optional link to any registered record (entityKind/entityId, validated against the OP3 entity registry), and an optional RFC-5545-subset recurrence rule (FREQ=DAILY|WEEKLY|MONTHLY|YEARLY, INTERVAL, BYDAY for weekly, UNTIL or COUNT).

NameRequiredDescriptionDefault
dueAtNo
notesNo
titleYes
entityIdNo
entityKindNo
reminderAtNo
workspaceIdYes
assigneeUserIdYes
idempotencyKeyNo
recurrenceRuleNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations supply only destructiveHint=false, so the description carries most of the behavioral burden. It discloses useful rules: past due dates route to the Überfällig bucket, reminders are refused when past or after the due date, entity links are validated against the OP3 registry, and recurrence accepts a specific RFC-5545 subset. It omits idempotency, permission and response behavior, but adds substantial context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence front-loads the create action and then lists optional facets; it is appropriately sized for a 10-parameter tool. The run-on parentheticals and mixed German/English phrasing slightly reduce readability, keeping it from 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters, minimal annotations and no output schema, the description should cover the return value and idempotency behavior. It does well on validation and recurrence constraints, but never says what a successful create returns or what idempotencyKey does, leaving material gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must document all 10 parameters itself. It adds meaningful semantics for dueAt, reminderAt, entityKind/entityId and recurrenceRule, but leaves idempotencyKey, notes, workspaceId, title and assigneeUserId undocumented, which is a material gap for a create tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific create verb and task resource, and enumerates the optional facets such as assignee, due date, reminder, record link and recurrence. It does not explicitly distinguish itself from tasks_update, tasks_complete or other task siblings, so it falls short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use statement, no naming of alternatives such as tasks_update for existing tasks, and no prerequisites. The validation constraints on optional fields imply create semantics, but they do not guide tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_listA
Read-only

The task queue (P5): every task with its bucket derived at query time from dueAt against today (overdue, today, upcoming, done), filterable by bucket, assignee, status, or the linked record (entityKind/entityId, which serves the per-entity drawer list). savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
bucketNo
statusNo
entityIdNo
entityKindNo
savedViewIdNo
workspaceIdYes
assigneeUserIdNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true. The description adds substantial behavioral context: buckets are computed at query time from dueAt, saved view filters are merged underneath explicitly named filters, and entityKind/entityId serves the per-entity drawer list. This provides valuable information beyond the annotation without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with every sentence adding distinct value: bucket derivation, filter dimensions, and saved view merging. It is front-loaded with the core purpose and contains no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description thoroughly covers filtering dimensions and saved view behavior, but there is no output schema and no mention of return format, pagination, or sorting. For a list tool, this is a notable gap, although the filter semantics are well described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the bucket parameter (overdue, today, upcoming, done), the savedViewId merge behavior, and the entityKind/entityId use case. However, it does not describe status/assigneeUserId values or workspaceId, leaving some parameter semantics to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: lists the task queue with buckets derived at query time. It clearly distinguishes itself from sibling task tools (tasks_create, tasks_update, etc.) by describing the bucket categories and filter options, making the tool's role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context on when to use the tool: for the task queue with computed buckets, including the per-entity drawer list scenario. It explains how savedViewId interacts by merging filters, but it does not explicitly name alternatives or exclusions (e.g., tasks_reminders_due), so a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_reminders_dueA
Read-only

The single reminder-trigger surface (P5): every task whose reminder is due at asOf (default now), status open or doing, and not snoozed past asOf. C01 deal follow-ups, A16 receivables chasing and G06 notification delivery all poll THIS list rather than running reminder loops of their own, and the task.due automation trigger fires from the same predicate.

NameRequiredDescriptionDefault
asOfNo
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only readOnlyHint, so the description takes on the burden of explaining behavior. It adds the selection semantics: asOf defaults to now, only open or doing tasks are included, and snoozed-past-asOf tasks are excluded. This gives the agent a clear model of what will be returned without contradicting the read-only annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core predicate is front-loaded and every sentence serves either purpose or usage. The internal codes (P5, C01, A16, G06) add jargon that may be opaque to an agent, but they do not waste space and the description remains dense and purposeful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only filtered list with two parameters, the description defines the full selection predicate and the default time, while annotations cover the safety profile. It does not describe the return envelope, pagination, or workspaceId semantics, but these are not critical for a correct invocation of this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It does clarify asOf by giving its meaning and default ('due at asOf (default now)'), but workspaceId semantics are left implicit and additionalProperties is not explained. With only two parameters, this partial compensation is adequate but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific predicate: every task with a reminder due at asOf, status open or doing, and not snoozed past asOf. It also positions itself as the 'single reminder-trigger surface', clearly distinguishing it from generic task-list tools or custom reminder loops.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names real consumers (C01 deal follow-ups, A16 receivables chasing, G06 notification delivery) and directs them to poll THIS list rather than run their own loops. It also notes the task.due automation trigger uses the same predicate. It stops short of naming sibling alternatives for comparison, so it is not a full when-not-vs-alternative statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_snoozeA
Destructive

Stelle eine Erinnerung zurück: hides the task from tasks_reminders_due until the given instant. The due date is untouched (snooze hides the reminder, it does not move the deadline), and an instant already past is refused with snooze_in_past.

NameRequiredDescriptionDefault
untilYes
taskIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the destructiveHint=true annotation by clarifying what is NOT mutated (the due date is untouched) and by documenting a concrete failure mode ('an instant already past is refused with snooze_in_past'). It does not say whether the snooze can be undone or how to un-snooze, which is the main remaining gap for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core behavior front-loaded and the negative constraint (deadline unchanged) immediately after. The German lead-in duplicates the tool name and could be dropped, but nothing else is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation with no output schema and zero schema coverage, the description covers intent, the non-destructive scope and one error code. It stops short of explaining idempotency semantics, required permissions, or how a snooze is undone, which an agent needs before calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It does explain 'until' well (an instant, past values rejected), but taskId, workspaceId and especially the optional idempotencyKey are left entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (snooze a task reminder) and pins down the exact effect: the task disappears from tasks_reminders_due until the given instant, which also distinguishes it from that sibling. The leading German clause 'Stelle eine Erinnerung zurück' is redundant with the tool name but does not obscure the meaning.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The described effect strongly implies when to reach for it (suppress a reminder without changing the deadline), but there is no explicit when-to-use/when-not guidance and no routing to alternatives such as tasks_update for a genuine due-date change. Usage is inferable, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_updateA

Bearbeite eine Aufgabe from a patch: retitle, reassign, reschedule (patching dueAt clears any snooze: a new deadline supersedes an old Zurückstellen), change the reminder or the recurrence rule, move between open and doing, or reopen a done task (status open; cancelled stays terminal).

NameRequiredDescriptionDefault
patchYes
taskIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false; the description adds real behavioral context: setting dueAt silently clears an existing snooze, and status changes have terminal-state rules (cancelled is unrecoverable). It does not mention permission requirements, what a partial patch leaves untouched, or the role of idempotencyKey for retries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with no filler, and the core operation is front-loaded before the field list. Readability is hurt by mixed German/English phrasing ("Bearbeite eine Aufgabe from a patch", "Zurückstellen") and by stacked parentheticals that make the terminal-state rule easy to skim past.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers side effects and status semantics well, but with 0% schema coverage across a nested patch object it leaves gaps an agent must guess at: the `notes` field, the idempotency key for safe retries, and accepted date/status value formats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage on a nested patch object of seven properties, the description carries the burden and mostly succeeds: retitle→title, reassign→assigneeUserId, reschedule→dueAt, reminder→reminderAt, recurrence→recurrenceRule, status transitions. The `notes` field and top-level `idempotencyKey`/`workspaceId`/`taskId` are never mentioned, and no value formats (ISO dates, status enum values) are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (update a task) and clarifies the patch/partial-update semantics up front. It enumerates the concrete mutations (retitle, reassign, reschedule, reminder/recurrence, status transitions), which lets an agent distinguish it from tasks_create, tasks_complete, tasks_snooze and tasks_cancel without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical "status open; cancelled stays terminal" is genuine usage guidance: it tells the agent this tool can reopen a done task but can never revive a cancelled one, implying tasks_cancel is a one-way door. It does not name sibling tools or say explicitly when to prefer tasks_complete/tasks_snooze over a direct patch, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tax_provision_previewA
Read-only

Propose the Steuerrückstellung for the fiscal year to periodEnd the way Kanton Zürich ZStB 27/1 computes it: profit before tax times s/(1+s) at rateBp (default 2000 = 20 %, the rate is cantonal and yours to set), minus the instalments already charged to 8900, never below zero. Returns the figures and a ready provision_create draft (reason steuern, Dr 8900 / Cr 2330). On an Einzelfirma answers applicable:false. A read: nothing is posted.

NameRequiredDescriptionDefault
rateBpNo
periodEndYes
workspaceIdYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description explicitly states 'A read: nothing is posted', explains the formula and default rate, mentions the edge case for Einzelfirma (applicable:false), and clarifies that it returns a draft. This adds substantial behavioral context beyond the annotation and does not contradict it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized in a single paragraph, front-loaded with the purpose, then the formula, output, and edge case. Every sentence contributes information without redundancy. The structure aids quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the computation, parameters, output (figures and a ready draft), edge case, and read-only nature. Even without an output schema, the description tells the agent what to expect. No critical information is missing for a preview tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description fully compensates by explaining rateBp (default 2000, cantonal), periodEnd as the fiscal year end, and the implicit workspace context. It ties the parameters to the computation formula, giving them clear meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific verb 'Propose' and resource 'Steuerrückstellung', explains the exact computation method (Kanton Zürich ZStB 27/1), and distinguishes itself from sibling tools by noting it returns a draft and is read-only. This makes it clear what it does and how it differs from provision_create or provision_post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context that it is for fiscal year end and that it is a preview ('nothing is posted'), which implies it is used before provision_create. However, it does not explicitly name alternatives or state when not to use it. The workflow is implied but not fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_approveA
Destructive

Gib eingereichte Zeiteinträge frei (Freigeben): the named submitted entries move to approved, stamped with the approving session actor. All-or-nothing: an unknown id or a non-submitted entry refuses the whole call. Gated on the A24 time.approve capability. CONSEQUENCE: Approves the submitted time entries in your name; from then on they can be billed and no longer edited. An approval cannot be withdrawn.

NameRequiredDescriptionDefault
entryIdsYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With destructiveHint=true already declared, the description still adds substantive context: all-or-nothing atomicity, the capability requirement, who is recorded as approver, the downstream consequences (billable, no longer editable), and explicit irreversibility. This is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action, then atomicity, then the gate, then the consequence — a sensible order with no filler. The German/English duplication in the opening clause and the missing title are minor blemishes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter destructive mutation with no output schema, the description covers semantics, failure mode, permission gate and irreversibility well. The gap is parameter-level guidance, particularly workspace scoping and idempotency behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, but it only obliquely covers entryIds ("the named submitted entries"). workspaceId is never explained, and idempotencyKey — the parameter an agent most needs guidance on for a destructive, non-withdrawable operation — is not mentioned at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource: it releases submitted time entries into the approved state, and states who gets stamped as approver (the session actor). This is clearly distinguishable from approve_entry (journal entries) and expense_claim_approve, which operate on different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the precondition clearly (only submitted entries; an unknown id or non-submitted entry refuses the whole call) and the capability gate (A24 time.approve). It does not name a sibling alternative or explain what to do if the call is refused, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_deleteA
Destructive

Lösche einen Zeiteintrag: allowed while open or submitted only; approved, locked or billed time is an ArG working-time record and refuses with entry_locked. CONSEQUENCE: Deletes the time entry for good; approved, locked or billed time cannot be deleted. To have it back, you record it again.

NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial context beyond the destructiveHint annotation: deletion is permanent, approved/locked/billed records refuse with entry_locked, and recovery means recording the entry again. These are exactly the behavioral traits an agent needs before calling a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The action and key constraint are front-loaded, and the text is short overall. There is some redundancy: the approved/locked/billed restriction appears twice, and the mixed German/English phrasing is slightly uneven.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description thoroughly covers deletion behavior, restrictions, permanence, and the entry_locked refusal, which is valuable for a destructive mutation. However, it leaves all parameter semantics undocumented despite zero schema coverage, so an agent must infer how to identify the workspace and entry.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions only the concept of a time entry and does not explain any of the three parameters. With 0% schema description coverage, the burden is entirely on the description, yet entryId, workspaceId, and idempotencyKey receive no semantic guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: delete a time entry. It distinguishes itself from sibling time tools by specifying that only open or submitted entries can be deleted, while approved, locked or billed time is refused. This lets an agent identify the tool's exact scope without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear conditions for use and non-use: allowed only while open or submitted, refused for approved, locked or billed time. It does not name an explicit alternative tool for those cases, but the exclusions are specific enough to guide correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_listA
Read-only

The timesheet read model (P5): entries filtered by project, user, status, billable, unbilled (everything not yet billed) or a started_at range, plus { totalMinutes, billableMinor } with the money figure derived round-once from each entry snapshotted rate, never stored. This slice (status approved, billable, unbilled) is B02 invoicing input. savedViewId applies a saved view (G00): its stored filters are merged underneath any filter named explicitly here.

NameRequiredDescriptionDefault
toNo
fromNo
statusNo
userIdNo
billableNo
unbilledNo
projectIdNo
savedViewIdNo
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint=true annotation, the description discloses that billableMinor is derived round-once from each entry's snapshotted rate and is never stored, plus the savedViewId merge-underneath precedence semantics. These are non-obvious behavioral traits an agent could not infer from the annotation alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, each earning its place: the filter set and output totals, the business context, and the savedViewId merge behavior. There is no filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter read tool, the description covers the filter semantics, the computed output fields, derivation rules, and the saved-view interaction. With no output schema, describing { totalMinutes, billableMinor } is valuable; however, it omits entry shape beyond totals, pagination behavior, and how multiple filters combine.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description carries the parameter documentation burden: it maps the filter dimensions (project, user, status, billable, unbilled, started_at range, savedViewId) to the schema properties and defines the ambiguous terms 'unbilled' and the saved-view merge behavior. Gaps remain: the required workspaceId is unexplained and the from/to mapping to 'started_at range' is only implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise read-model purpose: timesheet entries filtered by project, user, status, billable, unbilled, or a started_at range, with computed totals. It is clearly distinguished from the mutating time_* siblings (time_start, time_log, time_submit) by being framed as a read model and invoicing input slice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage context: 'This slice (status approved, billable, unbilled) is B02 invoicing input.' This helps an agent know when the tool is relevant, but it does not explicitly name alternatives or state when to prefer a sibling read tool such as billing_unbilled_preview or billing_wip_report.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_lockA
Destructive

Sperre eine Periode (YYYY-MM, optional one project): every approved entry of the period moves to locked, the immutable ArG working-time record. There is no unlock, and locked time is never billed: billing_generate_invoice (B02) and the retainer draws (B04) take only approved, unbilled entries, so bill the period before locking it. Nothing approved refuses with nothing_to_lock. Gated on the A24 time.approve capability. CONSEQUENCE: Locks the period's approved time as the final working-time record. Locked time can't be billed and there is no unlock, so invoice billable time first.

NameRequiredDescriptionDefault
periodYes
projectIdNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond destructiveHint=true, the description discloses irreversibility, the immutable record it creates, billing consequences, the nothing_to_lock refusal, and the A24 time.approve capability gate. This is exactly the behavioral context an agent needs for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical irreversibility and billing warnings are front-loaded and useful, but the final CONSEQUENCE sentence repeats the no-unlock and bill-before-locking points already stated earlier. It is effective but not maximally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description covers the preconditions, consequence, capability gate, refusal behavior, and billing dependency. Nothing essential about the operation is left implicit except parameter-level idempotency detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It documents the period format (YYYY-MM) and that projectId optionally limits to one project, but it does not explain workspaceId or idempotencyKey, leaving important invocation semantics undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: locking a period and moving every approved entry to the immutable ArG working-time record. It also scopes the operation to a period and optional project, making it distinguishable from approval, billing, and other time tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to bill billable time before locking because locked time cannot be billed, and it names billing_generate_invoice and retainer draws as the dependent alternatives. It also states there is no unlock and that a period with nothing approved refuses with nothing_to_lock, giving clear when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_logA
Destructive

Erfasse Zeit manuell (nachtragen): a finished entry with startedAt and minutes (1 to 1440), billable by default, priced by the rate card valid on the entry day (OP1 snapshot; no_rate_defined with no card, invalid_minutes outside the bound).

NameRequiredDescriptionDefault
notesNo
userIdYes
minutesYes
phaseIdNo
billableNo
projectIdYes
startedAtYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation only declares destructiveHint=true. The description adds useful behavior beyond that: billable by default, pricing via the rate card valid on the entry day, OP1 snapshot behavior, and error cases like no_rate_defined and invalid_minutes. It does not explain the destructive hint or permission/idempotency implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and compact, with no filler. The dense parenthetical error codes and mixed German/English phrasing make it slightly harder to parse than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter create operation with no schema descriptions and no output schema, it covers the core concept, validation range, default billable behavior, and rate-card valuation. It still leaves important context missing, especially required ID parameters, idempotency behavior, and what the tool returns or whether the entry enters approval workflows.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for 9 parameters. The description explains startedAt and minutes (range 1–1440) and the billable default, but leaves workspaceId, userId, projectId, phaseId, notes, and idempotencyKey unexplained. This is only partial compensation for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Erfasse Zeit manuell') and scopes it to a finished/backfilled entry with startedAt and minutes. That clearly separates it from timer-style siblings such as time_start/time_stop and from update/delete siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the main use case—manual/backfill entry of already completed time—so an agent knows not to use it for a running timer. It does not explicitly name alternatives or exclusions such as time_start, time_update, or time_submit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_resolve_rateA
Read-only

Resolve which hourly rate WOULD price time for a user/project/client at a date (OP1, the single resolver): answers the winning card (rateMinor, currency, sourceScope, rateCardId) by precedence client, project, employee, default, or no_rate_defined when no card is valid at that day.

NameRequiredDescriptionDefault
atNo
userIdNo
contactIdNo
projectIdNo
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation read-only, and the description adds genuine behavioral detail: it returns a winning rate card or no_rate_defined, and follows a defined precedence chain. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense, front-loaded sentence that efficiently packs purpose, outputs, precedence, and fallback behavior. The heavy use of parenthetical jargon (OP1, rateMinor, sourceScope) slightly reduces readability but does not waste words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, no output schema, and no parameter documentation, the description covers the main behavior, return shape, and fallback well. But it omits the required workspaceId context and the format of at, and leaves rateMinor/currency/sourceScope undefined, so the description is not fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description partially compensates by linking client/project/employee/date to the relevant parameters and precedence. It still leaves workspaceId unexplained and gives no format or constraint detail for at, so an agent has to infer some parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Resolve which hourly rate would price time'), identifies the resource scope, lists the exact output fields, and gives the precedence rule. It clearly differentiates itself as 'the single resolver' from ambiguous price-related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the resolver's behavior and precedence explicit, so an agent can infer when this tool is relevant. However, it never names alternatives like price_resolve or rate_card_list, nor gives an explicit 'use this when...' or 'use that when...' rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_startA
Destructive

Starte einen Timer auf einem Projekt (B00): creates an open time_entry with started_at now and the rate snapshotted through resolveRate (OP1: client, then project, then employee, then default card). One running timer per user (timer_already_running names the running entry); with no valid rate card it refuses with no_rate_defined rather than minting a 0-rate entry.

NameRequiredDescriptionDefault
notesNo
userIdYes
phaseIdNo
billableNo
projectIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the single destructiveHint annotation: the rate resolution precedence (client → project → employee → default card), the per-user single-timer rule, and two named error outcomes, including the deliberate refusal to create a 0-rate entry. That is exactly the behavioral detail an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Information-dense and front-loaded: verb and resource first, then rate resolution, then constraints and errors. Slightly reduced by internal jargon (B00, OP1, resolveRate) and mixed German/English, but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The behavior of the call is well covered, but with no output schema the description never says what the created entry looks like or returns (e.g. the entry id needed for a later time_stop), and several input parameters remain unexplained. Adequate but with real gaps for a 7-parameter mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters, and the description only loosely touches projectId via 'auf einem Projekt'. Parameters like billable, notes, phaseId, and idempotencyKey get no explanation at all, so the description does not compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: starting a timer on a project that creates an open time_entry with started_at now. The rate-snapshot mechanism and the one-running-timer constraint clearly separate it from siblings such as time_log, time_stop, and time_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition (one running timer per user, error timer_already_running names the conflicting entry) and a clear failure mode when no rate exists. It does not explicitly route to alternatives like time_log for manual entry or time_stop for stopping, so it stops short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_stopB

Stoppe den laufenden Timer: stamps ended_at and computes the full elapsed minutes, midnight crossings included (the entry keeps its started_at day; day-splitting is a report concern). The entry stays status open and editable.

NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behaviors: it sets ended_at, computes elapsed minutes, handles midnight crossings by keeping the original started_at day, and leaves the entry open and editable. These details go beyond the single annotation (destructiveHint=false) and don't contradict it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and packs useful behavioral details into two sentences. It could be slightly more concise, but every sentence contributes valuable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's effect and state changes well, but given zero parameter descriptions in the schema, it should have explained the required inputs. The missing parameter context is a notable gap for an otherwise clear operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fails to explain any of the three parameters (workspaceId, entryId, idempotencyKey). It doesn't clarify what entryId refers to or how workspaceId is used, leaving the agent to infer from names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Stoppe') and resource ('den laufenden Timer'), making clear it stops a running timer. It doesn't explicitly differentiate from siblings like time_update or time_log, but the action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives (e.g., time_update, time_start). It only implies use for stopping a running timer, with no conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_submitB

Reiche die Zeit einer Periode ein (YYYY-MM, optional one project): every finished open entry of the period moves open to submitted; a period with nothing open refuses with nothing_to_submit. A still-running timer is not swept up.

NameRequiredDescriptionDefault
periodYes
projectIdNo
workspaceIdYes
idempotencyKeyNo

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false in annotations, the description carries the burden well: it discloses the open→submitted sweep, the refusal with nothing_to_submit when nothing is open, and that running timers are excluded. It stops short of mentioning idempotencyKey behavior or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single dense sentence that front-loads the core action and adds the sweep/refusal/timer facts efficiently, but the switch from German to English mid-sentence hurts scannability for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating period-level tool with no output schema and near-zero annotation coverage, the description covers the action, edge cases and exclusion. It still leaves the response shape, idempotency semantics and workspace scoping to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain all four parameters. It adds the YYYY-MM period format, which the schema lacks, but 'optional one project' merely restates that projectId is optional, and workspaceId and idempotencyKey are left entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource (submit the time of a period) and describes the exact state transition open→submitted. It is distinguishable from siblings like time_approve, time_lock or time_log, though it never explicitly routes against them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the period/optional-project scope and the nothing_to_submit refusal case, but there is no explicit guidance on when to prefer this over time_approve or time_lock, nor any stated prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_updateA

Bearbeite einen Zeiteintrag from a patch (minutes, billable, notes, startedAt, projectId, phaseId): allowed while open or submitted; from approval onward the record is frozen and refuses with entry_locked. Re-pointing to another project re-resolves the rate snapshot at the entry own capture day; a later rate-card edit never reprices captured time.

NameRequiredDescriptionDefault
patchYes
entryIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the minimal destructiveHint=false annotation, it discloses the approval lock and entry_locked failure mode, plus the rate-snapshot behavior when projectId changes. It still omits idempotency behavior and partial-patch semantics, so it is strong but not fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the two sentences carry useful lifecycle and rate information without filler. The mixed German/English opening and the dense semicolon-separated clauses slightly reduce clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation with no output schema and sparse annotations, it provides the critical state constraint and rate-capture rule. It still leaves idempotency semantics and success/return behavior unstated, so some invocation context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates partially by enumerating the six patch fields and explaining projectId re-rating behavior. However, it says nothing about workspaceId, entryId, or idempotencyKey, leaving several top-level parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies an edit operation on a time entry and enumerates the patch fields, so the resource and action are clear. It does not explicitly distinguish itself from nearby siblings such as time_log, time_submit, or time_delete, and the bilingual opening is slightly awkward.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the allowed lifecycle states: open or submitted entries may be updated, while approval onward freezes the record and returns entry_locked. It does not name alternative tools such as time_submit or time_delete, but the when/when-not condition is explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transition_documentA
Destructive

Advance a document (issue, send, accept, decline, confirm, cancel); issuing an invoice posts via the delegate. Accepting a quote is quotes_accept: an expired quote refuses quote_expired, the acceptance is stamped, and the customer link is spent. CONSEQUENCE: Moves the document to its next status: issuing numbers it and books an invoice or credit note, accepting makes a quote binding. A wrong issued invoice is cancelled with a correcting entry or corrected by a credit note.

NameRequiredDescriptionDefault
toYes
documentIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite destructiveHint=true, the description goes well beyond the annotation by explaining the consequences: issuing numbers the document and books an invoice/credit note, acceptance binds a quote, an expired quote fails with quote_expired, and a wrong issued invoice is corrected by cancellation/credit note. This gives an agent a clear picture of state changes and side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and transition list are front-loaded, and the consequence section is clearly labeled. There is some repetition between 'advance' and 'moves to next status' and between the invoice-issuing clauses, but the added details mostly earn their space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, multi-action transition tool with no output schema and 0% schema coverage, the description explains state consequences well. It is incomplete on parameter semantics and on routing between this generic tool and the many dedicated sibling actions, which an agent still needs in order to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not document workspaceId, documentId, or idempotencyKey. It only hints at valid to values through the transition list and quote_expired, without explicitly tying them to the parameter or explaining idempotency behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'advance' with the resource 'document' and enumerates the supported transitions, so the core action is clear. It stops short of cleanly separating this generic transition tool from dedicated siblings like issue_invoice, send_invoice, quotes_accept, and quotes_decline; the quotes_accept sentence introduces ambiguity rather than resolving it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the tool is for moving documents through issue/send/accept/decline/confirm/cancel states and gives one alternative for quote acceptance ('quotes_accept'). It never states when to prefer transition_document over dedicated tools such as issue_invoice or send_invoice, nor when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trial_balanceA
Read-only

Saldenbilanz (trial balance): every account's opening balance, its debit and credit movement in the period, and its closing balance, in the workspace base currency and integer Rappen. Figures are debit-positive, exactly as the ledger holds them, and drafts are excluded. Pass compareTo={periodStart,periodEnd} for the prior-period column and its delta. reconciles reports three checks by name (debit equals credit, the closing column ties to an independently queried ledger balance, and every account the ledger moved was rendered); it is evidence about coverage and the period boundaries, not proof that an account sits in the right section. groupBy accepts 'kmu' today and refuses anything else, because account-level custom fields are a G00 capability that does not exist yet.

NameRequiredDescriptionDefault
groupByNo
compareToNo
periodEndYes
periodStartYes
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses important behavior: debit-positive convention, draft exclusion, currency/Rappen handling, reconciliation semantics, and the current groupBy limitation. These details give the agent an accurate model of the tool's behavior without overpromising.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence adds operational value: report contents, sign convention, exclusions, comparison parameter, reconciliation caveats, and groupBy constraint. It is front-loaded with the core meaning and then covers edge semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

In the absence of an output schema, the description effectively conveys what the response contains and important caveats. It could be slightly more explicit about the output container or pagination, and does not mention the optional 'source' property inside compareTo, but overall it is sufficient for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well for compareTo and groupBy, explaining their purpose and accepted values. However, workspaceId and the exact date format for periodStart/periodEnd are left implicit, though inferable from context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool's output: every account's opening balance, debit/credit movements, and closing balance. It differentiates this from sibling financial reports by emphasizing account-level detail, base currency, and integer Rappen.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete usage context: compares with a prior period via compareTo, restricts groupBy to 'kmu', and clarifies what the reconciliation checks do and do not prove. It does not explicitly name sibling alternatives or state when not to use this tool, but the parameter-level guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unarchive_accountA
DestructiveIdempotent

Reactivate a soft-archived account (idempotent).

NameRequiredDescriptionDefault
accountIdYes
workspaceIdYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare idempotentHint=true and destructiveHint=true, and the description repeats the idempotency while adding the useful qualifier "soft-archived." It does not explain what reactivation restores, what permissions are required, or why a destructive hint applies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It states the action, target state, and idempotency immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with two required parameters and zero schema description coverage, the definition is too sparse. It leaves workspace scoping and parameter meanings undocumented, and does not compensate for the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only indirectly implies accountId through the word "account." It says nothing about workspaceId, its scoping role, or the expected identifier formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb, "Reactivate," and a specific resource/state, "soft-archived account." This clearly distinguishes the tool from archive_account, delete_account, and update_account, which operate on different lifecycle transitions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by "soft-archived account," meaning the tool applies only to accounts in that state. However, it does not explicitly state when not to use it or name alternatives such as delete_account for permanent removal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unarchive_bank_accountA
Destructive

Wiederherstellen: put an archived Bankkonto back in the pickers. The inverse of archive_bank_account, and a Bankkonto that is already active stays active (no rejection). Nothing about the account changes: this only clears the archived flag.

NameRequiredDescriptionDefault
workspaceIdYes
bankAccountIdYes
idempotencyKeyNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description discloses that already-active accounts are not rejected (an idempotent-like behavior) and that only the archived flag is cleared, nothing else about the account. There is mild tension with destructiveHint=true since the operation is described as changing nothing but a flag, but no readOnly claim is made, so this is extra caution rather than a contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the effect and then the edge case and scope of change; nothing is padded. The leading German 'Wiederherstellen:' label is the only slightly noisy element for an otherwise English description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and only a single annotation, so the description does a good job on behavior, but it leaves the parameters (including idempotencyKey) and any permission or return-value expectations unaddressed. For a mutation tool with zero schema documentation 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.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters (workspaceId, bankAccountId, idempotencyKey), so the description must carry the load, and it names none of them. In particular the presence and meaning of idempotencyKey is left entirely unexplained despite the description's discussion of repeat-call behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (unarchive) and resource (Bankkonto / bank account) and states the concrete observable effect: the account reappears in the pickers. It also explicitly positions itself as the inverse of archive_bank_account, so an agent can distinguish it from siblings like archive_account, unarchive_account and delete_account.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'inverse of archive_bank_account' framing plus the note that an already-active account is left active gives a clear picture of when this tool applies. It stops short of explicit exclusions (e.g. 'do not use for accounts that were never archived' or routing to update_bank_account for other edits).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unarchive_contactB
DestructiveIdempotent

Reactivate a soft-archived contact (idempotent).

NameRequiredDescriptionDefault
contactIdYes
workspaceIdYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, so the parenthetical '(idempotent)' repeats structured data without adding value. The one genuinely additive detail is 'soft-archived', which tells the agent the archive is reversible/soft rather than a hard delete, but permissions, side effects, and the odd destructiveHint on a restorative operation are left unexplained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb and object first. Slightly wasteful because the '(idempotent)' clause merely echoes the annotation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-required-param mutation with no output schema and zero parameter documentation, the description is too thin: it does not say what is returned, what happens on a non-archived contact, or why the tool is flagged destructive. An agent still has to guess at call semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both required parameters (workspaceId, contactId) have 0% schema description coverage, and the description adds nothing about their meaning, format, or scoping role. With two undocumented required params, the description needed to compensate and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Reactivate') and resource ('contact') with a qualifier that scopes it to soft-archived records, which separates it from archive_contact and update_contact. It does not explicitly name a sibling, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'soft-archived contact' implies the precondition for calling it, but there is no explicit when-to-use/when-not-to-use guidance, no note about what happens for a contact that is not archived, and no mention of alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unarchive_cost_centerB
DestructiveIdempotent

Reactivate a soft-archived cost centre (idempotent).

NameRequiredDescriptionDefault
workspaceIdYes
costCenterIdYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The '(idempotent)' note merely restates idempotentHint=true, so it adds no credit. The annotations already declare idempotency and destructiveHint, and the description adds the useful detail that archiving is soft (data retained, not deleted). It does not say whether a non-archived target errors or no-ops, nor what permissions are needed for this mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the action, the target, the required state, and a behavioral hint. Nothing extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema, the core action is covered, but the missing pieces — behavior on non-archived input, permission requirements, and any parameter meaning — leave gaps that matter for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and neither workspaceId nor costCenterId is explained anywhere. The description offers no parameter-level meaning (e.g., whether costCenterId is scoped to the workspace, or accepted formats), so it fails to compensate for the undocumented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (reactivate) and resource (cost centre) with the qualifier 'soft-archived', which pins down the exact state transition. It does not explicitly distinguish itself from siblings such as archive_cost_center, delete_cost_center, or unarchive_account, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Soft-archived' implies the precondition that the cost centre must already be archived, but the description never states what happens if it is not, nor does it route the agent between this and archive_cost_center/delete_cost_center/create_cost_center. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unarchive_itemB
DestructiveIdempotent

Reactivate a soft-archived item (idempotent).

NameRequiredDescriptionDefault
itemIdYes
workspaceIdYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, so repeating '(idempotent)' adds no information. The description says nothing about permission requirements, what state the item returns to, or the effect on related records — gaps that matter for a state-changing tool flagged destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb first and zero padding. The only slack is the parenthetical '(idempotent)', which duplicates an annotation rather than earning space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with annotations and no output schema, the description covers the core action but leaves parameters undocumented and says nothing about return value or failure behavior when the item is not archived. Minimum viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both parameters (workspaceId, itemId), and the description provides no parameter detail at all. Names are guessable but the description does not compensate for the missing schema documentation, which the rubric requires at low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (reactivate) plus resource (item) and a scoping qualifier (soft-archived) make the effect unambiguous and separate it from archive_item/delete_item. It does not explicitly name sibling alternatives, but the resource and action are precise enough for an agent to pick it correctly among the archive/unarchive/delete family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'soft-archived item' implies the precondition for use, so usage is inferable. However there is no explicit statement of when to choose this over delete_item, update_item, or archive_item, and no note on what happens if the item is not archived.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uninstall_pluginA
DestructiveIdempotent

Deinstalliere eine Erweiterung (US-G02.3): disable it first (sweep its registrations), record the removal in the append-only audit_log before the row is gone, then delete the manifest row (plugin manifests are not §H-AUDIT financial data, so a real delete is correct). Traceability rides the audit chain, not an append-only manifest table. CONSEQUENCE: Stops this plugin's third-party code and removes it for good with the rights you granted; your business data stays. To use it again, it has to be installed anew, which by default waits for your OK.

NameRequiredDescriptionDefault
pluginIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint and idempotentHint, but the description adds real behavioral context beyond them: the plugin's code stops, the manifest row is hard-deleted while business data survives, the removal is written to the append-only audit_log before deletion, and reinstallation requires approval. That is exactly the 'what gets destroyed and what remains' detail an agent needs for a destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The verb and destructive consequence land early, and the 'CONSEQUENCE:' block is well placed. But internal ticket codes (US-G02.3, §H-AUDIT) and the audit_log-vs-manifest-table rationale are implementation trivia that cost tokens for a tool-selection decision, and the German/English mix adds friction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, three-parameter mutation with no output schema, the description covers the important ground: irreversibility, data retention, audit behavior, and recovery cost. The remaining gap is scope/user-facing meaning of the required identifiers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden — but it never mentions workspaceId, pluginId, or idempotencyKey. It doesn't even hint at the workspace-scoping or the retry-safety contract implied by idempotencyKey, leaving all three parameters undocumented everywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource (uninstall a plugin) and even spells out the internal sequence (disable → audit → delete manifest row). It implicitly distinguishes itself from disable_plugin by describing the extra deletion step, though it never names that sibling as an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the precondition that the plugin must be disabled first and warns that reinstalling is required to use it again, which is context an agent can act on. However, it never frames this as 'use uninstall when you want permanent removal, use disable_plugin when you only want to pause' — the routing choice is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unlock_periodA
DestructiveIdempotent

Unlock a period (a filing/year seal refuses). CONSEQUENCE: Lifts the period lock, so bookings into it are accepted again; a filed MWST period or a closed year stays sealed. You can lock it again at any time.

NameRequiredDescriptionDefault
periodYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true, and the description adds real value on top: the concrete consequence (postings into the period become possible again), the conditions under which it is refused, and reversibility ('You can lock it again at any time'). It omits who is authorized to unlock and whether the action is audited, which is why it isn't a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses with the consequence front-loaded and no filler; the 'CONSEQUENCE:' label makes the risk scannable. The opening parenthetical '(a filing/year seal refuses)' is slightly compressed to the point of ambiguity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive state-change tool with no output schema, the description covers the effect, the refusal conditions, and reversibility — the essentials for deciding to call it. The remaining gap is parameter-level guidance, notably what form 'period' takes and why idempotencyKey is mandatory.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three required parameters. The description implies the meaning of 'period' only indirectly through 'filing/year seal' (month vs. year), and says nothing about the workspaceId scope or the required idempotencyKey. With the schema carrying no parameter documentation at all, the description should compensate and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Unlock a period') and immediately narrows the scope with the parenthetical that a filing/year seal refuses the unlock. An agent can distinguish this from the sibling lock_period because the effect direction (bookings accepted again) is spelled out. It stops short of naming lock_period explicitly as the inverse operation, so a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear condition for use ('so bookings into it are accepted again') and an explicit exclusion: a filed MWST period or a closed year stays sealed, i.e. the call will not take effect there. No competing alternative tool is named, but the refusal cases effectively route the agent away from futile calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_accountB
DestructiveIdempotent

Rename an account or change its VAT default, its cost-centre flag, or statementIsVoucher ("Beleg = Kontoauszug": the bank statement is the voucher, so a bank line booked to such accounts alone is not counted as missing a Beleg; on by default for 6900 Finanzaufwand). Number and type are frozen.

NameRequiredDescriptionDefault
nameNo
accountIdYes
workspaceIdYes
vatCodeDefaultNo
costCenterAllowedNo
statementIsVoucherNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true. The description adds useful behavioral context by stating that number and type are frozen and by explaining the statementIsVoucher domain rule. However, for a destructive mutation it does not disclose what is destroyed, whether changes affect existing postings, or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence that lists the mutable operations before explaining the obscure statementIsVoucher field. It is reasonably efficient, though the parenthetical explanation is dense and could be structured more clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six parameters, 0% schema description coverage, no output schema, and only idempotent/destructive annotations, the description covers the core mutation fields and the frozen number/type constraint. It still leaves gaps around required IDs, alternative tools, and destructive side effects, so it is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It maps four of the six parameters to business concepts (name, vatCodeDefault, costCenterAllowed, statementIsVoucher) and gives detailed semantics for statementIsVoucher, but it does not explain workspaceId/accountId requirements or the expected format of vatCodeDefault.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb/resource (update an account) and enumerates the mutable fields: name, VAT default, cost-centre flag, and statementIsVoucher. It also states that number and type are frozen, which clarifies scope. It does not explicitly distinguish itself from overlapping siblings such as account_set_tax_default or archive_account.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is for changing certain account fields, but it gives no explicit when-to-use guidance or alternatives. In particular, it does not clarify when to use update_account versus the dedicated account_set_tax_default tool, nor does it mention prerequisites or exclusions beyond the frozen number/type.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_automation_ruleA
Destructive

Patch a rule: its name, trigger, condition or action. The patched shape is validated exactly as a new rule is, so an edit can never leave a rule the engine would have refused to create. The change takes effect on the next event; an archived rule refuses. CONSEQUENCE: Changes what the rule reacts to or does, from the next event on; an enabled rule runs the change unattended. You can change it again, but the earlier version is not kept.

NameRequiredDescriptionDefault
patchYes
ruleIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past destructiveHint=true: it explains that the patch is validated with the same rules as creation, that the effect is deferred to the next event, that an archived rule rejects the call, and — critically for a destructive write — that the previous version is not retained. That is exactly the irreversibility and unattended-execution context an agent needs before mutating a live automation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the operation and its fields, then the validation and timing guarantees. There is mild redundancy: the next-event effect is stated once plainly and again inside the CONSEQUENCE block, which could be merged.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema it covers validation parity, deferred application, archived-rule rejection, and lack of version history. The notable remaining gap is the structure of the nested patch object, which has no schema and only a loose field listing in prose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the 'patch' parameter is an untyped nested object, so the description carries the burden. It does name four patch sub-fields (name, trigger, condition, action), but says nothing about workspaceId, ruleId, or idempotencyKey, and gives no hint of the nested shape's structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Patch') plus the resource and enumerates the editable facets (name, trigger, condition, action), so an agent knows exactly what mutates. It does not explicitly distinguish itself from the cluster of siblings create_automation_rule, enable_automation_rule, disable_automation_rule and archive_automation_rule, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'The change takes effect on the next event; an archived rule refuses' gives a clear precondition and timing constraint for when this tool will or will not have an effect. It stops short of steering the agent to the alternative sibling (disable vs archive) when the intent is to turn a rule off rather than reshape it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_bank_accountA
Destructive

Rename a Bankkonto or correct its details. The IBAN, currency and verknüpftes Konto freeze once the account is referenced by a posted opening balance (account_in_use); the name stays editable for good. CONSEQUENCE: Changes this bank account's IBAN, currency or ledger account; later payment runs and bank bookings use the new details. You can change them back until an opening balance is posted on it.

NameRequiredDescriptionDefault
ibanNo
nameNo
currencyNo
workspaceIdYes
bankAccountIdYes
idempotencyKeyNo
ledgerAccountIdNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=true in annotations, the description carries the main burden and adds meaningful context: IBAN/currency/ledger account freeze after an opening balance is posted, the name remains editable, and later payment runs use the new details. It also notes reversibility before an opening balance is posted, which goes well 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the purpose and the key freeze rule. There is slight redundancy between the freeze sentence and the CONSEQUENCE sentence, but no excessive padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It covers the core mutation behavior well, including downstream effects and reversibility before opening-balance posting. However, for a 7-parameter mutation with no output schema, it omits guidance on required identifiers, idempotencyKey usage, and what the caller should expect after the update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for 7 parameters, so the description must compensate. It adds meaning for name, iban, currency, and ledgerAccountId, but does not explain workspaceId, bankAccountId, or idempotencyKey, leaving meaningful gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific verb and resource: rename or correct details of a bank account. It lists the affected fields (IBAN, currency, linked account, name), so the agent can distinguish it from create/archive/get bank account siblings, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains a key conditional behavior (field freezing after a posted opening balance) but does not explicitly state when to use this tool versus sibling tools like archive_bank_account or set_bank_opening_balance. Usage is implied rather than routable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_company_profileA
DestructiveIdempotent

Update company identity fields (name, legal form, UID, MWST number) and the workspace default Zahlungsfrist (defaultPaymentTermsDays, 0 to 365 days; null clears it). A document whose customer or supplier has no terms of its own falls due that many days after its date. CONSEQUENCE: Changing the MWST number also changes it on the QR-bills of open invoices when they are downloaded or sent again. You can change it back; what customers already received keeps the old number.

NameRequiredDescriptionDefault
uidNo
nameNo
mwstNoNo
legalFormNo
workspaceIdYes
defaultPaymentTermsDaysNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotent/destructive annotations, it discloses the concrete consequence of changing MWST: open invoices' QR-bills change on download/send, the change is reversible, and already-delivered documents keep the old number. It also explains the 0–365 range and that null clears the default payment terms.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded: the update scope comes first, then the payment-terms meaning, then the MWST consequence and reversibility. Each sentence adds distinct operational information, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no output schema, the description covers purpose, field meanings, payment-term semantics, and the main destructive side effect, so an agent can call it safely. It omits whether the update is partial vs full-replacement and does not describe the required workspaceId, which are minor but real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It explains five of six parameters and adds key semantics for defaultPaymentTermsDays (0–365, null clears), but leaves workspaceId unmentioned and gives no format hints for UID/MWST/legalForm.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence uses a specific verb ('Update') and names the resource and exact fields (name, legal form, UID, MWST number) plus defaultPaymentTermsDays. That is enough to distinguish it from read-only siblings such as get_company_profile without relying on the tool name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the write path for company identity and default payment terms, but it never explicitly says when to choose it over get_company_profile or settings tools. There are no exclusions or preconditions; the guidance remains implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_contactB
DestructiveIdempotent

Update a contact from a patch. patch.paymentTermsDays null clears its own Zahlungsfrist back to the workspace default; 0 means due immediately.

NameRequiredDescriptionDefault
patchYes
contactIdYes
workspaceIdYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, so safety framing is carried by structured data. The description adds real behavior for one field (null resets to workspace default, 0 means immediately due), but it never explains what is 'destructive' about this mutation or whether omitted patch fields are left untouched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, and the core action is front-loaded. The second sentence spends all its budget on a single field, but it is dense with meaning rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with a nested payload, 0% schema coverage, no output schema and only two annotation hints. The description should at minimum clarify partial-update behavior for the other fields and what the destructive hint covers; instead it documents one integer field and stops.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the patch object nests address with five subfields plus name, email, partyRole, vatNumber, defaultCurrency — all undocumented anywhere. The description explains only paymentTermsDays (null vs 0), leaving the bulk of the payload undefined; it also introduces the untranslated term 'Zahlungsfrist', which adds ambiguity rather than clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Update a contact from a patch'. An agent can distinguish it from create_contact/archive_contact on verb alone. It does not explicitly contrast with sibling mutation tools, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'patch' implies partial-update semantics, which is useful implicit guidance, but there is no explicit statement of when to use this over archive_contact, unarchive_contact or contacts_merge, and no prerequisites are given for the required workspaceId/contactId.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_documentB
Destructive

Patch a draft document (draft-only; an issued document is immutable and corrected by reversal).

NameRequiredDescriptionDefault
patchYes
documentIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations give only destructiveHint=true, so the description must carry most of the behavioral load. It does add real value by disclosing the draft-only precondition and immutability of issued documents, which annotations do not cover. But it says nothing about patch semantics — whether omitted fields are left alone, whether the lines array replaces or merges, or how idempotencyKey affects retries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The scope constraint is in the first clause and the key exception is immediately after, so an agent can stop reading once it has seen 'draft-only'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with four parameters, a nested patch object, no output schema and only destructiveHint as annotation, the description is too thin. It answers who can be patched but not what patching does to the fields inside the patch or what an agent should expect back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no parameter-level information at all. The nested patch object (lines, notes, dueDate, currency, contactId, supplyDate) and the idempotencyKey are left entirely to the schema, whose field descriptions are almost nonexistent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It pairs a specific verb ('Patch') with a specific resource ('a draft document') and narrows scope to drafts, which separates it from create_document, transition_document, and update_document_template. It stops short of 5 because the sibling set also contains issue_invoice, convert_document and other document-mutating tools that it does not explicitly differentiate from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical states a clear when-not-to-use condition (issued documents are immutable) and points at the intended path for those cases (correction by reversal). It does not name a concrete alternative tool, so routing still requires some inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_document_templateB

Update a template (name, footer, language, optional columns, logo). NEVER changes an already-issued document: issue froze the template content onto the document, so a mailed copy and a later reprint always match; only documents issued after the edit pick it up. CONSEQUENCE: Changes the template for documents issued from now on; documents already issued keep the look they were issued with. You can change it again.

NameRequiredDescriptionDefault
patchYes
templateIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false available, the description carries real weight by disclosing the immutability model: issuing froze content onto each document, so already-issued documents are never altered while future issuances pick up the change. It also signals repeatability ('You can change it again'). It stops short of stating permission requirements, what happens to invalid or unknown patch fields, or the response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key fact is front-loaded, but the 'NEVER changes an already-issued document' sentence and the 'CONSEQUENCE:' sentence restate the same immutability guarantee almost verbatim, doubling length without adding information. Trimming to one precise statement plus the repeatability note would be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with four parameters, a nested patch object, 0% schema coverage, no output schema, and only a destructiveHint annotation, the description covers the versioning semantics well but leaves parameter-level and return-level gaps. An agent could call it correctly for the common case but might mis-handle idempotencyKey or malformed patch contents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the nested `patch` object is opaque in the schema. The description partially compensates by naming the patchable fields (name, footer, language, optional columns, logo), but says nothing about workspaceId, templateId, or what idempotencyKey does, so the compensation is incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb (Update) and resource (template) and enumerates the editable facets: name, footer, language, optional columns, logo. This clearly distinguishes it from read-only siblings like get_document_template or preview_document_template, though it never names which sibling to reach for in borderline cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the effect of updating but never says when to choose this over create_document_template, preview_document_template, set_default_document_template, or archive_document_template. There is no explicit when-to-use, when-not-to-use, or precondition guidance beyond an implicit 'editing an existing template'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_itemC
DestructiveIdempotent

Update an item from a patch.

NameRequiredDescriptionDefault
patchYes
itemIdYes
workspaceIdYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, so the safety profile is carried by structured data. The description adds only 'from a patch', which weakly implies partial merge, but never says whether omitted fields are preserved, whether nulls clear values (relevant given destructiveHint), or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler, which is structurally clean. However, its brevity reflects under-specification rather than disciplined pruning — there is nothing front-loaded about patch scope or required identifiers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Three required parameters plus a nested six-field patch object, no output schema, and annotations that cover only idempotency/destructiveness. For a mutation of this shape the description should explain patch semantics and at least name the editable fields; it does neither.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, yet it only mirrors the 'patch' parameter name. It does not enumerate the mutable fields (name, unit, currency, defaultTaxCode, revenueAccountId, defaultUnitPriceMinor) or clarify that defaultUnitPriceMinor is in minor units or that currency expects an ISO code.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (update an item), and 'from a patch' hints at partial-update semantics. It does not differentiate from siblings such as item_set_tracking_mode, archive_item, or delete_item, which also mutate the same item resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus item_set_tracking_mode, archive_item, delete_item, or create_item. No preconditions (item must exist, workspace scoping) or exclusions are stated anywhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_recurring_scheduleA
Idempotent

Patch a schedule: template, cadence, bounds or autoIssue, as absolute values. Changes affect only FUTURE generations; already produced invoices are A10/A11 documents and stay untouched. A cadence change (interval, customDays, anchorDate) restarts the series at the next occurrence on or after today. An ended schedule refuses with schedule_ended; an end date before the anchor refuses with end_before_anchor. CONSEQUENCE: Changes what a recurring invoice bills, to whom or when, from its next occurrence on; with auto-issue on, without asking again. Invoices already made stay as they are; you can change it again.

NameRequiredDescriptionDefault
patchYes
scheduleIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the forward-only effect (past invoices are A10/A11 documents and untouched), the cadence-restart semantics (next occurrence on or after today), the exact error codes, and that auto-issue will bill without further confirmation. The annotations only supply idempotentHint and destructiveHint=false; the consequential behavior is entirely described here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and generally efficient, but the immutability of already-produced invoices is stated twice ('stay untouched' near the top and again in CONSEQUENCE as 'stay as they are'), and the CONSEQUENCE block largely restates earlier sentences. Trimming that duplication would cost nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and an opaque patch object, the description covers effect scope, timing, idempotency context, and failure modes. It omits permission/authorization requirements and any detail on the patch payload shape, which is the remaining gap given 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the `patch` parameter is an untyped nested object, so the description is the only source of field meaning. It names top-level patch keys and three cadence sub-fields (interval, customDays, anchorDate), but leaves the structure of `template` and `bounds` and the accepted value formats undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (patch a recurring schedule) and enumerates the patchable surfaces: template, cadence, bounds, autoIssue. This cleanly separates it from create_recurring_schedule, pause/resume/end_recurring_schedule, and get/list_recurring_schedules without needing the schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clarifies that values are absolute rather than deltas and documents two refusal conditions (schedule_ended, end_before_anchor), which implicitly tells the agent an ended schedule must be resumed first rather than patched. It stops short of explicitly naming sibling alternatives (resume_recurring_schedule, end_recurring_schedule) as the right route in those cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_saved_viewB
Destructive

Patch a saved view. A personal view may only be changed by the session that owns it; a workspace-shared one, and publishing a personal one, require manage_saved_views.

NameRequiredDescriptionDefault
patchYes
viewIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true; the description adds substantive authorization context — who may mutate a personal view versus a workspace-shared one, and the extra permission needed to publish. It does not explain idempotencyKey behavior, failure modes, or how partial patches merge with existing view state, which are meaningful gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the verb and resource, with no filler. The second sentence is dense and uses "publishing" without defining what publishing a saved view means, which costs some clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with only destructiveHint, no output schema, a nested free-form patch object and zero schema descriptions, the definition should specify what can be patched and what happens to unspecified fields. Authorization is covered well, but the core payload semantics are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the four parameters (workspaceId, viewId, patch, idempotencyKey) are undocumented. The description only indirectly hints at patch contents via "publishing a personal one" and the workspace/personal distinction; the nested patch object's accepted fields and the purpose of idempotencyKey are nowhere explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Patch") and resource ("saved view"), which cleanly separates it from the sibling create_saved_view, delete_saved_view and list_saved_views. It does not explicitly name those siblings, but the verb/resource pair is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives gating conditions (ownership of a personal view, manage_saved_views for shared views and for publishing) rather than an explicit when-to-use / when-not-to-use statement versus alternatives. That is enough to prevent obvious misuse but still leaves the agent to infer when to call update_saved_view instead of create_saved_view.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_annual_reconciliationA
Read-only

The two annual MWST reconciliations of a calendar year as figures (Art. 128 Abs. 2 and 3 MWSTV, the ESTV's Umsatz- and Vorsteuerabstimmung): the class-3 revenue per the books adjusted for the accruals and disposal proceeds the ledger can name against the sum of Ziffer 200 of the year's returns, and the booked Vorsteuer on 1170 + 1171 against the sum of Ziffer 400 + 405, each with its difference and a status (match, warn, or unavailable naming the periods not yet filed). Under the Saldosteuersatz the Vorsteuer half is not applicable; a workspace with no MWST method answers applicable: false. A read.

NameRequiredDescriptionDefault
yearYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds substantial behavioral context: the exact computations, the source fields (Ziffer 200, 400+405, accounts 1170/1171), the status values ('match', 'warn', 'unavailable'), and the condition when it returns 'applicable: false' (Saldosteuersatz or no MWST method). It also explicitly ends with 'A read.' confirming safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence adds substantive detail—legal references, computation logic, status meanings, and method exceptions. It is front-loaded with the main purpose and flows logically. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the reconciliation and the absence of an output schema, the description covers the inputs, computation, statuses, and edge cases. It does not explicitly describe the response JSON structure, but that is partially mitigated by the level of detail about what is returned. It is adequate for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must explain the parameters. It mentions 'calendar year' and 'workspace' implicitly, but does not explicitly state that workspaceId is the workspace identifier and year is the calendar year string. The mapping is inferable but not spelled out, leaving room for ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool returns: the two annual MWST reconciliations as figures, with differences and statuses. It distinguishes from siblings by specifying it covers the annual reconciliation (Art. 128 MWSTV) rather than periodic returns or previews, and mentions the Saldosteuersatz exception.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for annual reconciliation tasks and is clearly read-only. It does not explicitly name alternatives or state when not to use it, but the domain-specific detail makes it unambiguous which VAT reconciliation it addresses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_code_deactivateB
DestructiveIdempotent

Archive a tax code (never deletes; a posted line always resolves its code).

NameRequiredDescriptionDefault
codeYes
workspaceIdYes

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by stating the operation never deletes and that historical posted lines still resolve their code — exactly the kind of consequence an agent needs before mutating tax configuration. It stops short of saying whether the code remains visible/selectable in pickers or how reactivation restores it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with the key safety fact in parentheses. Nothing is wasted and the most important constraint comes immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema and thin annotations, the description covers the destructive/permanence concern well but leaves gaps: which workspace, what state the code ends in, and whether the action is reversible via vat_code_reactivate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the parameter burden, yet it never mentions `workspaceId` or `code`. Only the phrase 'a tax code' hints at the code input; the workspace scoping parameter is entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Archive a tax code') and clarifies that 'deactivate' means archival rather than deletion. It does not explicitly contrast with the sibling vat_code_reactivate or vat_code_upsert, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance. The clause about posted lines resolving their code is a rationalization of the behavior, not a routing rule, and the obvious alternative (vat_code_reactivate) is never mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_code_reactivateA
DestructiveIdempotent

Reactivate an archived tax code, so it appears again on new documents. The exact mirror of vat_code_deactivate; posted lines never depended on the flag.

NameRequiredDescriptionDefault
codeYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond the annotations: reactivation only affects future document selection, and 'posted lines never depended on the flag' reassures that historical postings are untouched. Annotations already cover idempotency and the destructive flag, so the description's contribution is the scope-of-effect statement; it doesn't mention auth requirements or what happens if the code isn't archived.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler: the action and its effect come first, the clarification about past postings second. Nothing to trim and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter state toggle with annotations covering safety and no output schema, the description supplies the important semantics (effect on new documents, no impact on posted lines). The only real gap is that neither parameter is explained despite 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it says nothing about either parameter. 'code' and 'workspaceId' are guessable from their names, but whether 'code' is the VAT code identifier or a numeric code string, and whether workspaceId defaults, is left entirely to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource (reactivate an archived tax code) plus the concrete effect: it appears again on new documents. It also names the sibling it mirrors (vat_code_deactivate), so an agent can distinguish it from vat_code_upsert / vat_code_deactivate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'so it appears again on new documents' clause gives the situation that selects this tool, and 'the exact mirror of vat_code_deactivate' implies the pairing. No explicit exclusion or prerequisite (e.g. that the code must currently be archived), so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_codesB
Read-only

List tax codes (active only by default).

NameRequiredDescriptionDefault
workspaceIdYes
includeArchivedNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares this is a safe read operation, lowering the bar. The description adds one useful behavioral detail — that archived codes are excluded by default and can presumably be included via the includeArchived parameter — which goes beyond what the annotation states. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero filler. The core operation comes first and the default-filter qualifier is appended efficiently. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with a readOnlyHint annotation and no output schema, the description covers the basic purpose and default filtering behavior. However, with 0% parameter documentation in the schema, the lack of any explanation of workspaceId and includeArchived leaves a noticeable gap for an agent preparing a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only touches the archived-filter concept indirectly. It never mentions workspaceId (required) or includeArchived by name, and it does not explain what 'active' means in relation to the parameters. The hint about active-only is helpful but insufficient for a required parameter and a boolean flag.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('List') and resource ('tax codes'), so an agent knows exactly what operation this performs. The parenthetical '(active only by default)' adds a behavioral qualifier that helps distinguish it from sibling tools like vat_code_upsert or vat_code_deactivate, though it does not name an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus the many VAT-related siblings (vat_codes, vat_config, vat_code_upsert, vat_configure, etc.). The use case is only implied by the verb 'List', with no exclusions or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_code_upsertC

Add or edit a tax code at the single tax enumeration point.

NameRequiredDescriptionDefault
codeYes
kindYes
labelNo
rateBpYes
formLineYes
validFromNo
workspaceIdYes
idempotencyKeyNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false; the description must therefore carry the behavioral load. It signals upsert semantics (create-or-overwrite), which is useful, but says nothing about what an edit overwrites, permission requirements, validation of rate/form line, or how validFrom affects historical postings. For a mutation tool this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the verb and resource front-loaded, so it is compact. However, the second half ('single tax enumeration point') is unexplained jargon that consumes space without adding actionable meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, 5 required, zero schema descriptions, no output schema, and only a single annotation, the definition leaves far too much for an agent to infer. It does not describe return values, error behavior, or the meaning of required fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% with 8 parameters, so the description must compensate — and it does not. Non-obvious fields like rateBp (basis points), formLine (tax return line), validFrom, and idempotencyKey are completely unexplained; only 'tax code' loosely maps to the code parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb pair and resource: add or edit a tax (VAT) code. The trailing clause 'at the single tax enumeration point' is jargon that does not sharpen the definition, and no sibling (vat_codes, vat_code_deactivate, vat_configure) is named to differentiate scope, but the core operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to use this versus vat_configure, vat_seed_defaults, or vat_codes for reading. No prerequisites, no mention that deactivation is handled by vat_code_deactivate. 'Single tax enumeration point' hints at a canonical registry but never says so explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_configA
Read-only

Read the current VAT configuration, including the Saldosteuersätze in force today, each Tätigkeit with the Ertragskonten mapped to it, and the elected MWSTV Art. 88 Abs. 6 declaration basis.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint already disclosing that this is a safe read, the description adds useful behavioral context: results are current as of today, the response includes mappings and the elected declaration basis. It does not describe edge cases such as missing configuration, but the added scope detail is meaningful and consistent with the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence front-loads the verb and resource and then appends specific, non-redundant details. There is no filler, and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only tool with no output schema, the description covers the main return contract by listing the three key components. Minor gaps remain, such as behavior when no VAT configuration exists or explicit confirmation that workspaceId is required, but the description is complete enough for correct invocation in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required parameter, workspaceId, with 0% description coverage and no enums or value hints. The description never mentions workspaceId or what it selects, so it adds no parameter semantics beyond the parameter's self-explanatory name and type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact operation (read) and resource (current VAT configuration), then names three concrete content areas: Saldosteuersätze in force today, Tätigkeit-to-Ertragskonten mappings, and the elected MWSTV Art. 88 Abs. 6 declaration basis. This clearly separates it from write/setup siblings like vat_configure and narrower reads like vat_saldo_declaration_basis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance or alternatives are provided. The read-only nature is implied by the verb and the readOnlyHint annotation, but the description does not tell an agent when to choose this tool over related vat_* siblings, nor when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_configureA
Idempotent

Configure VAT: method, timing, registration, VAT number, and the ESTV Bewilligung (asOf picks the statutory rate era). A filer holding several Saldosteuersätze maps each Tätigkeit to its Ertragskonten with saldoActivities, which is how MWSTV Art. 84 Abs. 3 books the Erträge separately per rate. Changing an approval that already governs posted turnover must say which it is: saldoGrant for a new ESTV Bewilligung from a given day, saldoCorrection to rewrite the open one. A change of method or timing is dated with methodChange: { validFrom }, a 01.01, the start of a Steuerperiode (MWSTG Art. 37 Abs. 4, Art. 39 Abs. 3). The one mid-year exception is MWSTV Art. 81 Abs. 2: Saldo to effektiv (timing may change too, Abs. 5) on the day the ESTV adjusted a Saldosteuersatz of this book, stated with basis: mwstv_81_2 on a day a saldoGrant took effect. Any other mid-year day refuses vat_method_change_not_period_start, naming what is unmet. CONSEQUENCE: Sets your MWST registration, method, timing, VAT number and ESTV approval. Earlier approvals stay on record; one already used for a filed period is not rewritten, you record a new one.

NameRequiredDescriptionDefault
asOfNo
methodYes
timingYes
vatNumberNo
registeredYes
saldoGrantNo
saldoRatesNo
workspaceIdYes
methodChangeNo
idempotencyKeyYes
saldoActivitiesNo
saldoCorrectionNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond idempotentHint/destructiveHint annotations, it discloses the mutation's consequence, that earlier approvals remain on record, that an approval already used for a filed period is not rewritten, and that a new one is recorded. It also names a domain error (vat_method_change_not_period_start), which is strong behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the detailed legal/branching rules are relevant to a complex configuration tool. It is dense and legalistic, with multiple clauses in single sentences, but the sentences carry substantive constraints rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the complex approval and method-change behavior well, but for a 12-parameter tool with 0% schema coverage and no output schema it does not document accepted values for method/timing/registered or cover every parameter. An agent can grasp the business rules but may still lack enough schema-level guidance to call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description supplies substantial meaning for nested parameters: asOf selects the statutory rate era, saldoActivities maps activities to Ertragskonten, saldoGrant vs saldoCorrection is distinguished, and methodChange requires a validFrom with statutory dating rules. It still leaves some parameters (e.g. saldoRates, idempotencyKey, workspaceId) and method/timing value domains unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Configure VAT') and enumerates the configurable areas: method, timing, registration, VAT number, and ESTV approval. It is clear about scope, but it does not explicitly distinguish this tool from nearby siblings such as vat_config or set_vat_method.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit conditions for parameter choices: saldoGrant for a new ESTV Bewilligung, saldoCorrection for rewriting the open one, methodChange for dated method/timing changes, and the MWSTV Art. 81 Abs. 2 exception. It lacks a direct statement of when to prefer this tool over sibling VAT tools, but the intra-tool usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_export_ech0217A
Read-only

Export the MWST-Abrechnung for a period as an eCH-0217 v2.0.0 XML file for upload to the ESTV ePortal. Produces a file and transmits nothing: there is no ESTV submission API.

NameRequiredDescriptionDefault
periodEndYesLast day of the reported period, ISO YYYY-MM-DD (inclusive).
periodStartYesFirst day of the reported period, ISO YYYY-MM-DD (inclusive).
workspaceIdYes
typeOfSubmissionNoeCH-0217 typeOfSubmission: 1 Ersteinreichung (default), 2 Korrekturabrechnung, 3 Jahresabstimmung.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds valuable context: it produces a file and transmits nothing, explicitly ruling out an ESTV submission API. This prevents an agent from assuming network transmission. However, it does not elaborate on file delivery (e.g., return value, storage location) or any prerequisites, leaving some behavioral details uncovered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: the first sentence states the core function and format, and the second clarifies a critical non-transmission detail. No wasted words, and the most important information appears immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the tool is relatively simple (read-only export), the lack of an output schema means the agent does not know what the tool returns (e.g., XML content, file path, or download URL). The description does not mention return format or any prerequisites (e.g., VAT data prepared for the period). Given the absence of output schema, more detail would be needed for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides descriptions for periodStart, periodEnd, and typeOfSubmission, covering 75% of parameters. The description adds no additional parameter-specific meaning, leaving workspaceId undocumented. Given the high 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exports the MWST-Abrechnung for a period as an eCH-0217 v2.0.0 XML file, specifying the verb, resource, format, and target (ESTV ePortal). It also distinguishes itself from potential siblings by explicitly noting it does not transmit, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clarifies that the tool only produces a file and does not submit to ESTV, which hints at its non-transmission role. However, it does not explicitly name alternatives like export_vat or vat_return, nor does it state when to prefer this tool over them. The guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_mark_filedA
DestructiveIdempotent

Record that a VAT period was filed with the ESTV, applying the A03 hard lock (reason vat_filed) to its months in one transaction: a month under a soft or an ordinary hard lock is upgraded to the seal, every month is read back, and the filing refuses filing_seal_not_held (and rolls back) unless each month holds the seal. Only a filing period as vat_periods lists it for that year can be marked: any other label refuses not_a_filing_period, and a label touching a switch-year stub refuses switch_year_stub_not_modelled, sealing nothing. Transmits nothing. CONSEQUENCE: Records that you filed this MWST period with the ESTV and seals its months for good. TILL sends nothing; later corrections go to the ESTV as a correction return.

NameRequiredDescriptionDefault
periodYesPeriod label as vat_periods lists it, from 1995: YYYY-Qn (effektiv) or YYYY-Hn (Saldo).
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds substantial context: the A03 hard lock is applied in one transaction, soft or ordinary hard locks are upgraded to the seal, months are read back, failures roll back, and specific refusal codes are given. It also makes the consequence explicit by saying the months are sealed for good and later corrections must go to the ESTV.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action and then discloses lock behavior, validation, rollback, and consequences. It is dense but justified by the number of edge cases, though 'Transmits nothing' and the consequence sentence repeat the same non-transmission point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, transactional filing-lock operation with no output schema, the description covers what gets sealed, what rolls back, which labels are accepted, and what refusals occur. It leaves minor gaps around the return value and the role of idempotencyKey, but the core behavioral contract is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 33%, with only the period parameter described in the schema, so the description carries more burden. It adds strong validation semantics for period, including vat_periods alignment and the not_a_filing_period and switch_year_stub_not_modelled refusals, but it says nothing about workspaceId or idempotencyKey, leaving two required parameters unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: record that a VAT period was filed with the ESTV, applying the A03 hard lock. It distinguishes the operation from transmission by stating 'Transmits nothing' and routes later corrections to the ESTV as a correction return.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states clear conditions for use: only a filing period as vat_periods lists it for that year can be marked, and other labels or switch-year stubs refuse. It also clarifies that TILL sends nothing, so an agent knows this is a recording/sealing step rather than an export or transmission.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_periodsA
Read-only

List the statutory reporting periods of a year (quarterly under effektiv, semi-annual under Saldo) and whether each is filed. In a year the method switched under MWSTV Art. 81 Abs. 2 each method lists its periods inside its own era, and the part of a period the switch cut is listed under stubs (computed by dates, not sealed).

NameRequiredDescriptionDefault
yearNoCalendar year, YYYY, from 1995 (the MWST era).
workspaceIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint, so the description adds real value by explaining that periods are quarterly under effektiv and semi-annual under Saldo, that switch years split periods by era, and that cut portions appear as stubs computed by dates rather than sealed. It still does not cover permissions, ordering, or output representation, but it goes beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences with no filler. The second sentence is dense but every clause carries domain-specific meaning about method-switch years and stubs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description explains the core return concept (periods and filed status) and special stub behavior, but it omits the required workspaceId and does not describe output shape or ordering. It is adequate but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: year has a schema description, but workspaceId has none. The description refers to 'a year' but adds no new parameter semantics for year, and it never explains the required workspaceId, so it does not compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('List the statutory reporting periods of a year') and adds filing status plus method-dependent era behavior. It does not name a sibling tool as an alternative, so it is clear but not fully differentiated from the many vat_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives domain context for method-switch years and stubs, but never states when to choose this over vat_return, vat_preview, vat_settlement_list, or vat_annual_reconciliation. Usage is implied by the period-listing purpose, not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_previewA
Read-only

Preview a line VAT (net/tax/gross, ESTV form line, kind, deductibility) without posting.

NameRequiredDescriptionDefault
taxCodeNo
supplyDateNoSupply date (Leistungsdatum), ISO YYYY-MM-DD; picks the statutory rate era.
amountMinorYes
workspaceIdYes
amountIsGrossNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint=true, which already tells the agent this is a safe read operation. The description adds the key behavioral trait that it does not post (no side effects), which aligns with the annotation. It doesn't add much beyond that—no mention of rate-limit, auth, or what happens with invalid tax codes. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the verb and resource, and includes the key scoping phrase 'without posting'. Every word earns its place. It's concise and structured well.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a preview tool with readOnlyHint=true, the description is mostly complete. It tells the agent what it does and that it doesn't post. However, it doesn't explain the return value (what the preview looks like), and with no output schema, the agent might not know what to expect. Also, the parameter semantics are incomplete (e.g., how amountIsGross interacts with amountMinor). Given the tool's complexity (5 params, 2 required), a bit more detail would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (only supplyDate has a description). The description mentions 'net/tax/gross' and 'amountIsGross' is a parameter, but it doesn't explain the relationship between amountMinor and amountIsGross, nor what taxCode should be. The description adds some context (the preview includes net/tax/gross) but doesn't fully compensate for the low schema coverage. Baseline 3 is appropriate because the description adds some meaning but leaves gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Preview') and resource ('a line VAT'), and lists the key fields (net/tax/gross, ESTV form line, kind, deductibility). It clearly distinguishes itself from posting tools like vat_settlement_post by explicitly saying 'without posting'. However, it doesn't explicitly name a sibling alternative, so it doesn't fully differentiate from other preview tools like vat_settlement_preview or tax_provision_preview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this when you want to preview VAT line details without posting. The phrase 'without posting' gives a clear context and exclusion. However, it doesn't explicitly state when to use this vs alternatives like vat_settlement_preview or tax_provision_preview, nor does it mention any prerequisites (e.g., workspace configuration, tax codes).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_returnB
Read-only

Compute the MWST-Abrechnung for a period: ESTV form lines with base/tax, the payable or credit, and the drill-down entry ids.

NameRequiredDescriptionDefault
periodEndYesLast day of the reported period, ISO YYYY-MM-DD (inclusive).
periodStartYesFirst day of the reported period, ISO YYYY-MM-DD (inclusive).
workspaceIdYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description's 'Compute' aligns with the read-only annotation and adds no side-effect context, which is acceptable given the annotation, but it contributes little beyond the annotation itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that efficiently conveys the verb, resource, and output components with no filler. Every phrase earns its place and the key action is stated first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives a useful sketch of the return output, which is helpful given the absence of an output schema. However, it omits any guidance distinguishing it among the many VAT-related siblings and any calculation prerequisites, leaving the tool's place in the workflow incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%: periodStart and periodEnd are already described in the schema, leaving workspaceId undocumented with no compensating detail. The description repeats the 'period' concept without adding meaning beyond the schema, so it doesn't help the agent understand workspaceId or any other parameter better.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Compute'), a resource ('MWST-Abrechnung'), and a period scope, then lists the output components (ESTV form lines, payable/credit, drill-down entry ids). This is clear and precise, though it does not explicitly name sibling tools for differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus closely related siblings like vat_preview, vat_settlement_preview, or vat_export_ech0217. The description implies it computes the official VAT return but doesn't state exclusions, prerequisites, or alternative routing, leaving the agent to infer selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_saldo_declaration_basisA
DestructiveIdempotent

Elect, or withdraw, the MWSTV Art. 88 Abs. 6 simplification for one Steuerperiode: highest_rate declares the whole taxable turnover at the highest approved Saldosteuersatz on one Ziffer, per_activity restores the Abs. 1 split per Tätigkeit. It is voluntary and usually raises the tax due, so the engine never applies it on its own. CONSEQUENCE: Chooses whether this tax year's net-rate turnover is declared at the highest approved rate or split per activity; the first usually raises the tax. You can withdraw it until a period of the year is filed.

NameRequiredDescriptionDefault
basisYes
taxPeriodYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint and destructiveHint, and the description adds genuinely new behavioural context on top: that the election is never auto-applied by the engine, that it typically increases the tax, and that withdrawal is possible only until a period of the year is filed. It does not, though, say what happens on a rejected attempt after filing or what the response contains, and it never ties `idempotencyKey` semantics to the retry story.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and reasonably short, but the 'CONSEQUENCE:' sentence restates the opening almost verbatim, and the fact that the election raises the tax is stated twice ("usually raises the tax due" and "the first usually raises the tax"). That redundancy costs space the undocumented parameters badly needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description is the only source of behaviour, and it does cover the core mechanic plus the withdrawal deadline. Gaps remain for a mutation tool: no indication of the error state when the period is already filed, no note on idempotency-key reuse, and heavy unglossed jargon (Ziffer, Saldosteuersatz, Tätigkeit) that a general agent may not resolve.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are four required parameters, so the description carries the full burden. It explains `basis` well (two named values with consequences) and gestures at `taxPeriod` via "one Steuerperiode", but `workspaceId` and especially `idempotencyKey` are completely unaddressed, and `basis` is a bare string in the schema with no enum, so the agent must infer that only two values are legal from prose alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear specific verb pair (elect/withdraw) tied to a named legal mechanism (MWSTV Art. 88 Abs. 6) and to a concrete outcome (highest rate vs. split per Tätigkeit). The two `basis` values are spelled out with their effect, so the agent knows exactly what it is switching. It loses the top mark only because it never positions itself against the obvious sibling `vat_saldo_eligibility`, so the agent can't tell from this text whether it should check eligibility first.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"It is voluntary and usually raises the tax due, so the engine never applies it on its own" plus "You can withdraw it until a period of the year is filed" gives real use/when-not-to-use context and a hard timing constraint. However, no alternative tool is named, so there is no explicit routing to `vat_saldo_eligibility` or `vat_config` for agents who arrive without knowing the election exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_saldo_eligibilityC
Read-only

The MWSTG Art. 37 Abs. 1 Saldo eligibility limits in force today (both halves of the cumulative test, era-scoped, boundary 1.1.2024) beside the measured steuerbarer Umsatz of one calendar year (Ziffer 299, computed by the same path as the Abrechnung). Never a verdict: eligibility turns on EXPECTED turnover (ESTV practice, MWST-Info 12) and on a tax-due half that needs a rate the ESTV has not granted yet, so this read compares and stops.

NameRequiredDescriptionDefault
yearNo
workspaceIdYes

TDQS

C2.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description doesn't need to repeat that. It adds useful behavioral context: that this tool 'compares and stops' and does not issue a verdict, and that eligibility depends on expected turnover and an ungranted rate. This goes beyond the read-only hint and clarifies the tool's scope and limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is verbose and dense, packed with legal references and technical terms (MWSTG Art. 37 Abs. 1, Ziffer 299, era-scoped, boundary 1.1.2024). While it front-loads the main purpose, the overall text is overly complex and not concise. An agent would need significant parsing to extract the core message, and the style hinders quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should explain what the tool returns. It states it provides the limits and the measured turnover, and that it 'compares and stops', which gives some idea. However, it does not specify the output structure, does not explain the parameters, and omits details about how the comparison is presented. Given the tool's complexity and the absence of output schema, this is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% – the description does not mention the 'year' or 'workspaceId' parameters at all. It refers to 'one calendar year' but never explicitly ties that to the 'year' input, and it doesn't explain the required workspaceId or the expected format for year. Since the description must compensate for the missing schema descriptions, this is a severe gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific purpose: comparing MWSTG Art. 37 Abs. 1 Saldo eligibility limits with the measured steuerbarer Umsatz. It is domain-specific and distinguishes itself from other vat tools (e.g., vat_preview, vat_return) by focusing on eligibility comparison, not on filing or calculation. However, the heavy jargon makes it less accessible without domain knowledge, so it's not a full 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (when needing the comparison of limits and measured turnover) and explicitly warns 'Never a verdict', which is a clear exclusion. But it does not name alternative tools or specify conditions for choosing this over siblings like vat_saldo_generations or vat_settlement_preview. The guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_saldo_generationsA
Read-only

The Bewilligungsverlauf: every ESTV Saldosteuersatz approval this workspace has recorded, oldest first, with the days each governed and the Tätigkeiten and Ertragskonten it carried. Under Saldo no rate is stamped on a journal line, so this history is the only evidence of what a filed period was computed with.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description does not contradict this. It adds value beyond the annotation by specifying the output contents (days, activities, accounts), ordering (oldest first), and the business reason. No side effects or auth details, but read-only nature is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The main purpose is front-loaded, then details and rationale. It is appropriately sized for a simple read-only list tool, though it could be slightly more compact without losing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one parameter, no output schema, and read-only annotation, the description conveys the return contents (list of approvals with specific fields) and the ordering. It does not mention pagination or limits, but for a simple list tool this is acceptable. The business context is also explained, making it complete for agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (workspaceId) with no description coverage. The description implies workspace context ('this workspace') but does not explicitly explain the parameter. Since it's a trivial identifier, the schema's requirement is self-evident, but the description does not add explicit semantics. Baseline 3 is appropriate given the minimal schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all ESTV Saldosteuersatz approvals (Bewilligungsverlauf) for the workspace, oldest first, with specific details (days, Tätigkeiten, Ertragskonten). It names a specific verb (list) and resource, and the rationale (only evidence of computed rate) distinguishes it from related VAT tools like vat_saldo_eligibility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides strong context: under Saldo method no rate is stamped on journal lines, so this history is the only evidence of what a filed period used. This implicitly tells when to use it (when needing to verify a filed period's rate) but does not explicitly name alternatives or exclusion conditions. Clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_seed_defaultsC
Idempotent

Seed the default Swiss tax-code set (idempotent).

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, and the description simply restates 'idempotent' rather than adding context. It does not say whether a second run overwrites locally customised codes, whether existing codes are left untouched, or what permissions are needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with the key qualifier '(idempotent)' appended, and the scoping fact 'Swiss default set' is front-loaded. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating seed operation with no output schema and zero parameter documentation, the description leaves too much open: what gets created, how many codes, what happens on conflict, and what the caller should expect on return. The restated idempotency hint is the only behavioural signal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single required parameter, workspaceId, is never mentioned in the description. Nothing is added about whether the seed is scoped to that one workspace or what a missing/invalid id implies, so the description does not compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Seed the default Swiss tax-code set'. An agent can tell what it creates without opening the schema. It does not, however, distinguish itself from nearby siblings like vat_configure, vat_config, or vat_code_upsert.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus vat_configure or vat_code_upsert, no prerequisites, and no statement of the condition under which seeding is appropriate (e.g. empty workspace). Usage has to be inferred 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.

vat_settlement_listA
Read-only

List the MWST-Saldierungen on record, newest period first, posted and reversed, with the moved figures and the entry ids. year (YYYY) narrows to one Steuerperiode. A read.

NameRequiredDescriptionDefault
yearNo
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true, and the description reinforces this with 'A read.' It adds valuable behavioral context beyond the annotation: results are sorted newest first, reversed settlements are included, and the response contains moved figures and entry IDs. It does not mention pagination or rate limits, but the read-only safety profile is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single information-dense sentence plus the short clarification 'A read.' It front-loads the core purpose and includes ordering, inclusivity, fields, and filtering without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does well by naming the returned data (moved figures, entry IDs) and specifying ordering and inclusion of reversed entries. The required workspaceId is not described, and pagination is absent, but the tool is a simple list and the read-only annotation reduces the burden. Overall, it is complete enough for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain the year parameter with format and meaning ('year (YYYY) narrows to one Steuerperiode'), but it says nothing about the required workspaceId parameter beyond what the schema's name implies. This leaves a gap in parameter-level guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List'), a specific resource ('MWST-Saldierungen'), and adds concrete detail: newest period first, posted and reversed entries, moved figures, and entry IDs. This clearly distinguishes it from related settlement tools like vat_settlement_post or vat_settlement_reverse.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it by saying 'A read' and by describing list behavior, and it explains the optional year filter. However, it does not explicitly name sibling tools or state when not to use it versus vat_settlement_preview/post/reverse. Usage context is present but exclusions are left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_settlement_postA
Idempotent

Book the MWST-Saldierung the preview showed: transfer the filed period's balances on 2200, 1170 and 1171 to 2201 (MWST-Abrechnungskonto), dated the period end, source='vat_settlement', so the three tax accounts read zero and 2201 carries what the ESTV is owed. Admitted inside the filed, hard-locked period under three enforced conditions (no VAT trace, only the tax accounts, never into a year-close seal); the filed return and the Abstimmung are unchanged by it. Refuses period_not_filed before the filing, nothing_to_settle on an empty period, already_posted while a settlement of the period stands, period_locked with reason year_close on a sealed year. Idempotent on idempotencyKey for as long as the settlement that key booked still stands; a key whose settlement was reversed refuses already_reversed_key (post again under a new key, which books a new settlement). The correction is vat_settlement_reverse. CONSEQUENCE: Moves the filed period's MWST balances from 2200, 1170 and 1171 to 2201; the filed return does not change. If it is wrong, you reverse the settlement and book it again.

NameRequiredDescriptionDefault
periodYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the exact accounting effect, the fact that the filed return and Abstimmung are unchanged, the enforced conditions, the refusal codes, and nuanced idempotency behavior including already_reversed_key. This is unusually complete behavioral disclosure for a high-stakes posting tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action and accounting movement, and the CONSEQUENCE label makes the critical effect easy to scan. It is somewhat repetitive about the filed return remaining unchanged and the reverse-and-rebook correction, but the length is largely justified for a risky VAT posting operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It covers purpose, prerequisites, enforced conditions, refusal codes, idempotency edge cases, side effects and correction path, which is strong given the complexity. The remaining gaps are the unspecified workspaceId and period format, and no description of the success response, though there is no output schema to explain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description has to carry parameter meaning. It explains the period context and gives detailed semantics for idempotencyKey, but it never explains workspaceId and does not specify the expected format for period.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise action: book the MWST-Saldierung by transferring the filed period's balances from accounts 2200, 1170 and 1171 to 2201, dated the period end and tagged source='vat_settlement'. It also clearly distinguishes this posting action from the preview and from the correction tool vat_settlement_reverse.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to book what the preview showed, lists the three admission conditions for the filed hard-locked period, and enumerates refusal states including period_not_filed, nothing_to_settle, already_posted and period_locked. It also names vat_settlement_reverse as the correction path and explains the reversal-and-rebook workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vat_settlement_previewA
Read-only

Preview the MWST-Saldierung of one filed period (period is the A07 label, 2026-Q3 or 2026-H1): the booked movement on 2200 (Umsatzsteuer), 1170 and 1171 (Vorsteuer) over the period beside the return's Ziffer 399 and 400 + 405 with the differences, and the exact lines the post would book (Dr 2200 / Cr 2201, Dr 2201 / Cr 1170, Dr 2201 / Cr 1171; under the Saldosteuersatz the flat-rate tax due against 3809). Settlement entries and their reversals are excluded from the read, so a settled period previews as settled, never twice. A read: nothing is posted.

NameRequiredDescriptionDefault
periodYes
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description reveals the important behavioral nuance that settlement entries and their reversals are excluded, so a settled period previews as settled, never twice. It also specifies exactly what bookkeeping lines would be posted and reiterates that nothing is posted. This goes well beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed yet efficiently structured: it opens with the core purpose, defines the period format, explains the preview contents, calls out the exclusion of settlement entries, and ends with a read-only assurance. Each sentence adds necessary information, and there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema and only a readOnlyHint annotation, the description fully carries the burden of explaining the tool's behavior. It clearly describes the inputs, the detailed contents of the preview (accounts, Ziffer numbers, differences, booking lines), special edge-case handling, and confirms no post is made. This is sufficient for an agent to understand the operation and its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, leaving both parameters undocumented. The description compensates by explaining the period parameter format ('A07 label, 2026-Q3 or 2026-H1') and its role as a filed period. workspaceId is not described, but it is a recurring global parameter across the sibling toolset, so the description meaningfully clarifies the more ambiguous parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Preview the MWST-Saldierung of one filed period.' It details what the preview includes (movements on accounts 2200, 1170, 1171; Ziffer 399 and 400+405; differences; and booking lines) and clearly states 'A read: nothing is posted,' distinguishing it from posting tools like vat_settlement_post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear by labeling it a 'Preview' and emphasizing read-only behavior. It implies this is for analysis before any posting, but does not explicitly name alternative tools or state conditions such as 'use vat_settlement_post for actual posting.' The guidance is strong 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.

vat_settlement_reverseA
Idempotent

Reverse a posted MWST-Saldierung with a reversing entry dated the period end, so 2200, 1170, 1171 and 2201 net to zero again inside the settled period; the settlement row reads reversed and keeps its history, and a later vat_settlement_post for the period books a new settlement. This is the ONLY way to reverse a settlement entry: the generic reverse_entry refuses it with owned_by, because the settlement row must move with the mirror. Refuses not_found and already_reversed. Idempotent on idempotencyKey. CONSEQUENCE: Reverses the MWST settlement with a correcting entry dated the period end; the settlement stays on record as reversed. You can then book a new settlement for the period.

NameRequiredDescriptionDefault
workspaceIdYes
settlementIdYes
idempotencyKeyYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotency and non-destructiveness, but the description adds the accounting effect, period-end dating, history retention, owned_by refusal, not_found/already_reversed behavior, and idempotency key semantics. This is rich behavioral context beyond structured fields and does not contradict destructiveHint=false because the settlement remains on record as reversed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and alternative-routing warning are front-loaded, and the structure is clear. The CONSEQUENCE sentence largely repeats the opening reversal effect, so the text is slightly longer than necessary but still appropriately structured for a high-stakes mutation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex settlement-reversal mutation with no output schema, the description covers effects, history retention, refusals, idempotency, and the next step. Only workspace scoping is thin, but the operational behavior an agent needs is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema itself explains none of the three required parameters. The description indirectly clarifies settlementId through 'settlement row' and idempotencyKey through 'Idempotent on idempotencyKey', but workspaceId is never mentioned and no formats or scoping are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reverse a posted MWST-Saldierung with a reversing entry dated the period end. It distinguishes itself from the generic reverse_entry and names the related vat_settlement_post flow, so an agent can identify its role immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says this is the ONLY way to reverse a settlement entry and that the generic reverse_entry refuses it with owned_by. It also states the post-reversal step and the refusal cases, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vendor_portal_grantA
Destructive

Gib einem Lieferanten Portal-Zugang frei (US-F03.1): mint a scoped, expiring vendor grant over F02's shared grant engine (kind=vendor, no second token path). The contact must be a SUPPLIER (party_role vendor|both), else contact_not_found (the same opaque code a missing contact returns, no oracle). scopes default to the vendor set [{kind:"pos.read"},{kind:"remittance.read"}]. The token is CSPRNG >=256-bit; only its SHA-256 hash is stored and the one-time link is returned once (tokenOnce/localLink), never re-derivable. expiresAt in the past is refused (expiry_in_past); longer than the 90-day max is CLAMPED (clamped:true). Posts nothing (OP4: mints the local artifact and stops, hosted:false/reason:cloud_tier). idempotencyKey replays the original grant. CONSEQUENCE: Gives this supplier a link to their own purchase orders and payment advices, for at most 90 days. You can revoke it at any time; what they already saw cannot be taken back.

NameRequiredDescriptionDefault
actorNo
scopesNo
contactIdYes
expiresAtYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the single destructiveHint annotation: opaque contact_not_found (no oracle), CSPRNG >=256-bit token with only SHA-256 hash stored and one-time non-re-derivable link, past expiresAt refused while >90 days is CLAMPED, posts nothing (hosted:false/reason:cloud_tier), and the CONSEQUENCE line states revocation is possible but already-seen data cannot be recalled. This is consistent with destructiveHint=true rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The action is front-loaded in the first clause and each subsequent sentence adds a distinct constraint or return-value fact. It is dense and the German/English mix in the opening clause plus the spec-code citations (US-F03.1, OP4) make it wordier than necessary, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so the description usefully names the returned artifacts (tokenOnce/localLink, clamped:true, hosted:false/reason). Combined with error codes and the 90-day cap, an agent has nearly everything needed; only actor/workspaceId semantics remain undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description must carry the parameters, and it explains contactId (must be supplier role), expiresAt (past refused, 90-day clamp), scopes (default vendor set), and idempotencyKey (replay semantics). Only actor and workspaceId are left unexplored, so the compensation is strong but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Gib einem Lieferanten Portal-Zugang frei" plus "mint a scoped, expiring vendor grant over F02's shared grant engine (kind=vendor, no second token path)" is a specific verb + resource + implementation scope. The kind=vendor framing separates it from generic portal grant siblings such as portal_grant_create, so an agent can route without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is present but indirect: the contact must be a SUPPLIER (party_role vendor|both), else contact_not_found, and idempotencyKey replays. There is no explicit "use this instead of X" routing versus portal_grant_create or portal_grant_send, and no when-not case, so the agent must infer the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vendor_portal_grants_listA
Read-only

Liste die Lieferanten-Portalfreigaben (P5): every vendor grant, optionally per contact and per status (draft/active/revoked/expired), each with its hosted:false truth. Reuses F02's grant read model filtered to kind=vendor; savedViewId applies a G00 saved view over the portal_grant entity kind.

NameRequiredDescriptionDefault
statusNo
contactIdNo
savedViewIdNo
workspaceIdYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already declaring the safety profile, the description adds useful scoping context: the hosted:false truth, the F02 grant read model reuse, and the G00 saved-view application. But it omits behavioral details an agent might want, such as pagination behavior, result ordering, or whether the read model excludes certain grants by default.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences that front-load the core purpose and filter capabilities before the implementation notes. Every clause earns its place, though the internal references (F02, G00) introduce jargon that a non-expert agent may need to resolve.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with readOnlyHint and no output schema, the description is mostly adequate: filters, status values, and scoping are covered. However, with no output schema, return shape and pagination are not described at all, and the expected response contents are only vaguely implied by 'each with its hosted:false truth.'

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden — and it compensates well: it documents that status accepts draft/active/revoked/expired values (crucial, since the schema has no enums), explains contactId filters per contact, and explains that savedViewId applies a G00 saved view over the portal_grant entity kind. Only workspaceId is left unexplained, which is a common contextual parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Liste/list) and resource (Lieferanten-Portalfreigaben / vendor grants), and clarifies scope: every vendor grant with optional contact/status filtering and hosted:false semantics. It partially distinguishes itself from siblings like portal_grant_list via 'filtered to kind=vendor' and 'hosted:false truth', though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: the description states the available filters (per contact, per status) and the saved-view behavior, which tells an agent what this call is for. However, there is no explicit when-to-use vs. alternatives guidance — it never says 'use X instead for hosted grants' or names portal_grant_list as the sibling covering hosted grants.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vendor_portal_posA
Read-only

Liste die offenen Bestellungen eines Lieferanten (US-F03.2, P5): a scoped read model over D02 purchase_orders + po_lines, filtered to the supplier's own contact, status IN (sent, received) only (draft/closed/cancelled are D02 internal state, never exposed), and workspace_id (H-TENANT). Pass grantToken for the supplier/agent path (the grant's own contact_id is the fence; an expired/revoked/foreign token returns grant_invalid, no oracle; the grant must carry the pos.read scope) OR contactId for the operator "Sichtbar für Lieferant" preview. Reads only, mutates nothing.

NameRequiredDescriptionDefault
contactIdNo
grantTokenNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already set, the description adds meaningful context: it explains token failure behavior (expired/revoked/foreign token returns grant_invalid, no oracle), the required pos.read scope, and that certain statuses are never exposed. This goes beyond the annotation and clarifies the read-only nature without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient, front-loading the purpose and then packing in scope, filters, auth modes, and safety in roughly three sentences. Some jargon (US-F03.2, D02, H-TENANT) adds precision, though it may slightly reduce readability for newcomers; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with three parameters and no output schema, the description covers the essential context: data source, filtering rules, authentication paths, error behavior, and side-effect safety. It doesn't describe the return shape or pagination, but the lack of an output schema makes that less critical; overall it gives enough for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does: it explains workspace_id as the H-TENANT filter, grantToken as the supplier/agent auth path with the scope requirement, and contactId as the operator preview path. It does not spell out types or mutual exclusivity, but it conveys the semantic role of each parameter far better than the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Liste die offenen Bestellungen eines Lieferanten' (list a supplier's open orders). It further distinguishes this from sibling tools by defining it as a 'scoped read model' over D02 purchase_orders + po_lines with explicit status and workspace filters, so an agent can tell it apart from other vendor_portal_* and PO tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit routing guidance: 'Pass grantToken for the supplier/agent path ... OR contactId for the operator preview.' It also clarifies which statuses are excluded ('draft/closed/cancelled are D02 internal state, never exposed'), telling the agent when not to rely on this tool. It does not name specific alternative tools for those cases, so a small gap remains.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vendor_portal_remittance_createA
Destructive

Erstelle ein Zahlungsavis (US-F03.3): SNAPSHOT the A14 payment and its A17 vendor-bill allocations into a remittance_advice + per-bill lines (integer-Rappen values copied verbatim, per-line H-FX txn+base+rate), and file a rendered advice artifact into E00 (artifact_document_id). POSTS NOTHING: A14 already posted the payment (P3 by having no posting at all). The paymentId must be an OUTGOING supplier settlement with >=1 vendor-bill allocation, else payment_not_found (opaque, no cross-supplier oracle). idempotencyKey (scoped by paymentId) replays the same advice; without a key a re-file supersedes the current advice (supersedes_id), never a silent overwrite. Artifact-and-stop (OP4: transmitted:false/reason:cloud_tier). CONSEQUENCE: Creates a payment advice for this supplier payment; a supplier with portal access sees it at once. It cannot be withdrawn; a new advice for the same payment replaces it as the current one.

NameRequiredDescriptionDefault
actorNo
paymentIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint=true annotation: discloses that nothing is posted to the ledger, that the advice is immediately visible to the supplier, that it cannot be withdrawn and is only superseded (supersedes_id), that the artifact is gated at cloud_tier (transmitted:false), and that payment_not_found is intentionally opaque. These are exactly the irreversible-side-effect details an agent needs before calling a mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and an explicit 'POSTS NOTHING' warning, and the closing CONSEQUENCE sentence is well placed. However it is dense with unexplained internal codes (A14, A17, H-FX, E00, OP4, P3, US-F03.3) that inflate length without adding meaning for an outside caller.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param mutation with only a destructiveHint annotation and no output schema, the description covers side effects, idempotency, supersede behaviour, error behaviour and artifact state. It stops short of saying what the response contains (the new advice/artifact identifiers), which an agent would need to chain follow-up calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load, and it does for the two non-obvious params: paymentId's required type/state and idempotencyKey's scoping and replay/supersede semantics. actor and workspaceId get no explanation, leaving part of the schema undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Erstelle ein Zahlungsavis') and immediately disambiguates it from the read-side siblings by describing it as a snapshot-and-file operation over an A14 payment plus A17 allocations. An agent can tell it apart from vendor_portal_remittances or vendor_portal_remittance readers without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States clear preconditions: paymentId must be an OUTGOING supplier settlement with >=1 vendor-bill allocation, otherwise payment_not_found; and it explains the idempotencyKey vs. supersede choice. It never explicitly names a sibling alternative (e.g. the list tool for reviewing existing advice), so no exclusions are spelled out, only invocation conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vendor_portal_remittancesA
Read-only

Liste die Zahlungsavise eines Lieferanten (US-F03.3 portal read, P5): the remittance advices scoped to the supplier's own contact, same fences as vendor_portal_pos (grantToken requires the remittance.read scope, or contactId for the operator preview). Each advice carries its per-bill lines with txn+base+rate. savedViewId applies a G00 saved view over remittance_advice (its stored presets never widen the contact fence). Reads only.

NameRequiredDescriptionDefault
contactIdNo
grantTokenNo
savedViewIdNo
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds meaningful behavioral detail: it is explicitly read-only, it never widens the contact fence even when a saved view is applied, and each advice carries per-bill lines with txn+base+rate. This gives an agent important expectations about side effects and data shape beyond what the annotation alone provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but not bloated; every sentence adds a distinct fact about scope, auth, output, or saved-view behavior. The mixed German/English phrasing and the packed parentheticals slightly reduce readability, but the purpose is front-loaded and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description compensates well by describing the returned remittance advice lines (per-bill lines with txn+base+rate) and the auth/scoping constraints. It does not mention pagination, ordering, or the semantics of the required workspaceId, but the essential call-decision information is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden, and it does so for three of the four parameters: grantToken requires remittance.read, contactId is used for operator preview, and savedViewId applies a G00 saved view without widening the fence. The required workspaceId is not explained, which is a minor gap for a required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear specific verb and resource: 'Liste die Zahlungsavise eines Lieferanten' (list the remittance advices of a supplier). It also differentiates the scope from sibling tools by stating the data is scoped to the supplier's own contact and by referencing vendor_portal_pos as the same fence, so an agent can distinguish this list operation from related portal tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when the tool is appropriate: it is a portal read scoped to the supplier's contact, with the same fences as vendor_portal_pos. It also explains the two auth paths (grantToken requiring remittance.read, or contactId for operator preview), though it does not explicitly list exclusions or when to prefer a different sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vendor_portal_revokeA

Widerrufe einen Lieferanten-Portalzugang (US-F03.4): stamps revoked_at so any read of the token now denies as grant_invalid. Fenced to kind=vendor (a non-vendor id returns not_found), so the vendor verb never touches a customer grant. The row is NEVER deleted (the grant history is the revDSG access trail). Revoking an already-revoked grant is a no-op returning the original state.

NameRequiredDescriptionDefault
actorNo
grantIdYes
workspaceIdYes
idempotencyKeyNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the destructiveHint=false annotation: it discloses the mechanism (stamps revoked_at), the downstream effect (reads deny as grant_invalid), that the row is never deleted for audit-trail reasons, and that repeat calls are idempotent. This is exactly the mutation context an agent needs before acting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the action and requirement tag, each carrying distinct information (mechanism, scope fence, durability, idempotency). No filler, though the German/English mix makes it marginally denser to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation with no output schema and only a destructiveHint annotation, the behavioral picture is nearly complete, including the return semantics of already-revoked calls. The remaining gap is undocumented parameters, which is the one thing an agent still has to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never explains grantId, workspaceId, actor, or idempotencyKey. The idempotency behavior is implied behaviorally, but nothing says what the params are or how they interact, so an agent must guess from names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Widerrufe einen Lieferanten-Portalzugang') and cites the requirement ID US-F03.4. Crucially it scopes itself to kind=vendor and explicitly says it never touches a customer grant, which separates it from the near-identical portal_grant_revoke sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The fencing condition ('a non-vendor id returns not_found') plus the no-op-on-already-revoked rule tell an agent exactly when this call is appropriate and safe to repeat. It stops short of naming the customer-grant sibling as the alternative to use instead, leaving the routing inference implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_backupA
Read-only

Verify a .tillbackup/.tillexport file`s per-table checksums and schema-version compatibility without writing anything, reporting entry count and whether every posted entry balances.

NameRequiredDescriptionDefault
sourceYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint=true, and the description reinforces that by stating 'without writing anything.' It adds behavioral transparency by listing exactly what the verification covers (per-table checksums, schema-version compatibility, entry count, balance). It doesn't state the actual return payload structure, but no output schema exists, so the description carries reasonable weight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One long but information-dense sentence. Every clause adds meaning: file types, what is verified, that it is side-effect free, and what it reports. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only verification tool, the description covers purpose, side-effect safety, and the check outputs. It doesn't detail the return schema (e.g., JSON structure of checksum results), but with no output schema provided and the large sibling list, this is a minor omission. The main gap is how to specify which file to verify, though the file-type mention in the description helps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does mention the file type ('.tillbackup/.tillexport'), which gives meaning to the 'source' parameter, but it does not explain what form the source takes (path, uploaded file, URL) or how to reference it. This is minimal but not complete compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Verify') and resource ('.tillbackup/.tillexport' files) and states exactly what it checks: per-table checksums, schema-version compatibility, entry count, and balance. This distinguishes it from sibling backup/restore tools like create_backup, list_backups, delete_backup, and restore_backup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys that this is a validation/verification step for backup/export files, fitting alongside create_backup/list_backups/restore_backup. It doesn't explicitly mention when not to use it or name alternatives like list_restorable_backups, but the context of 'verifying a file' is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

voice_buildA

Lerne den Schreibstil aus gesendeten Nachrichten: reads the outbound corpus of one E04 mail account (plus optional E00 documents by id), distils a readable style card, and embeds every exemplar through the LOCAL OP6 runtime, storing locators, vectors and hashes and NEVER an excerpt (Art. 321 index-never-copy). Fewer than 20 sent messages answers corpus_too_small with the honest have/need counts; no installed runtime answers needs_local_runtime, never a cloud fallback; no chosen model answers needs_model_selection. Re-running with a new key rebuilds and supersedes by row, the previous profile retained.

NameRequiredDescriptionDefault
nameNo
accountIdYes
documentIdsNo
workspaceIdYes
idempotencyKeyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only destructiveHint=false in annotations, the description carries the load and does it well: it discloses that only locators, vectors and hashes are stored and never excerpts, that there is no cloud fallback, the exact error codes returned (corpus_too_small with have/need counts, needs_local_runtime, needs_model_selection), and the rebuild/supersede-by-row semantics with the prior profile retained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and every clause carries information (storage policy, failure modes, re-run semantics) with no filler. However, the semicolon-chained density and unexplained internal codes (E04, E00, OP6, Art. 321) make it heavier to parse than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a build/mutate tool with no output schema, it covers preconditions, error paths, storage model and idempotency. The main gap is what the resulting profile looks like and how its identifier is surfaced for later voice_profile_get/voice_retrieve calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it partially does: accountId is fixed as one E04 mail account, documentIds are optional E00 documents by id, and idempotencyKey drives the rebuild/supersede path. workspaceId and the free-form `name` parameter are never explained, leaving two of five params undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: it learns a writing style from sent messages for exactly one E04 mail account, optionally augmented by E00 documents, and produces a style card plus local embeddings. This is clearly distinguishable from the sibling read-side tools (voice_profile_get, voice_profiles_list, voice_retrieve).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Preconditions for a successful call are spelled out: at least 20 sent messages, an installed local runtime, and a selected model, each with the failure outcome it produces. It stops short of explicitly naming the alternative tool (e.g. voice_retrieve for using an existing profile), so routing by contrast is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

voice_profile_getB
Read-only

Ein Schreibstil-Profil (P5): the readable style card (greeting, sign-off, formality, sentence length, language mix), exemplar count, when it was built, on which model, and stale:true when the sent-mail corpus changed since the build.

NameRequiredDescriptionDefault
profileIdYes
workspaceIdYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, aligning with a read operation. The description adds behavioral context by detailing the exact content returned (style card fields, exemplar count, build date, model, staleness flag) and the condition for stale:true, which is valuable beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single long sentence that mixes German and English, making it somewhat unwieldy. It packs many details but could be restructured for clarity and brevity. The information is dense but not optimally front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description is the sole source of return-value information. It lists many fields but omits types, response structure, error behavior (e.g., profile not found), and how the profileId is obtained. This is incomplete for a get operation without structured output documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the parameters workspaceId and profileId beyond their names. While the names are fairly self-explanatory, the description provides no additional context (e.g., how to obtain profileId or its scope), so it fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (get) and resource (voice profile) and enumerates the returned fields, making the tool's purpose clear. It does not explicitly contrast with sibling tools like voice_profiles_list, but the singular 'profile' and the field list imply it retrieves a specific profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this vs. alternatives. The name and description imply usage for retrieving a single profile by ID, but no when-to-use or when-not-to-use conditions are provided, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

voice_profiles_listB
Read-only

Alle Schreibstil-Profile (P5), newest first: supersession is by row, so history stays interpretable (a draft references the profile that produced it).

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already marks it as a safe read. The description adds useful behavior: results are newest-first and supersession is by row, so history remains interpretable because drafts reference the profile that produced them. This goes beyond the annotation and clarifies the data model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence that states the core action (list all profiles, newest first) and then adds a valuable explanatory clause. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with a single obvious parameter and no output schema, the description covers the main behavioral details: resource scope, ordering, and supersession semantics. It leaves the exact return shape unspecified, but that is a minor gap for this simple list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not mention workspaceId at all. The parameter name is self-explanatory, but the description fails to compensate for the missing schema documentation, leaving the required scope ('profiles in which workspace?') implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says 'Alle Schreibstil-Profile (P5), newest first', which identifies a specific resource (writing-style profiles, P5) and an ordering. It is clear it lists all profiles, but it does not explicitly name a sibling like voice_profile_get, so it only weakly differentiates from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance. The description explains ordering and supersession semantics but never tells an agent to prefer this over voice_profile_get or voice_build for a given scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

voice_retrieveA
Read-only

Die ähnlichsten Beispiele zu einem Text (P5, computed at query time): embeds queryText through the local runtime, cosine-ranks the profile exemplars, and returns the top k with bodies read ON DEMAND from their source (E04 mail store, E00 document blob), never from SQLite. A source deleted in its own application is skipped and counted, never fatal; a moved corpus answers stale:true. This is the E06 drafting agent, and every other consumer, reaching the corpus through its only door.

NameRequiredDescriptionDefault
kNo
profileIdYes
queryTextYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses significant behavior: bodies are read on demand from source (E04, E00) rather than SQLite, deleted sources are skipped and counted without fatality, and a moved corpus returns stale:true. This provides rich context for the agent's decision-making.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured: purpose first, then technical details, then context. It is appropriately sized, though it includes unexplained acronyms (P5, E04, E00) that may confuse. Front-loading is effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains behavioral edge cases and the retrieval mechanism, but does not describe the return structure (what fields the top-k items contain) nor fully cover all parameters. With no output schema, this gap leaves the agent unsure of the response format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions queryText (embeds it) and k (returns top k) but fails to explain workspaceId and profileId. It does not provide enough detail to understand all parameters, leaving two required parameters unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: embeds queryText, cosine-ranks profile exemplars, and returns the top k with on-demand bodies. It specifies the resource (profile corpus) and the verb (retrieve similar examples), and distinguishes itself as the sole access door to the corpus, setting it apart from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states that this is the only door to the corpus, implying it should be used for any corpus retrieval. However, it does not explicitly enumerate when not to use it or compare with specific sibling tools like voice_build, 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.

void_vendor_billA
Idempotent

Storniere eine Kreditorenrechnung: posts the faithful reversing entry (OR 957a) and flips the bill to void. Never deletes and never edits the original. A DRAFT is simply retired (nothing was booked, so nothing is reversed). A bill with any payment against it is refused with already_settled: reverse the payment first, or 2000 Kreditoren silently carries the difference. CONSEQUENCE: Voids the vendor bill and books its correcting entry; payments against it must be reversed first. The bill and its correction stay on record; if the void was wrong, you record and post the bill again.

NameRequiredDescriptionDefault
dateNo
reasonNo
workspaceIdYes
vendorBillIdYes
idempotencyKeyYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the exact accounting effect (reversing entry OR 957a), that the original is never deleted or edited, DRAFT handling, the already_settled refusal path, the ledger consequence if payments are not reversed first, and that both the bill and correction remain on record. These are substantial behavioral details that the idempotentHint and destructiveHint annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and consequence, and most sentences carry useful information. It is somewhat repetitive: the CONSEQUENCE sentence restates the reversing-entry and void behavior already described, and the mixed German/English phrasing adds minor noise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-impact mutation with no output schema and no parameter descriptions, the description covers behavior, error handling, retention, and recovery well. However, it leaves all five input parameters undocumented, which is a clear completeness gap for an agent invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for five parameters, including required workspaceId, vendorBillId, and idempotencyKey, and the description explains none of them. It does not say what date or reason control, nor what idempotencyKey does, so it fails to compensate for the undocumented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: voiding a vendor bill ('Storniere eine Kreditorenrechnung') and describes the exact accounting behavior: posts the faithful reversing entry (OR 957a) and flips the bill to void. It also clearly distinguishes this from deleting or editing the original, so an agent can identify the operation without opening sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies clear conditions: a DRAFT is simply retired, while a bill with any payment is refused with already_settled and the payment must be reversed first. It also states recovery when a void was wrong: record and post the bill again. It stops short of explicitly naming sibling tools such as reverse_payment, but the alternatives are described in plain terms.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wage_journal_postA
Idempotent

Preview then post the month's externally-computed aggregate wage journal as ONE balanced entry through A02 (source=import). Supply exactly one of lines[] (agent path: each {accountNumber|accountId, debitMinor|creditMinor, costCenter?, description?} in integer Rappen) or fileRef (a stored provider CSV, columns account_number/debit_rappen/credit_rappen/cost_center?/description?, translated through an optional columnMap of canonical->provider header). entryDate is YYYY-MM-DD. Without confirm it returns the full-entry preview and writes NOTHING, without consuming the idempotency key (P8); an unbalanced set is refused at preview time with diffRappen, before A02 is asked. With confirm:true it posts once (requiring the post capability) and records a wage_journal_posts row; a re-post with the same idempotencyKey returns the original posted entry and never posts a second one. One wage journal stands per month (D173, the YYYY-MM of entryDate): while an earlier posting for that month stands, a confirm under a new key is refused month_already_posted naming the standing wageJournalPostId and postedEntryId; reverse it with wage_journal_reverse first, which frees the month. The workspace setting payroll.month_guard decides this: refuse (default), warn (the post goes through and the result carries warnings[] naming the standing posting(s)), or off (no check); the preview names the standing posting(s) in warnings[] under refuse and warn. supplementary:true with a non-blank supplementaryReason skips the guard for that one call (reason_required without a reason, also on the preview), writes the reason into the entry description and an audit row. Only wage_journal_post is guarded: a raw post_entry is not. runKind is regular (default), bonus, thirteenth or correction; the guard counts only regular postings, so a bonus, 13th-salary or correction run never blocks and is never blocked, and list_payroll_handoffs shows each posting's runKind. runKindReason (only on a non-regular run, else invalid_input) is written into the entry description; the setting payroll.nonregular_reason decides when it is required: none, correction (default: a correction run needs one) or all (every non-regular run), refused reason_required without it, also on the preview. Every non-regular post writes an audit row naming its kind. A wrong journal is reversed by wage_journal_reverse (the raw reverse_entry refuses it owned_by) and the corrected one re-imported, never edited. TILL computes no wage: amounts arrive from the provider and are only summed for the balance check. CONSEQUENCE: Books the month's wage journal from your payroll as one entry. One journal per month: if it is wrong, you reverse it under Payroll and then post the corrected one; both stay visible.

NameRequiredDescriptionDefault
refNo
linesNo
confirmNo
fileRefNo
runKindNo
columnMapNo
entryDateYes
mappingIdNo
descriptionNo
workspaceIdYes
runKindReasonNo
supplementaryNo
idempotencyKeyYes
supplementaryReasonNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give idempotentHint/destructiveHint=false, and the description far exceeds that: preview writes nothing and does not consume the key (P8), unbalanced sets are refused with diffRappen, month-guard modes, supplementary bypass with audit row, non-regular audit rows. It stops short of describing the return shape of the posted entry itself, but behavior is richly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and correctly ordered, but the definition is a dense wall of text with a redundant trailing CONSEQUENCE block that restates the posting/reversal story. Given the tool's complexity most sentences earn their place, yet heavy sentence-level compression hurts scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter mutation tool with no output schema and no annotation safety detail, the description covers proposal/preview behavior, guard interactions, idempotency, warnings[], and error codes (month_already_posted, reason_required, invalid_input, owned_by). An agent has what it needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate and largely does: lines[] element shape, fileRef/columnMap/CSV columns, entryDate format, idempotencyKey semantics, confirm, runKind and runKindReason with enum and requirement rules, supplementary/supplementaryReason. It leaves ref, mappingId and description undocumented, keeping it below a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb chain ('Preview then post') and resource ('the month's externally-computed aggregate wage journal as ONE balanced entry'), and pins the mechanism (through A02, source=import). It clearly distinguishes itself from raw post_entry and from wage_journal_reverse.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names when to use it (external payroll aggregate), the confirm/no-confirm distinction, the month-guard alternatives (wage_journal_reverse to free a month), and the sibling caveat that raw post_entry is not guarded. Reversal path is spelled out: reverse then re-import, never edit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wage_journal_reverseA
Idempotent

Storniere a posted wage journal (D171), the ONE correction of a wage_journal_post booking: posts the faithful A02 reversing entry of its single entry (OR 957a, dated today) through the owned path, and list_payroll_handoffs then names the mirror as reversalEntryId on the posting row. The wage_journal_posts row stays (append-only); the corrected journal is re-imported with wage_journal_post under a new key. TILL computes no wage and sees no salary payment, AHV/BVG/Quellensteuer declaration or Lohnausweis by row: those live in the payroll system and at the bank, stand as they are, and are corrected there. Refusals write nothing: an unknown or foreign posting is not_found; a blank reason is reason_required; a journal already reversed, also by a raw Storno from before this verb, is already_reversed naming the mirror; a bank line that booked or matched the entry is owned_by reopen_bank_line naming the line (reopen it first); period_locked when today is sealed. The raw reverse_entry refuses a wage journal entry (owned_by wage_journal_reverse); other import-sourced entries (opening balances) are not affected. Requires post. Idempotent: a replay under the same key answers the stored result. CONSEQUENCE: Reverses the wage journal with a correcting entry; the original stays visible. Salary payments and social insurance declarations are not touched.

NameRequiredDescriptionDefault
reasonYes
workspaceIdYes
idempotencyKeyYes
wageJournalPostIdYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description explains append-only behavior, correcting-entry semantics, idempotent replay, permission requirement (post), and what happens to payroll/social-insurance data (not touched). These details materially improve safe invocation and are consistent with destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded and largely justified by the tool's complexity and missing schema documentation. There is minor repetition in the CONSEQUENCE section, but it remains structurally coherent and information-dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema and no parameter descriptions, the definition covers purpose, alternatives, refusal modes, idempotency, and downstream effects sufficiently. An agent has enough information to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well for reason, idempotencyKey, and wageJournalPostId by tying them to concrete behaviors and error cases. workspaceId is left implicit, which keeps this from a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it reverses a posted wage journal (D171) and explicitly distinguishes this as the ONE correction for a wage_journal_post booking. It also names the sibling reverse_entry and clarifies that raw reverse_entry refuses wage-journal entries owned by this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use this tool, how it relates to wage_journal_post re-import, and when alternatives such as reopen_bank_line must be used first. It also provides explicit refusal conditions that guide the agent away from incorrect invocations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

warehouse_archiveA
Idempotent

Soft-archive a warehouse (active=false). Refused with cannot_archive_default while it is the workspace default; refused with location_has_stock or location_in_use when any location under it still holds stock or is referenced by an open stocktake. On success its empty locations are archived too. Deletion is never offered.

NameRequiredDescriptionDefault
warehouseIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses specific refusal error codes and the cascading side effect that empty child locations are archived too. This is exactly the kind of behavioral context an agent needs for a mutation call with idempotentHint=true and destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well structured: operation first, refusal conditions next, cascade behavior after that, and the deletion disclaimer last. Every sentence adds useful information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the important behavioral details: soft-archive state, refusal conditions, cascade behavior, and absence of hard deletion. The main remaining gap is that none of the required parameters are described, particularly idempotencyKey.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has three required parameters with 0% description coverage, and the description does not explain any of them. It implies that a warehouse is selected, but gives no guidance on workspaceId or idempotencyKey semantics, so it does not compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Soft-archive a warehouse', and immediately clarifies the resulting state ('active=false'). It also distinguishes this from deletion by stating 'Deletion is never offered', so an agent can separate it from destructive removal tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains when the operation will be refused: default warehouse, stock still present, or open stocktake reference. It does not explicitly compare against siblings like warehouse_update or location_archive, but the preconditions and the no-deletion note give strong usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

warehouse_createA
Idempotent

Create a warehouse (a physical or logical site stock lives at). code is 1-20 chars, unique per workspace case-insensitively (duplicate_code); an empty or over-long code is invalid_code. The FIRST warehouse a workspace creates becomes the workspace default; pass isDefault to force it, which demotes the previous default. Plain master data: posts no journal entry.

NameRequiredDescriptionDefault
cityNo
codeYes
nameYes
isDefaultNo
postalCodeNo
countryCodeNo
descriptionNo
workspaceIdYes
addressLine1No
addressLine2No
idempotencyKeyYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With idempotentHint and destructiveHint already annotated, the description adds meaningful behavior beyond annotations: code validation outcomes (duplicate_code, invalid_code), the first-warehouse-becomes-default rule, isDefault demotion of the previous default, and the fact that no journal entry is posted. It stops short of covering permission requirements 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four dense sentences with no filler, and it front-loads the core purpose before the validation and default-behavior details. Every sentence contributes either scope, constraints, or side-effect information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with 11 parameters, no output schema, and no parameter descriptions in the schema, the description covers the most important behavioral quirks but leaves much of the parameter surface undocumented. It is adequate for the core create/default semantics but has clear gaps around required fields and address inputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 11 parameters, and the description explains only code constraints and isDefault semantics. Required fields such as workspaceId and idempotencyKey, plus name and all address-related parameters, receive no semantic explanation in either schema or description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create a warehouse', and defines what a warehouse is as a physical or logical site for stock. It does not explicitly distinguish this from sibling tools such as warehouse_update or warehouse_get, so it falls short of the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'Create' and by the default-behavior explanation, but there is no explicit guidance on when to use this versus sibling tools like warehouse_update, warehouse_set_default, or warehouse_archive. The first/default warehouse rules add useful context but do not amount to alternative selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

warehouse_getA
Read-only

Read one warehouse by id, archived or not.

NameRequiredDescriptionDefault
warehouseIdYes
workspaceIdYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description inherits the read-only safety profile. The description adds the fact that archived warehouses are included, which is useful behavioral context beyond the annotation. It does not describe any other behaviors, but with annotations covering the core safety aspect, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence that is front-loaded with the main action and includes the notable detail about archived warehouses. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-by-id tool with two required parameters and no output schema, the description covers the essential purpose and the notable inclusion of archived records. The lack of return value description is acceptable because there is no output schema and the typical expectation is a warehouse object, which is not a major gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description has no parameter details, but the parameter names 'workspaceId' and 'warehouseId' are self-explanatory from the schema itself. The description adds the semantic that it reads one warehouse by ID, which maps directly to the 'warehouseId' parameter. Since the schema provides the names and the description adds minimal extra meaning, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Read', the resource 'one warehouse by id', and the scope including archived warehouses. It is specific enough to distinguish from warehouse_list, but does not explicitly name the sibling alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is for fetching a single warehouse by ID, and because it includes archived warehouses, it signals when it might be preferred over warehouse_list. However, it does not explicitly state when to use this versus warehouse_list or warehouse_create/update/archive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

warehouse_listA
Read-only

List the workspace warehouses, default first then by code. Optional active filter (true = only live, false = only archived) and a case-insensitive search over code and name. Accepts a savedViewId (G00 saved-view seam).

NameRequiredDescriptionDefault
activeNo
searchNo
savedViewIdNo
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses meaningful behavioral traits: default-first ordering, active filter semantics (true vs false), case-insensitive search over code and name, and savedViewId handling. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences deliver the essential information with no filler. Behavior, filters, search, and saved-view support are all front-loaded and clearly organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one required parameter and no output schema, this description is complete: it covers scope, ordering, filtering, search behavior, and saved-view support. No critical calling information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by explaining active, search, and savedViewId semantics. workspaceId is not explicitly described, though its role is strongly implied by 'workspace warehouses' and the required schema field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and explicit resource ('workspace warehouses'), and adds sorting behavior ('default first then by code'). It clearly differentiates this plural listing tool from sibling tools like warehouse_get and warehouse_archive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for use: listing workspace warehouses with an optional live/archived active filter, case-insensitive search, and saved-view support. It does not explicitly name alternatives or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

warehouse_set_defaultA
DestructiveIdempotent

Make this warehouse the workspace default, demoting the previous default in the same transaction (exactly one default per workspace). An archived warehouse is refused with warehouse_archived. Omitted-location callers resolve to the default warehouse.

NameRequiredDescriptionDefault
warehouseIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the atomic demotion of the previous default, the one-default-per-workspace invariant, the exact refusal error (warehouse_archived), and the downstream effect that omitted-location callers resolve to this warehouse. The destructive side effect on the prior default is consistent with destructiveHint=true and idempotentHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the primary effect, then the invariant, then the failure mode and side effect. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation with no output schema, the description covers the key behavioral facts and the failure mode. The remaining gap is parameter-level meaning, particularly the required idempotencyKey, which the description leaves entirely to an undocumented schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for all three required parameters, so the description must compensate and largely does not: warehouseId and workspaceId are only obliquely referenced as 'this warehouse'/'workspace', and idempotencyKey is never mentioned despite being required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Make this warehouse the workspace default') plus the invariant ('exactly one default per workspace'), so the effect is unambiguous. It does not explicitly distinguish itself from nearby siblings such as location_set_default or warehouse_update, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the invariant and the archived-warehouse refusal, but the description never says when to prefer this over warehouse_update or location_set_default, nor any prerequisite (permission, unarchived state) beyond the failure case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

warehouse_updateA
DestructiveIdempotent

Edit a warehouse through a patch object (name, description, address fields, countryCode). code and the default flag are not changed here (use warehouse_set_default for the default). Only the fields present in patch change.

NameRequiredDescriptionDefault
patchNo
warehouseIdYes
workspaceIdYes
idempotencyKeyYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, so the safety profile is carried structurally; the description adds real partial-update semantics with 'Only the fields present in patch change', which constrains how dangerous the call is. However it never addresses the destructiveHint (what can be lost when an address object is replaced), does not mention the required idempotencyKey or permission requirements, and says nothing about the response. No contradiction with annotations, but meaningful gaps remain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the mutable surface front-loaded, then the exclusions and the alternative, then the partial-update rule — every sentence earns its place. Minor friction: 'code' and 'the default flag' are referenced as if already known, and 'address fields' is a shorthand the reader must map onto the schema themselves.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with a nested patch object, no output schema and 0% parameter documentation, the description covers the most important thing (merge-vs-replace semantics) but omits the required idempotencyKey contract, any notion of what is returned, and any failure/reversibility guidance. Adequate to call correctly in the happy path, not complete for an agent operating under the destructiveHint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It enumerates the patch sub-fields, but that enumeration merely echoes the schema property names (city, name, postalCode, countryCode, description, addressLine1/2) and adds no format, constraint, or validation meaning; the three required top-level parameters (workspaceId, warehouseId, idempotencyKey) receive no explanation at all. The only genuine semantic addition is 'only fields present in patch change', which is not enough for 0% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Edit a warehouse') plus the exact mutable surface (name, description, address fields, countryCode) and explicitly names what it does NOT do ('code and the default flag are not changed here'). It routes the reader to the sibling warehouse_set_default, so it is distinguishable from warehouse_create/warehouse_archive/warehouse_list without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear negative rule and an explicit alternative for the default flag ('use warehouse_set_default for the default'), which is exactly the kind of routing an agent needs. It stops short of stating the broader when-to-use context (e.g. versus warehouse_create for new warehouses, or prerequisites such as the warehouse existing and being non-archived), so not a full when/when-not treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiA
Read-only

Report who this session is in a workspace: the actor, the role it holds, and the exact capabilities that role resolves to. The ONE source a client may use to pre-disable a write control. For the governed agent seat it also carries agentDial, the effective approval-dial level per capability (auto executes, ask drafts), so an agent can predict whether a write will post or wait for approval without holding the owner-only get_agent_dial.

NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint=true annotation already declares the safety profile, so the bar is lower. The description adds genuine behavioral value beyond the annotation: it discloses what the response carries (actor, role, resolved capabilities, and agentDial for the governed seat) and explains how to interpret agentDial for predicting write approval behavior. This does not contradict the annotation — 'report' is consistent with readOnlyHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence, with the unique value proposition following immediately. The text is dense but every clause earns its place — it avoids filler. It is slightly verbose in the agentDial sentence, but the added detail justifies the length. Well-structured overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only identity tool with no output schema, the description is thorough. It explains the return contents, the unique use case (pre-disabling write controls), and the relationship to get_agent_dial. No output schema exists, so the description's enumeration of response fields partially compensates. The only omission is the exact response shape, which is minor for this tool type.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description never mentions workspaceId. However, there is only a single required parameter whose name is self-explanatory, so the cost of the omission is low. The description could have added a note (e.g., the workspace context the session is resolved against), but the gap is minor for such an obvious parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource — 'Report who this session is in a workspace: the actor, the role it holds, and the exact capabilities that role resolves to.' This is precise and non-tautological. It also differentiates from siblings by explicitly addressing the relationship to get_agent_dial, noting whoami carries agentDial for the governed seat so the agent need not hold the owner-only get_agent_dial. An agent can immediately distinguish this from the surrounding member/role/dial tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear when-to-use guidance: 'The ONE source a client may use to pre-disable a write control' and the instruction that an agent can 'predict whether a write will post or wait for approval without holding the owner-only get_agent_dial.' This effectively frames the alternative (get_agent_dial) and the condition selecting whoami. It stops short of stating explicit when-not-to-use scenarios, but the context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 61 tool updatesv1.0.0-beta.2
    • Addedasset_transaction_reverse
    • Changedattention_list2 fields changed
      • addedInput schema / properties / grouping
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / section
        Added value: +{
        +  "type": "string"
        +}
    • Changedbank_channel_connect1 field changed
      • addedInput schema / properties / expectedBankKeyHashes
        Added value: +{
        +  "type": "object"
        +}
    • Addedbank_csv_preview
    • Addedbook_bank_line
    • Changedcapture_extract2 fields changed
      • addedInput schema / properties / decoder
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / qrPayload
        Added value: +{
        +  "type": "string"
        +}
    • Addedclear_bank_standard
    • Changedclose_year1 field changed
      • addedInput schema / properties / runId
        Added value: +{
        +  "type": "string"
        +}
    • Addedcompose_entry
    • Addedconfirm_statement_gap
    • Changedcreate_document1 field changed
      • addedInput schema / properties / supplyDate
        Added value: +{
        +  "description": "Document-level Leistungsdatum (ISO YYYY-MM-DD). A line's own supplyDate wins; absent (or null on update) means the issue date.",
        +  "type": "string"
        +}
    • Changedcreate_workspace1 field changed
      • addedInput schema / properties / defaultPaymentTermsDays
        Added value: +{
        +  "type": "integer"
        +}
    • Addeddashboard_series
    • Addeddiscard_dunning_run
    • Addeddiscard_orphan_testmandant
    • Addeddispatch_text_reset
    • Changeddraft_regenerate1 field changed
      • addedInput schema / properties / overwriteEdits
        Added value: +{
        +  "type": "boolean"
        +}
    • Addeddunning_fee_reverse
    • Addedexpense_claim_reverse
    • Addedget_bank_csv_mapping
    • Addedignore_bank_line
    • Addedimport_bank_statement
    • Addedimport_camt_files
    • Addedjournal_numbering_plan
    • Addedliquidity_flow_list
    • Addedliquidity_flow_set
    • Addedliquidity_forecast
    • Addedliquidity_plan_draft_batches
    • Addedliquidity_plan_get
    • Addedliquidity_plan_list
    • Addedliquidity_plan_propose
    • Addedliquidity_skonto_list
    • Addedliquidity_skonto_set
    • Addedlist_bank_inbox
    • Addedlist_bank_standards
    • Changedlist_journal1 field changed
      • addedInput schema / properties / number
        Added value: +{
        +  "type": "string"
        +}
    • Changedportal_grant_create1 field changed
      • removedInput schema / properties / kind
        Removed value: -{
        -  "type": "string"
        -}
    • Changedpost_entry2 fields changed
      • addedInput schema / properties / template
        Added value: +{
        +  "type": "object"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "workspaceId",
        -  "date",
        -  "lines",
        -  "source",
        -  "idempotencyKey"
        -]New value: +[
        +  "workspaceId",
        +  "date",
        +  "source",
        +  "idempotencyKey"
        +]
    • Addedprefs_get
    • Addedprefs_list
    • Addedprefs_reset
    • Addedprefs_set
    • Addedreopen_bank_line
    • Addedresolve_possible_duplicate
    • Addedrevoke_statement_gap_confirmation
    • Addedset_bank_csv_mapping
    • Addedset_bank_standard
    • Changedset_bank_sync_schedule2 fields changed
      • addedInput schema / properties / atTime
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "type": "string"
        +}
    • Addedsettings_get
    • Addedsettings_list
    • Addedsettings_reset
    • Addedsettings_set
    • Addedsuggest_bank_lines
    • Changedupdate_account1 field changed
      • addedInput schema / properties / statementIsVoucher
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedupdate_company_profile1 field changed
      • addedInput schema / properties / defaultPaymentTermsDays
        Added value: +{
        +  "type": "integer"
        +}
    • Changedupdate_document1 field changed
      • addedInput schema / properties / patch / properties / supplyDate
        Added value: +{
        +  "description": "Document-level Leistungsdatum (ISO YYYY-MM-DD). A line's own supplyDate wins; absent (or null on update) means the issue date.",
        +  "type": "string"
        +}
    • Changedvat_configure1 field changed
      • addedInput schema / properties / methodChange / properties / basis
        Added value: +{
        +  "type": "string"
        +}
    • Changedvat_mark_filed1 field changed
      • changedInput schema / properties / period / description
        Previous value: -"Period label: YYYY-Qn (effektiv) or YYYY-Hn (Saldo)."New value: +"Period label as vat_periods lists it, from 1995: YYYY-Qn (effektiv) or YYYY-Hn (Saldo)."
    • Changedvat_periods1 field changed
      • changedInput schema / properties / year / description
        Previous value: -"Calendar year, YYYY."New value: +"Calendar year, YYYY, from 1995 (the MWST era)."
    • Changedwage_journal_post4 fields changed
      • addedInput schema / properties / runKind
        Added value: +{
        +  "enum": [
        +    "regular",
        +    "bonus",
        +    "thirteenth",
        +    "correction"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / runKindReason
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / supplementary
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / supplementaryReason
        Added value: +{
        +  "type": "string"
        +}
    • Addedwage_journal_reverse
  2. 779 tool updatesv0.1.0
    • First observedaccept_invite
    • First observedaccount_set_tax_default
    • First observedaccrual_create
    • First observedaccrual_discard
    • First observedaccrual_get
    • First observedaccrual_list
    • First observedaccrual_post
    • First observedaccrual_reverse
    • First observedadvance_move_step
    • First observedadvance_onboarding_step
    • First observedagent_ask
    • First observedagent_prose_delete
    • First observedagent_trust_summary
    • First observedaging_report
    • First observedallocate_payment
    • First observedapply_qr_match
    • First observedapprove_drafted_action
    • First observedapprove_entry
    • First observedarchive_account
    • First observedarchive_automation_rule
    • First observedarchive_bank_account
    • First observedarchive_contact
    • First observedarchive_cost_center
    • First observedarchive_document_template
    • First observedarchive_field
    • First observedarchive_item
    • First observedarchive_role
    • First observedarchive_workspace
    • First observedasset_acquire
    • First observedasset_acquisition_summary
    • First observedasset_add_capitalisation
    • First observedasset_archive
    • First observedasset_category_archive
    • First observedasset_category_create
    • First observedasset_category_get
    • First observedasset_category_list
    • First observedasset_category_resolve_defaults
    • First observedasset_category_update
    • First observedasset_create
    • First observedasset_depreciation_forecast
    • First observedasset_depreciation_method_set_enabled
    • First observedasset_depreciation_methods
    • First observedasset_depreciation_preview
    • First observedasset_depreciation_run_create
    • First observedasset_depreciation_run_get
    • First observedasset_depreciation_run_list
    • First observedasset_depreciation_run_post
    • First observedasset_depreciation_run_reverse
    • First observedasset_depreciation_schedule
    • First observedasset_disposal_get
    • First observedasset_disposal_preview
    • First observedasset_disposal_summary
    • First observedasset_dispose
    • First observedasset_end_of_life_list
    • First observedasset_get
    • First observedasset_ledger_get
    • First observedasset_ledger_list
    • First observedasset_list
    • First observedasset_location_archive
    • First observedasset_location_create
    • First observedasset_location_get
    • First observedasset_location_list
    • First observedasset_location_update
    • First observedasset_maintenance_log_cancel
    • First observedasset_maintenance_log_create
    • First observedasset_maintenance_log_get
    • First observedasset_maintenance_log_list
    • First observedasset_maintenance_log_update
    • First observedasset_nbv_summary
    • First observedasset_opening_balance
    • First observedasset_reconciliation_check
    • First observedasset_reconciliation_report
    • First observedasset_register_report
    • First observedasset_search
    • First observedasset_transaction_get
    • First observedasset_transaction_list
    • First observedasset_transfer
    • First observedasset_transfer_history
    • First observedasset_update
    • First observedattach_receipt
    • First observedattention_list
    • First observedattention_summary
    • First observedbalance_sheet
    • First observedbank_channel_connect
    • First observedbank_channel_directory
    • First observedbank_channel_disconnect
    • First observedbank_channel_status
    • First observedbank_sync
    • First observedbilling_generate_invoice
    • First observedbilling_release_time
    • First observedbilling_unbilled_preview
    • First observedbilling_wip_report
    • First observedbootstrap_workspace
    • First observedcapture_commit
    • First observedcapture_discard
    • First observedcapture_document
    • First observedcapture_extract
    • First observedchecklist_abandon
    • First observedchecklist_get
    • First observedchecklist_item_complete
    • First observedchecklist_item_reopen
    • First observedchecklist_item_skip
    • First observedchecklist_list
    • First observedchecklist_start
    • First observedchecklist_templates
    • First observedclear_diagnostics
    • First observedclose_month
    • First observedclose_year
    • First observedcomment_entry
    • First observedconfirm_field
    • First observedconfirm_match
    • First observedcontacts_anonymise
    • First observedcontacts_import
    • First observedcontacts_log_activity
    • First observedcontacts_merge
    • First observedcontacts_tag
    • First observedcontacts_timeline
    • First observedconvert_document
    • First observedcosting_budget_vs_actual
    • First observedcosting_drilldown
    • First observedcosting_pl_list
    • First observedcosting_project_pl
    • First observedcreate_account
    • First observedcreate_automation_rule
    • First observedcreate_backup
    • First observedcreate_bank_account
    • First observedcreate_contact
    • First observedcreate_cost_center
    • First observedcreate_credit_note
    • First observedcreate_demo_workspace
    • First observedcreate_document
    • First observedcreate_document_template
    • First observedcreate_entry_for_txn
    • First observedcreate_item
    • First observedcreate_payment_batch
    • First observedcreate_recurring_schedule
    • First observedcreate_saved_view
    • First observedcreate_vendor_bill
    • First observedcreate_workspace
    • First observedcustomer_balance
    • First observeddashboard_overview
    • First observeddashboard_tile
    • First observeddeals_create
    • First observeddeals_list
    • First observeddeals_log_activity
    • First observeddeals_mark
    • First observeddeals_move
    • First observeddeals_to_quote
    • First observeddeals_update
    • First observeddefine_field
    • First observeddefine_role
    • First observeddelete_account
    • First observeddelete_backup
    • First observeddelete_cost_center
    • First observeddelete_draft
    • First observeddelete_item
    • First observeddelete_saved_view
    • First observeddelivery_note_create
    • First observeddelivery_note_issue
    • First observeddelivery_note_render
    • First observeddelivery_status
    • First observeddescribe_rate_feed
    • First observeddetect_anomalies
    • First observeddisable_automation_rule
    • First observeddisable_plugin
    • First observeddiscard_demo_workspace
    • First observeddiscard_payment_batch
    • First observeddiscard_testmandant
    • First observeddispatch_preview
    • First observeddispatch_text_upsert
    • First observeddraft_generate
    • First observeddraft_list
    • First observeddraft_regenerate
    • First observedebill_delivery_status
    • First observedebill_prepare
    • First observedebill_transmit
    • First observedegress_self_test
    • First observedegress_status
    • First observedenable_automation_rule
    • First observedenable_plugin
    • First observedend_recurring_schedule
    • First observedenv_copy
    • First observedenv_create
    • First observedenv_current
    • First observedenv_delete
    • First observedenv_list
    • First observedenv_reset
    • First observedenv_status
    • First observedenv_switch
    • First observedexpense_claim_approve
    • First observedexpense_claim_create
    • First observedexpense_claim_get
    • First observedexpense_claim_list
    • First observedexpense_claim_reimburse
    • First observedexpense_claim_reject
    • First observedexpense_claim_submit
    • First observedexpense_line_upsert
    • First observedexport_journal
    • First observedexport_statement
    • First observedexport_statements
    • First observedexport_vat
    • First observedexport_workspace
    • First observedfiles_delete
    • First observedfiles_get_content
    • First observedfiles_link
    • First observedfiles_list_linked
    • First observedfiles_new_version
    • First observedfiles_search
    • First observedfiles_set_retention
    • First observedfiles_update
    • First observedfiles_upload
    • First observedfiles_upload_begin
    • First observedfiles_upload_chunk
    • First observedfiles_upload_commit
    • First observedflag_entry
    • First observedfolders_delete
    • First observedfolders_list
    • First observedfolders_upsert
    • First observedforecast_revenue
    • First observedforecast_sales_kpis
    • First observedforecast_vs_actual
    • First observedforecast_weighted_pipeline
    • First observedfx_revaluation
    • First observedfx_revaluation_reverse
    • First observedgeneral_ledger
    • First observedgenerate_pain001
    • First observedget_agent_dial
    • First observedget_agent_session
    • First observedget_aging_bucket_config
    • First observedget_api_catalog
    • First observedget_audit_log
    • First observedget_automation_rule
    • First observedget_automation_run
    • First observedget_bank_account
    • First observedget_capture
    • First observedget_company_profile
    • First observedget_concept
    • First observedget_contact
    • First observedget_diagnostics
    • First observedget_document
    • First observedget_document_template
    • First observedget_dunning_config
    • First observedget_dunning_pdf
    • First observedget_dunning_run
    • First observedget_ebill_config
    • First observedget_entry
    • First observedget_exchange_rate
    • First observedget_fx_method
    • First observedget_item
    • First observedget_move_state
    • First observedget_onboarding_progress
    • First observedget_opening_balances
    • First observedget_payment
    • First observedget_payment_batch
    • First observedget_plugin
    • First observedget_plugin_registry_entry
    • First observedget_recurring_schedule
    • First observedget_sync_contract
    • First observedget_vendor_bill
    • First observedget_workspace
    • First observedgl_archive_account_history
    • First observedgl_archive_import
    • First observedgl_archive_periods
    • First observedgl_archive_preview
    • First observedgl_archive_purge
    • First observedgl_archive_query
    • First observedgo_productive
    • First observedgoods_receipt_accept_lines
    • First observedgoods_receipt_cancel
    • First observedgoods_receipt_create
    • First observedgoods_receipt_get
    • First observedgoods_receipt_get_config
    • First observedgoods_receipt_lines_for_match
    • First observedgoods_receipt_list
    • First observedgoods_receipt_post
    • First observedgoods_receipt_preview
    • First observedgoods_receipt_reject_lines
    • First observedgoods_receipt_reverse
    • First observedgoods_receipt_set_config
    • First observedgoods_receipt_upsert_lines
    • First observedhr_absence_cancel
    • First observedhr_absence_list
    • First observedhr_absence_record
    • First observedhr_employee_get
    • First observedhr_employee_list
    • First observedhr_employee_upsert
    • First observedimplementation_decision_record
    • First observedimplementation_parallel_check
    • First observedimplementation_parallel_declare
    • First observedimplementation_parallel_status
    • First observedimplementation_project_close
    • First observedimplementation_project_create
    • First observedimplementation_project_get
    • First observedimplementation_project_list
    • First observedimplementation_runbook_instantiate
    • First observedimplementation_signoff_record
    • First observedimplementation_task_set
    • First observedimport_camt
    • First observedimport_exchange_rates
    • First observedimport_open_items
    • First observedimport_opening_balances
    • First observedincome_statement
    • First observedinstall_plugin
    • First observedinventory_adjust
    • First observedinventory_adjust_analysis
    • First observedinventory_adjust_batch
    • First observedinventory_adjust_list
    • First observedinventory_adjust_reverse
    • First observedinventory_alerts
    • First observedinventory_anomalies
    • First observedinventory_available_serials
    • First observedinventory_balance
    • First observedinventory_balance_by_location
    • First observedinventory_cycle_count_status
    • First observedinventory_ensure_default_location
    • First observedinventory_get_config
    • First observedinventory_lot_trace
    • First observedinventory_low_stock
    • First observedinventory_move
    • First observedinventory_movement_get
    • First observedinventory_movement_history
    • First observedinventory_movement_list
    • First observedinventory_on_hand_by_lot
    • First observedinventory_reason_archive
    • First observedinventory_reason_create
    • First observedinventory_reason_get
    • First observedinventory_reason_list
    • First observedinventory_reason_update
    • First observedinventory_reconciliation_check
    • First observedinventory_reconciliation_report
    • First observedinventory_reorder_candidates
    • First observedinventory_set_config
    • First observedinventory_slow_movers
    • First observedinventory_stock_position
    • First observedinventory_stocktake_approve_lines
    • First observedinventory_stocktake_cancel
    • First observedinventory_stocktake_commit
    • First observedinventory_stocktake_count
    • First observedinventory_stocktake_create
    • First observedinventory_stocktake_get
    • First observedinventory_stocktake_list
    • First observedinventory_stocktake_report
    • First observedinventory_stocktake_request_recount
    • First observedinventory_transfer
    • First observedinventory_valuation_create
    • First observedinventory_valuation_get
    • First observedinventory_valuation_layers
    • First observedinventory_valuation_list
    • First observedinventory_valuation_method_history
    • First observedinventory_valuation_method_set_enabled
    • First observedinventory_valuation_methods
    • First observedinventory_valuation_opening
    • First observedinventory_valuation_post
    • First observedinventory_valuation_preview
    • First observedinventory_valuation_report
    • First observedinventory_valuation_reverse
    • First observedinventory_valuation_set_default
    • First observedinventory_valuation_set_item_method
    • First observedinventory_valuation_status
    • First observedinvite_member
    • First observedissue_credit_note
    • First observedissue_dunning_run
    • First observedissue_invoice
    • First observeditem_categories_delete
    • First observeditem_categories_list
    • First observeditem_categories_upsert
    • First observeditem_set_tracking_mode
    • First observedlanded_cost_allocate_confirm
    • First observedlanded_cost_allocate_preview
    • First observedlanded_cost_get
    • First observedlanded_cost_list
    • First observedlanded_cost_reverse
    • First observedlanded_cost_voucher_create
    • First observedledger_qa
    • First observedlist_accounts
    • First observedlist_agent_sessions
    • First observedlist_automation_rules
    • First observedlist_automation_runs
    • First observedlist_backups
    • First observedlist_bank_accounts
    • First observedlist_bank_statements
    • First observedlist_captures
    • First observedlist_concepts
    • First observedlist_contacts
    • First observedlist_cost_centers
    • First observedlist_dispatches
    • First observedlist_document_templates
    • First observedlist_documents
    • First observedlist_drafted_actions
    • First observedlist_dunning_runs
    • First observedlist_exchange_rates
    • First observedlist_feedback
    • First observedlist_field_defs
    • First observedlist_field_values
    • First observedlist_items
    • First observedlist_journal
    • First observedlist_members
    • First observedlist_open_items
    • First observedlist_payable
    • First observedlist_payment_batches
    • First observedlist_payments
    • First observedlist_payroll_handoffs
    • First observedlist_period_locks
    • First observedlist_plugins
    • First observedlist_reconciliation
    • First observedlist_recurring_schedules
    • First observedlist_restorable_backups
    • First observedlist_roles
    • First observedlist_saved_views
    • First observedlist_unmatched_incoming
    • First observedlist_vendor_bills
    • First observedlist_workspaces
    • First observedlocation_archive
    • First observedlocation_create
    • First observedlocation_get
    • First observedlocation_list
    • First observedlocation_set_default
    • First observedlocation_tree
    • First observedlocation_update
    • First observedlock_period
    • First observedlot_archive
    • First observedlot_create
    • First observedlot_get
    • First observedlot_list
    • First observedlot_search
    • First observedlot_set_status
    • First observedlot_update
    • First observedmail_accounts_list
    • First observedmail_connect
    • First observedmail_draft_write
    • First observedmail_drafts_list
    • First observedmail_reindex
    • First observedmail_thread_get
    • First observedmail_threads_list
    • First observedmark_batch_paid
    • First observedmatch_bill
    • First observedmatch_qr_payment
    • First observedmatch_status_for_bill
    • First observedmatch_three_way_create
    • First observedmatch_three_way_evaluate
    • First observedmatch_three_way_exceptions
    • First observedmatch_three_way_get
    • First observedmatch_three_way_list
    • First observedmatch_three_way_override
    • First observedmatch_three_way_reverse
    • First observedmigration_abandon_plan
    • First observedmigration_apply_map_template
    • First observedmigration_check_step
    • First observedmigration_close_plan
    • First observedmigration_commit_step
    • First observedmigration_create_plan
    • First observedmigration_create_testmandant
    • First observedmigration_declare_control_total
    • First observedmigration_diff_testmandant_to_live
    • First observedmigration_discover_source
    • First observedmigration_export_check
    • First observedmigration_get_check
    • First observedmigration_get_extraction_guide
    • First observedmigration_get_manifest
    • First observedmigration_get_map
    • First observedmigration_get_plan
    • First observedmigration_get_testmandant
    • First observedmigration_list_checks
    • First observedmigration_list_extraction_guides
    • First observedmigration_list_locale_packs
    • First observedmigration_list_map_templates
    • First observedmigration_list_plans
    • First observedmigration_list_source_adapters
    • First observedmigration_preview_step
    • First observedmigration_readiness
    • First observedmigration_record_approval
    • First observedmigration_rollback_step
    • First observedmigration_save_map_template
    • First observedmigration_set_manifest
    • First observedmigration_set_manifest_item
    • First observedmigration_set_map
    • First observedmigration_set_scope
    • First observedmigration_suggest_map
    • First observedmigration_trial_load_step
    • First observedmigration_waive_control
    • First observedmonth_end_checklist
    • First observednotifications_archive
    • First observednotifications_deliver
    • First observednotifications_list
    • First observednotifications_list_preferences
    • First observednotifications_mark_all_read
    • First observednotifications_mark_read
    • First observednotifications_run_digest
    • First observednotifications_set_preference
    • First observedonboard_client
    • First observedoverride_qr_match
    • First observedpause_recurring_schedule
    • First observedpayment_batch_transmit
    • First observedpayroll_handoff_export
    • First observedpipeline_stages_upsert
    • First observedpipelines_upsert
    • First observedpo_amendment_apply
    • First observedpo_amendment_cancel
    • First observedpo_amendment_preview
    • First observedpo_amendment_reject
    • First observedpo_amendment_start
    • First observedpo_amendment_submit
    • First observedpo_amendment_update_lines
    • First observedpo_cancel
    • First observedpo_close_short
    • First observedpo_get
    • First observedpo_list
    • First observedpo_open_lines
    • First observedpo_revise
    • First observedpo_send
    • First observedpo_upsert
    • First observedpo_version_diff
    • First observedpo_version_get
    • First observedpo_version_list
    • First observedportal_grant_create
    • First observedportal_grant_list
    • First observedportal_grant_revoke
    • First observedportal_grant_send
    • First observedportal_quote_accept
    • First observedportal_resolve
    • First observedpost_entry
    • First observedpost_fx_revaluation
    • First observedpost_vendor_bill
    • First observedprepare_feedback
    • First observedprepare_period
    • First observedpreview_bank_opening_balance
    • First observedpreview_document_template
    • First observedpreview_feedback
    • First observedpreview_open_items
    • First observedpreview_opening_import
    • First observedpreview_payment
    • First observedpreview_plugin_install
    • First observedprice_lists_delete
    • First observedprice_lists_get
    • First observedprice_lists_list
    • First observedprice_lists_set_price
    • First observedprice_lists_unset_price
    • First observedprice_lists_upsert
    • First observedprice_resolve
    • First observedprocurement_anomalies
    • First observedprocurement_grir_clearing
    • First observedprocurement_landed_cost_variance
    • First observedprocurement_match_status
    • First observedprocurement_open_commitments
    • First observedprocurement_po_cycle
    • First observedprocurement_po_history
    • First observedprocurement_requisition_pipeline
    • First observedprocurement_spend_summary
    • First observedprocurement_supplier_scorecard
    • First observedproject_budget_actual
    • First observedproject_create
    • First observedproject_delete
    • First observedproject_get
    • First observedproject_list
    • First observedproject_phase_add
    • First observedproject_phase_done
    • First observedproject_phase_update
    • First observedproject_set_status
    • First observedproject_update
    • First observedpropose_dunning_run
    • First observedprovision_create
    • First observedprovision_discard
    • First observedprovision_get
    • First observedprovision_list
    • First observedprovision_post
    • First observedprovision_release
    • First observedprovision_release_reverse
    • First observedprovision_reverse
    • First observedquotes_accept
    • First observedquotes_convert
    • First observedquotes_create
    • First observedquotes_decline
    • First observedquotes_expire_sweep
    • First observedquotes_get
    • First observedquotes_list
    • First observedquotes_revise
    • First observedquotes_send
    • First observedquotes_update
    • First observedrate_card_end
    • First observedrate_card_list
    • First observedrate_card_upsert
    • First observedreceipt_record
    • First observedrecord_exchange_rate
    • First observedrecord_expense
    • First observedrecord_incoming_credit
    • First observedrecord_payment
    • First observedrefresh_plugin_compat
    • First observedreject_drafted_action
    • First observedreopen_month
    • First observedreports_delete
    • First observedreports_duplicate
    • First observedreports_list
    • First observedreports_preview
    • First observedreports_run
    • First observedreports_runs
    • First observedreports_save
    • First observedreports_schedule
    • First observedreports_sources
    • First observedreports_update
    • First observedrequisition_approve
    • First observedrequisition_cancel
    • First observedrequisition_close
    • First observedrequisition_convert_to_po
    • First observedrequisition_get
    • First observedrequisition_list
    • First observedrequisition_my_pending_approvals
    • First observedrequisition_reject
    • First observedrequisition_return
    • First observedrequisition_submit
    • First observedrequisition_upsert
    • First observedrestore_backup
    • First observedresume_recurring_schedule
    • First observedretainer_burndown
    • First observedretainer_close
    • First observedretainer_create
    • First observedretainer_generate_invoice
    • First observedretainer_list
    • First observedretainer_run_due
    • First observedretainer_update
    • First observedretry_automation_run
    • First observedreverse_entry
    • First observedreverse_payment
    • First observedreview_bank_txn
    • First observedreview_status
    • First observedrevoke_member
    • First observedrun_due_automations
    • First observedrun_due_recurring
    • First observedruntime_catalog
    • First observedruntime_select
    • First observedruntime_status
    • First observedsales_order_backorders
    • First observedsales_order_cancel
    • First observedsales_order_confirm
    • First observedsales_order_create
    • First observedsales_order_from_quote
    • First observedsales_order_get
    • First observedsales_order_invoice
    • First observedsales_order_list
    • First observedsave_draft
    • First observedsearch_global
    • First observedsearch_plugin_registry
    • First observedsend_dunning_run
    • First observedsend_invoice
    • First observedserial_archive
    • First observedserial_create
    • First observedserial_create_bulk
    • First observedserial_get
    • First observedserial_list
    • First observedserial_search
    • First observedserial_set_status
    • First observedserial_update
    • First observedset_agent_dial
    • First observedset_aging_bucket_config
    • First observedset_bank_opening_balance
    • First observedset_bank_sync_schedule
    • First observedset_camt_matching
    • First observedset_creditor_bank_profile
    • First observedset_creditor_profile
    • First observedset_default_document_template
    • First observedset_diagnostics
    • First observedset_dunning_config
    • First observedset_ebill_config
    • First observedset_field_value
    • First observedset_fiscal_config
    • First observedset_fx_method
    • First observedset_opening_balances
    • First observedset_qr_auto_apply
    • First observedset_role
    • First observedset_vat_method
    • First observedset_write_off_threshold
    • First observedsign_requests_complete
    • First observedsign_requests_create
    • First observedsign_requests_delete_draft
    • First observedsign_requests_get
    • First observedsign_requests_list
    • First observedsign_requests_record_event
    • First observedsign_requests_send
    • First observedsign_requests_withdraw
    • First observedstock_location_upsert
    • First observedstock_low_stock
    • First observedstock_move
    • First observedstock_on_hand
    • First observedstock_run_valuation
    • First observedstock_stocktake_commit
    • First observedstock_stocktake_count
    • First observedstock_stocktake_open
    • First observedstock_stocktake_report
    • First observedstock_valuation_report
    • First observedsuggest_matches
    • First observedsuggest_payment_matches
    • First observedsupplier_performance_alerts
    • First observedsupplier_performance_explain
    • First observedsupplier_performance_rank
    • First observedsupplier_performance_trend
    • First observedsupplier_price_list
    • First observedsupplier_price_upsert
    • First observedsupplier_scorecard_get
    • First observedsync_artifact_read
    • First observedsync_publish_disable
    • First observedsync_publish_enable
    • First observedsync_stream_read
    • First observedsync_stream_status
    • First observedtasks_cancel
    • First observedtasks_complete
    • First observedtasks_create
    • First observedtasks_list
    • First observedtasks_reminders_due
    • First observedtasks_snooze
    • First observedtasks_update
    • First observedtax_provision_preview
    • First observedtime_approve
    • First observedtime_delete
    • First observedtime_list
    • First observedtime_lock
    • First observedtime_log
    • First observedtime_resolve_rate
    • First observedtime_start
    • First observedtime_stop
    • First observedtime_submit
    • First observedtime_update
    • First observedtransition_document
    • First observedtrial_balance
    • First observedunarchive_account
    • First observedunarchive_bank_account
    • First observedunarchive_contact
    • First observedunarchive_cost_center
    • First observedunarchive_item
    • First observeduninstall_plugin
    • First observedunlock_period
    • First observedupdate_account
    • First observedupdate_automation_rule
    • First observedupdate_bank_account
    • First observedupdate_company_profile
    • First observedupdate_contact
    • First observedupdate_document
    • First observedupdate_document_template
    • First observedupdate_item
    • First observedupdate_recurring_schedule
    • First observedupdate_saved_view
    • First observedvat_annual_reconciliation
    • First observedvat_code_deactivate
    • First observedvat_code_reactivate
    • First observedvat_code_upsert
    • First observedvat_codes
    • First observedvat_config
    • First observedvat_configure
    • First observedvat_export_ech0217
    • First observedvat_mark_filed
    • First observedvat_periods
    • First observedvat_preview
    • First observedvat_return
    • First observedvat_saldo_declaration_basis
    • First observedvat_saldo_eligibility
    • First observedvat_saldo_generations
    • First observedvat_seed_defaults
    • First observedvat_settlement_list
    • First observedvat_settlement_post
    • First observedvat_settlement_preview
    • First observedvat_settlement_reverse
    • First observedvendor_portal_grant
    • First observedvendor_portal_grants_list
    • First observedvendor_portal_pos
    • First observedvendor_portal_remittance_create
    • First observedvendor_portal_remittances
    • First observedvendor_portal_revoke
    • First observedverify_backup
    • First observedvoice_build
    • First observedvoice_profile_get
    • First observedvoice_profiles_list
    • First observedvoice_retrieve
    • First observedvoid_vendor_bill
    • First observedwage_journal_post
    • First observedwarehouse_archive
    • First observedwarehouse_create
    • First observedwarehouse_get
    • First observedwarehouse_list
    • First observedwarehouse_set_default
    • First observedwarehouse_update
    • First observedwhoami

TDQS

B3/5.0

Scored across 822 tools

Disambiguation2/5

At 822 tools there are parallel legacy and current stacks that do the same thing (stock_move vs inventory_move, stock_stocktake_open vs inventory_stocktake_create, stock_run_valuation vs inventory_valuation_create), plus several overlapping payment-matching and three-way-match entry points. The individual descriptions are unusually detailed, but the boundaries between equivalent tools are not reliably distinguishable at this scale.

Naming Consistency3/5

Most names are readable snake_case, but conventions vary by module: verb_noun (list_items), noun_verb (quotes_create, deals_list), and bare nouns (vat_config, runtime_status). Prefixes also differ between equivalent areas (po_ vs purchase_, stock_ vs inventory_), so the pattern is mixed rather than uniform.

Tool Count1/5

822 tools is far beyond any well-scoped set and makes the surface impractical for an agent to hold or choose from. Even for a large ERP, this is an extreme mismatch that calls for a curated subset or progressive discovery.

Completeness4/5

The surface covers accounting, VAT, banking, fixed assets, inventory, projects, time, billing, procurement, migration, checklists and administration with lifecycle verbs and reversal paths. Gaps are minor relative to the enormous domain, so coverage is genuinely broad.

Maintenance

ActivityActive
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    MCP server for DACH accounting automation. Connect AI assistants to sevDesk and Lexoffice — create invoices, manage contacts, handle bookings and vouchers for German-speaking businesses.
    15
    58 npm
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    A Model Context Protocol (MCP) server that keeps the books for your personal and business finances using double-entry accounting — driven entirely from an LLM.
    60 npm
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for Spanish accounting for freelancers and SMEs, enabling AI agents to issue invoices, OCR expense PDFs, reconcile bank transactions, and prepare quarterly VAT (Modelo 303).
    23
    4
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for agent-first double-entry bookkeeping for Dutch SMEs, supporting VAT, Peppol BIS 3.0 e-invoicing, and local-first SQLite storage with full audit logging and deterministic JSON output.
    3
    Apache 2.0