Skip to main content
Glama

MCP Office Suite

MCP server for small business accounting and paperwork: invoices, PDFs, spreadsheets, Word documents, time tracking and expenses. One local config entry for invoicing, documents, time tracking and supplier checks.

Works with Claude Desktop, Claude Code, Cursor and any Model Context Protocol client. Runs on your own machine: this one has no hosted endpoint, so install it from the bundle or from source.

Product page: https://mcp.zovo.one/s/office-suite — capabilities, free limits and supported installation paths.

Install

Claude Desktop, one click. Download office-suite.mcpb from the bundle catalog and double-click it.

From source. The mirror is self-contained: every @theluckystrike/* dependency is vendored, so a fresh clone builds with no extra setup.

git clone https://github.com/theluckystrike/mcp-office-suite.git
cd mcp-office-suite
npm install && npm run build

Then point your client at the built entry point:

{
  "mcpServers": {
    "office-suite": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-office-suite/dist/index.js"]
    }
  }
}

@theluckystrike/mcp-office-suite is not published on npm yet, so an npx -y @theluckystrike/mcp-office-suite command will fail. The three paths above are the working ones and each is exercised by CI.

office-suite demo

Read-only mirror of mcp-servers/servers/office-suite. See MIRROR.md.

Run the freelancer office from one MCP config entry. The v0.22.9 bundle initializes 49 local child servers and exposes 447 tools, measured over MCP on 2026-10-16. It includes time tracking, invoices, spreadsheets, quotes, expenses and the supplier-invoice three-way matcher and duplicate invoice candidate review. The proxy forwards tools, resources and prompts to the child that owns them; each child keeps its own storage and free tier.

Built by theluckystrike. MIT. Support: support@zovo.one.

Related MCP server: Multi MCP

Install

For Claude Desktop, download office-suite.mcpb v0.22.9 and open it. Verify it using the release's SHA256SUMS.txt.

The download catalog lists explicit archive versions. The latest GitHub release is not a complete collection of all server bundles. This proxy is local stdio only; it has no hosted endpoint. Its npm package and internal dependencies are not published, so use the bundle or build from source.

Source installation requires Node.js 22 or newer for the current repository build tooling:

git clone https://github.com/theluckystrike/mcp-servers.git
cd mcp-servers
npm install
npm run build

The root build bootstraps the license/timezone engine dependency and builds the child servers. Use your checkout's absolute path in the config. For Claude Desktop, merge this entry into mcpServers in its config file:

{
  "mcpServers": {
    "office-suite": {
      "command": "node",
      "args": ["/absolute/path/mcp-servers/servers/office-suite/dist/index.js"]
    }
  }
}

For Cursor, merge the same entry into .cursor/mcp.json or your user MCP config. For Claude Code:

claude mcp add office-suite -- node /absolute/path/mcp-servers/servers/office-suite/dist/index.js

Restart the client, call license_status, and read office://tools_map to discover the children and exact exposed tool names. A successful tools list confirms discovery; run a real task to verify the workflow you need.

Tools and collision names

Entry

Behavior

Child tools

The child's own tools, arguments and free/Pro rules.

license_status

Per-child license state and the bundle checkout URL.

license_activate

Forwards a key to every connected child and reports every result.

office://tools_map resource

Maps exposed tool names to their child and original name.

When child names collide, the proxy exposes names prefixed with the child, such as invoice_business_set. Child result payloads, including JSON source records, raw CSV, HTML and prose, retain their original values. Each forwarded result adds collision mappings under _meta["office-suite/tool-names"] and points to office://tools_map; explicit retrieval tool hints in matcher report envelopes use the exposed names. Read the runtime map rather than guessing a prefix or relying on an older static tool table.

The v0.22.9 manifest's 447 names and descriptions match the actual running bundle, including collision prefixes. Measured inventory and artifact evidence are available. This verifies discovery and matcher delivery through the proxy; it is not a feature test of every child tool.

Free and Pro

Free

Pro bundle

Each child's documented free tier; no subscription required

$39 one time, removes the applicable limits across the children

Get the $39 bundle, then call license_activate with the bundle key or set MCP_LICENSE_KEY in the server environment. Keys verify offline. A $19 single-server key upgrades its own product; it does not unlock the whole suite.

Activation returns an error if any connected child rejects the key, with an OK/FAILED result for each child. Accepted activations are not rolled back: use the result table and license_status, correct the key or failing child, and retry. Do not interpret a partial activation as all children being Pro.

Local execution and privacy

Every child runs as its own stdio process and stores its documents under its own data directory, normally ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/<name>/. The proxy adds no document store. Individual tools may make public network requests, for example price, currency or backlink checks; read the relevant child's documentation. Your AI client or model provider has its own data handling.

Child stderr is drained into the proxy's stderr with the child name. An unexpected child exit rejects pending requests and gets one restart attempt; an interrupted mutation must be checked before retrying it.

Available Tools

129 tools
alerts_pendingPending alertsA

Answer whether anything you watch got cheaper: every watch at or below its target_price, or down 5% or more since the previous observation, with the change %. Reads stored data only: run watch_refresh first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior1/5

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

The description claims 'Reads stored data only,' which indicates a read-only operation, but the annotations set readOnlyHint to false. This is a direct contradiction between the description and the structured annotation, so behavioral transparency fails.

Agents need to know what a tool does to the world before 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 core question and thresholds, then adds the prerequisite and data-source clarification.

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 zero-parameter tool with no output schema, the description thoroughly covers purpose, thresholds, change percentage, and the watch_refresh prerequisite. An agent has enough information 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?

This tool has zero parameters and 100% schema description coverage, so there are no parameter semantics for the description to add. The zero-parameter baseline applies.

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

Purpose5/5

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

The description states a specific action and resource: 'Answer whether anything you watch got cheaper' and defines the exact alert criteria (at/below target_price or down 5% since previous observation, with change %). This clearly distinguishes it from siblings like watch_list or watch_refresh.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 provides the prerequisite 'run watch_refresh first' and clarifies that it reads stored data, giving clear when-to-call context. It does not explicitly name alternatives to avoid, but the usage context is sufficient.

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

business_daysCount business daysA

Count business days between two dates in a place, inclusive, with the calendar total and the weekend and holiday counts. It has NO holiday calendar: without holidays, only weekends are excluded.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd date, YYYY-MM-DD (inclusive)
fromYesStart date, YYYY-MM-DD (inclusive). A date that does not exist, such as 2026-02-30, is refused, never rolled forward
zoneYesPlace whose calendar to use
holidaysNoDates to exclude, strict YYYY-MM-DD. This tool has no national holiday calendar: unless you pass holidays here only weekends are excluded, so do not report the answer as a public-holiday-adjusted count

TDQS

A4.2/5.0
Behavior4/5

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

With no meaningful annotations (all hints false), the description carries the transparency burden and does a good job: it discloses inclusivity, the presence of weekend/holiday counts, and the critical 'no holiday calendar' behavior. It does not describe the exact return structure, but the output components are named.

Agents need to know what a tool does to the world before 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 main purpose is front-loaded, and the crucial no-holiday-calendar caveat is placed immediately after, making the most important limitation easy to notice.

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

Completeness4/5

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

For a moderate-complexity calculation tool with full schema parameter descriptions, the description is largely complete: it states purpose, inclusivity, result components, and the holiday limitation. It does not spell out the exact return format or behavior for edge cases like from > to, but those are not essential 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 100%, so the schema already documents all four parameters. The description adds context like 'inclusive' and the weekend/holiday-count behavior, but it mostly reinforces the schema rather than adding new parameter-level 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 names a specific action (count), a specific resource (business days between two dates), and the scope (in a place, inclusive). It also states what the result includes (calendar total, weekend count, holiday count), which clearly distinguishes it from sibling time/calendar tools like convert_time or dst_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?

The description gives clear context for when the tool is appropriate and explicitly warns that the result is not holiday-adjusted unless holidays are passed. It does not name sibling alternatives or give an explicit 'use X instead' rule, but the limitation is stated strongly enough to prevent misuse.

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

cache_statusRate cache statusA
Read-onlyIdempotent

Report the ECB rate cache here: which dates are held, how old they are and when they refresh. Reads only. Check it before trusting a rate after time offline; a cache that no longer parses is quarantined and named.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context beyond those: the cache can become unparsable and 'quarantined and named', and the tool reports refresh timing. This enriches the agent's understanding of cache health 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 three sentences with no wasted words. It front-loads the primary purpose, then adds the when-to-use hint and the quarantine caveat. Every sentence 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 zero-parameter, read-only status tool, the description is complete: it states what is reported, when to check it, and a key failure behavior. No output schema exists, but the description does not need to enumerate return fields for an agent to invoke this 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 and the schema is empty, so there are no parameter semantics to clarify. Per baseline for zero-parameter tools, a score of 4 is appropriate; the description correctly focuses on the tool's no-input status 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?

Description uses a specific verb ('Report') and resource ('ECB rate cache'), and details exactly what is reported: held dates, age, and refresh timing. It clearly distinguishes this cache-status tool from sibling rate-conversion and rate-query tools like rates_latest and rate_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 context for when to use the tool: 'Check it before trusting a rate after time offline.' It also explains the quarantine behavior. It does not explicitly state when not to use it or name alternatives, but the usage trigger is clear enough 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.

calendars_listList imported calendarsA
Read-onlyIdempotent

List imported calendars: name, event-definition count, size, source, import time and free-tier use of the 2 slots. It also names stored .ics files with no calendar row. With none it prints the export steps.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context beyond annotations: it names stored .ics files with no calendar row and describes the fallback behavior of printing export steps when there are none. This is genuinely useful edge-case disclosure that the 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.

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 fields. The first sentence immediately states the action and result set; the second sentence adds two edge-case behaviors. There is no filler, redundancy, or irrelevant detail. 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 listing tool with no parameters and no output schema, the description covers what is returned (fields and edge cases) and even the no-result fallback. It does not specify the exact output formatting, but that is minor given the tool's low complexity. An agent can predict behavior and interpret results 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 tool has zero parameters, so the schema provides no parameter documentation. Per the rubric, a 0-parameter tool gets a baseline of 4. The description does not need to add parameter meaning, and it does not attempt to invent any. The description's focus on output is appropriate given the lack of 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 starts with 'List imported calendars' — a clear verb-resource pair — and enumerates the exact fields returned (name, event-definition count, size, source, import time, free-tier use of 2 slots). It also distinguishes itself from siblings by noting it handles .ics files without calendar rows and prints export steps when empty, which is specific and non-overlapping with import/export 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 clearly states what the tool does, but it does not explicitly say when to use it versus alternatives like ics_import or ics_forget. The context makes it self-evident (you call it to view your calendars), yet there is no explicit 'use this when...' or 'instead of...' guidance. It relies on the tool's purpose being obvious.

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

clause_addAdd a clauseA

Save a reusable contract or proposal clause to the library. Returns the stored clause id, title, category, tags and the variables detected in its body, plus how many clauses of your own the library now holds.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe clause text. Use {{variable}} placeholders for the facts that change per client, for example {{client}}, {{fee}} or {{late_fee_percent}}; contract_assemble fills them at assembly time. Free tier: 10 clauses of your own on top of the 25 starters
tagsNo
titleYesClause heading, for example 'Late Payment'
categoryYesGrouping. The known ones, in assembly order, are parties, scope, payment, expenses, ip, confidentiality, data, term, liability, warranty, disputes, general -- reuse one of these; any other name is accepted but sorts last in a category-based assembly
languageNoISO language code, default en
variablesNoDeclared variable names. Anything {{...}} in the body is detected anyway
jurisdictionNoWhere the clause is meant to apply, for example 'PL' or 'England and Wales'

TDQS

A4/5.0
Behavior4/5

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

The annotations only provide generic hints (readOnlyHint: false, etc.), so the description carries the responsibility for behavioral disclosure. It clearly indicates a write operation ('Save') and adds valuable detail about the response, including the stored id, detected variables, and updated clause count. It does not discuss duplicate handling or quota failures, but the free-tier note appears in 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?

The description is a single dense sentence with no wasted words. It front-loads the action and resource, then efficiently covers return value details that would otherwise be missing without an 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 tool with seven parameters and no output schema, the description plus the detailed input schema provide enough context to call the tool correctly. The description usefully fills the output gap by naming the returned fields. A small omission is the lack of guidance about alternative tools, but that does not block 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 86%, and the schema already provides rich parameter explanations, such as {{variable}} placeholders, known category names, and auto-detection of variables. The tool-level description adds little parameter-specific meaning, but it does not need to because the schema carries the 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 uses a specific action verb ('Save') and identifies the exact resource: a reusable contract or proposal clause stored in a library. It clearly distinguishes this from sibling tools like clause_update and clause_delete, and from contract_assemble, by focusing on adding to the library.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 adding a new reusable clause, which is clear enough context. However, it does not explicitly state when to prefer it over alternatives such as clause_update for modifying an existing clause, nor does it mention any exclusions or prerequisites.

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

clause_deleteDelete a clauseA
Destructive

Delete one clause by id or exact title and report how many are left. There is no undo, and a deleted starter clause is not re-seeded. Use clause_update to change one you want to keep.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClause id or exact title

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare destructiveHint=true, so the destructive nature is known. The description adds valuable context beyond that: it discloses that deletion is irreversible, that starter clauses are not re-seeded, and that the tool reports the remaining count. These specifics help the agent set expectations for the call outcome.

Agents need to know what a tool does to the world before 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. The primary action and input method are front-loaded, followed by the two critical warnings and the alternative tool. Every sentence 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 single-parameter destructive tool, the description fully covers what an agent needs: the input, the return behavior (reports count left), the irreversible nature, the non-reseeding caveat, and the alternative tool. With no output schema, the description adequately handles the response expectation.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 description for the 'id' parameter already states 'Clause id or exact title' with 100% coverage. The tool description merely repeats this phrase without adding new constraints, formats, or examples. Since the schema fully documents the parameter, a 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 states a specific action ('Delete one clause'), the resource ('clause'), and the input method ('by id or exact title'). It also differentiates from the sibling clause_update by explicitly naming it as the alternative for editing, so an agent can immediately tell this tool apart.

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 guidance: 'Use clause_update to change one you want to keep' – this is an explicit when-not and alternative. It also warns about the irreversibility ('There is no undo') and the non-reseeding of starter clauses, which informs when to use the tool cautiously.

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

clause_exportExport clausesA
Read-onlyIdempotent

Call this tool to write the whole library to one file and return the path, format and count. It is written in contract order, so it re-imports the same way. markdown is free; json is Pro.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesDestination file path. The clauses are written in assembly order, categories first
formatYesjson (a Pro feature) or markdown (works in the free tier)
overwriteNoReplace the destination if a file is already there. Without it an existing file is never touched

TDQS

A3.6/5.0
Behavior1/5

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

The description states the tool will 'write the whole library to one file,' which is a side-effecting operation, while the annotation declares readOnlyHint=true. This directly contradicts the annotations, so the behavioral transparency score is the minimum per the rubric.

Agents need to know what a tool does to the world before 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 adding useful information: what the tool does, the ordering/round-trip behavior, and the format restriction. The core action 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.

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 return tuple (path, format, count) and the re-import behavior. It is mostly complete for a simple export tool, but the contradictory readOnlyHint creates ambiguity about 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?

The input schema already documents all three parameters with 100% coverage, so the baseline applies. The description repeats the markdown/json pricing distinction already present in the schema and adds no meaningful parameter semantics beyond 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 uses a specific verb phrase, 'write the whole library to one file and return the path, format and count,' which clearly identifies the operation. It also distinguishes itself from the sibling clause_import by noting the export re-imports the same way.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 opens with 'Call this tool to write the whole library to one file,' which gives clear guidance on the intended use. It does not explicitly list exclusions or alternative tools, but the purpose is well-scoped enough that an agent can infer when it applies.

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

clause_getRead one clauseA
Read-onlyIdempotent

Return one clause in full by id or title: body, category, tags, jurisdiction, variables and the revision count, which stays 0 on free. A partial title matching several is refused with the candidates.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoClause id, for example late-fees
titleNoClause title; a partial title matches too

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds behavioral nuance beyond those annotations: the revision count 'stays 0 on free', and an ambiguous partial title match 'is refused with the candidates'. These are useful, non-obvious behaviors that help an agent predict outcomes. 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?

Two sentences, no filler. The core action and lookup keys are front-loaded, and the second sentence covers the important edge case without over-explaining. 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 read tool with two optional parameters, the description covers the return contents and the main edge case. The absence of an output schema is mitigated by listing the returned fields. The only minor gap is that neither parameter is formally required by the schema, so an agent might wonder what happens if both are omitted, but 'by id or title' strongly implies one is needed.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents id and title individually. The description adds value by clarifying the relationship between the two parameters: they are alternative lookup keys ('by id or title'), and one can be partial while the other is exact. It also explains the consequence of an ambiguous title match, which the schema does not 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 opens with a specific verb and resource: 'Return one clause in full by id or title.' It also enumerates what 'full' includes (body, category, tags, jurisdiction, variables, revision count), and the word 'one' distinguishes it from listing/searching tools. This is unambiguous and clearly separates clause_get from clause_list and clause_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 makes the selection context clear: use this tool when you need a single complete clause and have an id or title. The partial-title refusal behavior also tells the agent how the tool behaves in ambiguous cases. It does not explicitly name alternatives like clause_list or clause_search, but the 'one clause in full' framing makes the intended usage evident.

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

clause_importImport clausesA

Call this tool to load clauses from a .md or .json file, reporting added, replaced, skipped and capped counts. A duplicate title is skipped unless overwrite. json is Pro. Free: 10 of your own.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to a .md or .json file. Markdown form: '## Title', then optional 'category:' / 'tags:' / 'variables:' lines, a blank line, then the body. JSON form: an array of clauses. JSON import is a Pro feature; markdown import works in the free tier, within the free clause cap
overwriteNoReplace clauses whose title already exists instead of skipping them

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only provide broad hints (non-read-only, non-idempotent, non-destructive). The description adds genuine behavioral detail: duplicate titles are skipped unless overwrite is set, and the tool reports added/replaced/skipped/capped counts. This aligns with the annotations and goes beyond them.

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

Conciseness4/5

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

Three short sentences, with the core action and results front-loaded. Every sentence adds information, though 'Free: 10 of your own' is telegraphic and could confuse an agent without more context. Still, the description is economical and well-ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 import tool, the description plus schema cover file formats, overwrite behavior, plan limits, and reported counts, which is enough for correct invocation. It lacks explicit error semantics and a full return shape, but the listed counts partially compensate for the missing 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 100%, so the schema already fully documents both path and overwrite. The description's 'duplicate title is skipped unless overwrite' and 'json is Pro' largely restate what the schema says, adding little new parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 action ('load clauses from a .md or .json file') and names the observable outcome (added/replaced/skipped/capped counts). It is clearly distinct from siblings like clause_add or clause_export, but it never names those alternatives, 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 Guidelines4/5

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

The first sentence explicitly tells the agent when to call it: to import clauses from a file. It also adds plan-level context (JSON is Pro, markdown works in free tier, 10-clause cap). However, it does not name alternative tools or state when not to use them.

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

clause_listList clausesA
Read-onlyIdempotent

List the library as id, title, category, tags and variables, in contract order by category then title, which is the order contract_assemble uses. Narrow with category; use clause_search for words.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral detail beyond annotations: the output field set, the sort order by category then title, and the relationship to contract_assemble. It does not mention pagination or exact-match semantics, but those are not critical for this simple read 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 a single dense sentence that front-loads the action and result fields, then provides ordering and routing guidance. Every phrase earns its place: output shape, sort order, category narrowing, and the clause_search alternative.

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?

This is a simple, one-parameter read-only list tool. The description covers the returned data shape, the optional category filter, the ordering semantics, and the sibling tool to use for word searches. There is no output schema, but the description itself supplies enough return-shape information for an agent to use the tool correctly.

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

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 explaining the category parameter. 'Narrow with category' adds meaningful filter semantics beyond the bare string type in the schema, though it does not specify exact-match behavior or provide allowed values. Still, for a single optional parameter, this is sufficient 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 the verb 'List' and the resource 'the library', and explicitly enumerates the returned fields: id, title, category, tags, and variables. It also distinguishes itself from clause_search by noting that clause_search is for words, so an agent can tell the two 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 Guidelines5/5

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

The description gives clear usage direction: narrow with the category parameter, and use clause_search when searching by words. It also explains that the list ordering is the same order contract_assemble uses, which gives helpful context for when an agent should call this tool.

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

clause_updateUpdate a clauseA

Change the text, category, tags, variables or jurisdiction of a clause. In Pro the previous text is kept as a version; in the free tier the change is applied without history.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClause id or exact title
bodyNo
tagsNo
titleNo
categoryNo
languageNo
variablesNo
jurisdictionNo

TDQS

A3.9/5.0
Behavior4/5

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

The description adds meaningful behavior beyond the annotations by disclosing versioning behavior: Pro retains the previous text as a version, while the free tier applies changes without history. This is useful context that 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 tightly written sentences: the first states the core operation and target fields, the second adds behavior context. 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 action and versioning behavior, but for an 8-parameter mutation tool without an output schema, it leaves out important guidance such as expected response, error behavior, or confirmation of success. Some parameters are also 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?

With only 13% schema description coverage, the description helps by naming several updatable fields (text, category, tags, variables, jurisdiction). However, it omits title and language parameters, so it does not fully compensate for the sparse 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 ('Change') and identifies the exact resource ('a clause') along with the editable fields. This clearly differentiates it from sibling tools like clause_add, clause_delete, and clause_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 modifying existing clauses, which is clear enough to distinguish it from clause_add or clause_delete. However, it does not explicitly state when to use this tool over alternatives or mention any preconditions or exclusions.

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

client_addAdd a clientA

Store a client so invoice_create can refer to them by name. Re-adding the same name updates the stored address, email and VAT id; a record identical to a stored one is refused, naming the id that already holds it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
emailNo
vat_idNoClient VAT id, printed for reverse-charge invoices
addressNo

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses substantial behavior beyond the sparse annotations: re-adding the same name updates stored address, email, and VAT id, while an identical record is refused with the existing record's id. This gives the agent a precise mental model of the upsert and duplicate-handling 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?

Two tightly written sentences with the primary purpose first and the behavioral edge cases second. Every clause contributes new information, with no filler or repetition of the title or schema.

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 covers purpose, usage, update semantics, and duplicate-conflict response, which is substantial for a tool with no output schema and sparse annotations. The agent has enough information to invoke it correctly and anticipate key edge 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 only 25% schema description coverage, the description compensates by explaining that name is the identity key and address/email/vat_id are the updateable fields. It does not provide format or validation details, but it adds meaningful semantic context beyond the raw 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 'Store a client', a specific verb and resource, and immediately adds the purpose: so invoice_create can refer to them by name. This clearly distinguishes client_add from read-only siblings like client_list or invoice 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 provides clear context by tying the tool to invoice creation and explaining that re-adding the same name updates an existing client. It does not explicitly name alternatives or state when not to use it, so it falls short of full exclusion guidance.

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

client_deleteDelete a clientA
Destructive

Delete one stored client that nothing refers to. A client named on any invoice, quote, credit note, purchase order, deposit, statement or schedule is refused with those documents listed.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientYesClient name or id, exactly as client_list shows it

TDQS

A4.5/5.0
Behavior5/5

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

The destructive hint annotation already flags mutation, but the description adds valuable behavioral detail: deletion is conditional on absence of references, and refused deletions list the offending documents. This goes beyond the annotation and helps an agent predict 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.

Conciseness5/5

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

Two sentences carry the full meaning: the first states the operation and precondition, the second states the failure behavior. There is no redundant phrasing 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?

For a single-parameter destructive tool with annotations and full schema coverage, the description is complete: it defines the valid target, the constraint, and the refusal response. No output schema is needed to make correct use unambiguous.

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

Parameters3/5

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

Schema description coverage is 100% and the client parameter already specifies 'Client name or id, exactly as client_list shows it'. The description adds no parameter-specific information, so the baseline of 3 applies.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Delete one stored client', and adds a distinguishing scope condition ('that nothing refers to'). This separates it clearly from sibling tools like client_add and client_list, and the reference-refusal behavior adds further specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 condition under which the tool is appropriate: only clients with no references can be deleted, and it explicitly describes the refusal case when the client appears on any listed document. It does not name alternative sibling tools explicitly, but the condition is clear enough to guide selection.

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

client_listList clientsA
Read-onlyIdempotent

List every stored client with id, address, email and VAT id. No arguments, and it writes nothing. With none stored it says so: invoice_create also creates a client from the name you pass.

ParametersJSON Schema
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 cover readOnlyHint, idempotentHint, and destructiveHint, so the bar is lower. The description adds useful behavioral context beyond annotations: it states the empty-list behavior ('With none stored it says so') and notes that invoice_create can create a client, which helps interpret an empty result. 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?

The description is short and front-loaded with the main purpose. The final note about invoice_create is slightly tangential but still adds context about empty results; overall it earns its place without excessive verbosity.

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 zero-parameter, read-only list tool without an output schema, the description is complete: it names the result fields, states the empty-case behavior, and confirms no side effects. Nothing an agent needs to invoke 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?

The tool has zero parameters and the schema is an empty object with 100% coverage, so there is essentially no parameter semantics to add. The description explicitly confirms 'No arguments,' which is sufficient and aligns with 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 states a specific verb ('List') and resource ('every stored client') plus the exact fields returned (id, address, email, VAT id). It is immediately distinguishable from siblings such as client_add and client_delete, and even clarifies the no-argument nature of the 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 gives clear context for when to call this tool (need to see all stored clients) and explicitly notes it takes no arguments and writes nothing, signaling it is a safe read-only list operation. It does not explicitly enumerate when not to use it, but the purpose is self-evident among the sibling tools.

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

conflictsFind double bookingsA

Find double bookings: every PAIR of timed events that overlap, with the minutes they collide, across all calendars unless you name one. Whole-day events are reported apart. Free: 31 days. free_busy shows gaps.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesLast day, YYYY-MM-DD, included
fromYesFirst day, YYYY-MM-DD
calendarNoOne calendar name; default every imported calendar

TDQS

A4.2/5.0
Behavior4/5

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

Annotations provide no behavioral hints, so the description carries that burden. It discloses the pairwise overlap behavior, collision minutes, whole-day event separation, calendar scope default, and a 31-day free bound. The phrase 'Free: 31 days' is a bit cryptic but still adds behavioral context. 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, each carrying real information and no filler. The core definition is front-loaded, and the sibling distinction and edge-case handling are placed after the main purpose, which is an ideal structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 no output schema and no annotations, the description covers the main aspects an agent needs: what is returned conceptually, how whole-day events are handled, how calendar scoping works, and a usage boundary. The main gap is that the response format is not explicitly described and 'Free: 31 days' is ambiguous, but the description is still 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?

The schema already describes all three parameters at 100% coverage, so the baseline is 3. The description adds only mild clarification with 'unless you name one' for the calendar parameter. It does not meaningfully add to from/to beyond the cryptic '31 days' reference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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: 'Find double bookings' and defines precisely what counts as one—'every PAIR of timed events that overlap, with the minutes they collide.' It also distinguishes from free_busy by noting that free_busy 'shows gaps,' so the tool's purpose is 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 useful context for when to use the tool: overlap detection across calendars, with an optional calendar scoping. It explicitly names free_busy as the alternative for gaps. It does not enumerate exclusions versus every sibling, but the mention of free_busy is a clear enough routing signal.

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

contacts_listList saved contactsA
Read-onlyIdempotent

List saved contacts with their zone, local time now, working hours and whether they are inside them; weekends count as outside. It also prints YOUR zone from the shared business profile.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds meaningful behavioral details beyond that: weekends are treated as outside working hours, and it also prints the requesting user's own zone from the shared business profile.

Agents need to know what a tool does to the world before 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, front-loaded sentences cover the purpose and key behavioral nuances without repetition or filler. Every clause adds information the agent needs.

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 parameters and safety fully covered by annotations, the description sufficiently explains the return content: contact zones, current local time, working hours, in-hours status, weekend policy, and the caller's zone. 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.

Parameters4/5

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

There are zero parameters and schema description coverage is complete at 100%, so the baseline is 4. The description correctly focuses on output semantics rather than parameter documentation, and no parameters need clarification.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('List'), the resource ('saved contacts'), and the distinctive output: zone, local time, working hours, and in-hours status. This cleanly separates it from sibling tools like contacts_set and the generic time utilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 tool is for listing saved contacts enriched with scheduling-relevant information年代中期 local time and working hours. It does not explicitly name alternatives or exclusions, but the use case is strongly implied and distinguishes it from other siblings.

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

contacts_setSave a contact's zoneA

Save one person's zone and working hours so later calls can name them. Returns the resolved zone and their local time now. Saving the same name REPLACES that contact and says so. Free: 5 contacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTheir name
zoneYesTheir place or IANA zone
work_endNoLocal day end, default 17:00
work_startNoLocal day start, default 09:00

TDQS

A3.8/5.0
Behavior4/5

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

All annotations are false, so the description carries the behavioral burden. It discloses persistent saving, return of resolved zone and local time, replacement of same-name contacts, and the free limit of 5. It does not cover error cases or permission needs, but the key behaviors are present and non-contradictory.

Agents need to know what a tool does to the world before 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: core action, return behavior, and replacement caution plus limit. No fluff, front-loaded with the primary purpose.

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

Completeness4/5

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

For a simple save tool with no output schema and no helpful annotations, the description covers the essentials: what it does, what it returns, replacement behavior, and the free limit. Minor gaps around error handling and exact response structure are not necessary for correct invocation.

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

Parameters3/5

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

Schema coverage is 100%, with descriptions for all four parameters, so the baseline is 3. The description adds the notion of zone resolution and working hours, but it does not provide meaningful format or usage details beyond the schema. Marginal added value over the structured 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 action and resource: 'Save one person's zone and working hours' with a clear purpose ('so later calls can name them'). It is immediately distinguishable from siblings like contacts_list (save vs. list) and the time-conversion 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 when-to-use or when-not-to-use guidance is given, and no alternative tools are mentioned. The purpose clause implies a use case, but the agent must infer when this tool is appropriate versus siblings like contacts_list or convert_time.

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

contract_assembleAssemble a contractA

Call this tool to build a contract from library clauses as .docx or markdown. A variable you omit stays as a bracketed prompt, never invented. clause_ids order is document order. Free: 8 clauses.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesDocument title, for example 'Service Agreement - Beta Corp'
clientNoClient name; also fills the {{client}} variable
formatNodocx (default) or markdown; the document opens with the not-legal-advice line either way
valuesNoValues for the {{variables}} in the chosen clauses, for example {"fee":"4500","late_fee_percent":"2"}. Any variable you leave out stays in the document as a bracketed prompt such as [late fee percent], never as an invented value
out_pathNoWhere to write the file. Default: the server data directory, under a name built from the client and the title
overwriteNoReplace out_path if a file is already there. Without it an existing file is never touched
categoriesNoInstead of ids: every clause in these categories, ordered by category. Free tier: up to 8 clauses per document
clause_idsNoClause ids in the order they should appear; this is the document order. Free tier: up to 8 clauses per document

TDQS

A4.2/5.0
Behavior4/5

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

Annotations (readOnlyHint=false, destructiveHint=false) indicate a non-destructive write operation, which the description aligns with. Beyond annotations, it adds valuable behavior: omitted variables stay as bracketed prompts ('never invented'), clause_ids order equals document order, and the free-tier cap of 8 clauses. These are genuinely useful disclosures not present in 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?

Four tight sentences with the core purpose front-loaded, followed by two behavioral constraints (variable non-invention, ordering) and the tier limit. No wasted words; each 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 moderately complex tool (8 params, nested objects, no output schema), the description covers purpose, format, variable behavior, ordering, and usage limits. Schema handles parameter details. Minor gap: no statement about what happens on success/failure, but given 100% schema coverage this is not a serious omission.

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

Parameters3/5

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

Schema description coverage is 100%, so all 8 parameters are already documented in the schema. The description reinforces the values/ordering behavior (already in the schema) and adds only the free-tier limit — marginal new value beyond the schema baseline of 3.

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

Purpose5/5

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

The description states a specific verb ('build') and resource ('a contract from library clauses'), with output formats specified. It clearly distinguishes from sibling tools, which are all clause-level operations (clause_add, clause_delete, clause_get) or license management — none assemble documents.

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

Usage Guidelines4/5

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

'Call this tool to build a contract from library clauses' gives clear, direct invocation context. No sibling offers an assembly alternative, so explicit exclusion isn't needed; the guidance is unambiguous about when this tool applies.

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

contract_createCreate a service agreementA

Call this tool to produce a freelance service agreement .docx. Returns the reference, the fee and the file path. It is a template skeleton for a lawyer to review, not legal advice. Free tier: 3 agreements per month.

ParametersJSON Schema
NameRequiredDescriptionDefault
feeYes
clientYesThe client's legal name
clausesNoExtra clauses to append, one paragraph each
end_dateNoYYYY-MM-DD, omit for an open-ended engagement
out_pathNoWhere to write the .docx. Defaults to the data directory
servicesYesWhat you will do, one or two sentences. The document adds parties, term, fee and schedule, plus standard clauses on intellectual property, confidentiality, independent contractor status, liability, termination and governing law
overwriteNoReplace out_path if a file is already there. Default false: an existing file is never overwritten
start_dateYesYYYY-MM-DD
governing_lawNoe.g. 'the laws of Poland'

TDQS

A4.1/5.0
Behavior5/5

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

The description discloses return behavior ('Returns the reference, the fee and the file path'), the nature of the output ('template skeleton for a lawyer to review, not legal advice'), and a rate limit ('Free tier: 3 agreements per month'). These add substantial context beyond the spartan annotations.

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

Conciseness5/5

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

Three sentences, each earning its place: the first states the operation, the second lists return values, and the third covers the legal-review caveat and quota. No filler or redundant 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 create operation with no output schema, the description adequately covers return values and the draft nature of the document. Yet given the large sibling set and 9 parameters, a short note on why contract_create should be chosen over proposal_create or doc_create would make it more complete.

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

Parameters3/5

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

Schema description coverage is 89%, so most parameters are already documented in the schema. The description does not add meaning to any specific parameter; it only mentions 'fee' as part of the return value. Baseline 3 is appropriate.

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

Purpose4/5

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

The description uses a specific verb ('produce') and a clear resource ('freelance service agreement .docx'), making the tool's function immediately understandable. It does not explicitly name or contrast with sibling tools like proposal_create or doc_create, but the resource type is specific enough to be distinguished in most cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 call-to-action: 'Call this tool to produce a freelance service agreement .docx.' It adds context about the template being for lawyer review and the free-tier limit, but it does not 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.

convertConvert an amountA

Call this tool to convert an amount between any two ECB-quoted currencies, today or on a past date. Returns the converted amount, the cross rate to 6 decimals, the rounding applied and the rate date used.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoCurrency to convert into; defaults to the shared business profile's default_currency, so you are never asked what currency you invoice in. The result is rounded once, at the end, to this currency's own ISO 4217 minor units, so JPY comes back whole and BHD to three places
dateNoISO date YYYY-MM-DD. Omit for the latest published rate. A weekend or TARGET holiday falls back to the last rate published on or before it, and the answer says so. A date older than the free 90-day window is shortened to the oldest free day, not refused, and the answer names the date it really used
fromYesCurrency the amount is in. Cross rates go through the euro, the only pair the ECB publishes
amountYesAmount in major units of the from currency, e.g. 100 or 12.34

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the all-false annotations, the description discloses exact return behavior: converted amount, cross rate to six decimals, rounding applied, and the rate date used. It stops short of discussing side-effect/read-only status, but for a conversion tool this is a meaningful 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?

Two sentences with no filler: the first names the action and scope, the second lists the return details. Every clause 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?

With no output schema, the description's return-value enumeration is valuable and mostly complete. The rich parameter schema covers date fallback and rounding rules; the only gap is explicit routing versus convert_many for multi-currency batches.

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

Parameters3/5

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

Schema coverage is 100%, so the parameters are already fully documented in the input schema. The description adds no parameter-level meaning beyond what the schema provides, which lands at the 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?

The description states a specific verb and resource: convert an amount between ECB-quoted currencies. It also distinguishes from the convert_many sibling by focusing on a single amount, and from rate-focused siblings by emphasizing conversion output rather than raw rates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 phrase 'Call this tool to convert an amount...' gives a clear when-to-use trigger. It does not explicitly name alternatives like convert_many or state when not to use it, but the context is unambiguous enough to avoid misrouting.

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

convert_manyConvert one amount into several currenciesA

Convert one amount into many currencies off the SAME ECB rate date, each rounded to its own minor units. For several lines at once (mixed-currency invoice lines), call it once per line: every line then shares one rate date. Unknown targets are listed, never failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget currencies
fromYes
amountYes

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 the annotations: same ECB rate date, rounding to each target's own minor units, and unknown targets being listed rather than causing failure. The annotations are all false and uninformative, so the description carries the burden well.

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

Conciseness5/5

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

Three dense sentences with no filler: core behavior is front-loaded, usage guidance follows, and the edge-case behavior is stated last. 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?

Given no output schema and sparse annotations, the description covers rate-date consistency, rounding, error handling, and batch usage. It does not mention source-currency failure behavior or the response shape, but these are secondary for invoking 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 coverage is only 33% because only 'to' has a description. The description partially compensates by explaining the amount, the target currencies, and rounding behavior, but it leaves 'from' semantics and amount units 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 specific verb ('convert'), the resource ('one amount into many currencies'), and a distinctive constraint (same ECB rate date, per-target minor-unit rounding). It also distinguishes this tool from sibling convert by emphasizing multi-currency and batch use.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 when-to-use guidance: for mixed-currency invoice lines, call once per line so all lines share one rate date. It does not explicitly name convert as the alternative, but the usage context is clear enough 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.

convert_timeConvert a time between zonesA

Convert one time from from_zone into every zone in to_zones, marking any day change, plus the UTC instant. The time is wall-clock in from_zone unless it carries an offset or a trailing Z. '3pm tomorrow' works.

ParametersJSON Schema
NameRequiredDescriptionDefault
gapNoWhat to do with a time that does not exist because the clocks jumped forward: 'forward' takes the time after the jump, 'backward' the time before it. Without this, such a time is refused.
foldNoWhich occurrence of a time that happens twice because the clocks went back. Default 'first'.
timeYes'2026-09-10 15:00', '2026-09-10T15:00:00Z', '3pm tomorrow', 'now'
to_zonesYesPlaces to convert into
from_zoneYesPlace the time is given in, e.g. 'Warsaw' or 'Europe/Warsaw'

TDQS

A4.3/5.0
Behavior4/5

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

The annotations carry no positive hints (readOnlyHint is false), so the description carries the behavioral burden and it delivers: it explains that the input is wall-clock in from_zone unless it has an offset or trailing Z, that natural-language times work, and that output includes day-change markers and UTC instant. It does not detail gap/fold resolution, though the schema's parameter descriptions cover those cases.

Agents need to know what a tool does to the world before 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 in the first sentence and useful parsing detail in the second. The final example '3pm tomorrow works' slightly duplicates the schema's time examples, so it is not maximally tight, but it is not padding either.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 tool with natural-language input and DST edge cases, the description gives the essential input semantics and a high-level return shape. It leaves exact output formatting implicit and relies on the schema for gap/fold behavior, which is an acceptable but not exhaustive treatment.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds value beyond the schema by clarifying the parsing rule for time ('wall-clock ... unless ... offset or trailing Z') and by specifying that all to_zones are included in the conversion. It adds no new detail for gap/fold, but those already have thorough enum descriptions 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 the specific verb 'Convert' and a precise resource ('one time from from_zone into every zone in to_zones'), making the operation unambiguous. It also distinguishes this from date-time siblings like now, dst_changes, and overlap by stating exactly what it produces: zone conversions with day-change markers and the UTC instant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 the tool applies: converting a point in time across zones. It does not name alternatives or explicitly state when not to use it, but the conversion-specific wording is enough to route an agent away from the sibling scheduling and business-day tools.

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

cover_letter_createWrite a cover letter .docxA

Call this tool to write a one-page cover letter .docx from the stored profile and return the path, word count and bracketed prompts. Nothing from the posting is restated as yours. Free: 3 a month.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
toneNoDefault "formal".formal
companyYes
out_pathNoWhere to write the .docx. Defaults to <data dir>/documents/<company>-<role>-cover-letter.docx, numbered -2, -3, ... if that exists.
overwriteNoReplace an existing file at out_path. Default false: the call fails and nothing is written.
highlightsNoPoints to lead with. Each is checked against the profile; anything not found there is returned as a bracketed prompt, not printed as fact.
hiring_managerNo
job_descriptionNoPaste the posting. Used only to pick which of your own skills to lead with; no figure from the posting is ever restated as yours.

TDQS

A4.2/5.0
Behavior4/5

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

With no supporting annotations, the description carries the disclosure burden. It explains the generation source, the output format, the bracketed-prompt behavior, and the privacy rule that posting content is not restated as the user's. It does not cover failure modes or overwrite semantics, but those are partially documented in parameters.

Agents need to know what a tool does to the world before 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 action, output behavior, privacy constraint, and quota. Every sentence adds distinct information with no filler, and the primary action 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 tool with 8 parameters and no output schema, the description provides a solid summary of the artifact, source, return values, and an important constraint. It could be more complete by explaining what happens if no profile exists or by routing users to a sibling tool for resume generation, but 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?

The schema already documents 5 of 8 parameters, so the description does not need to restate them. It adds useful context about 'bracketed prompts' and the no-restatement rule, but it does not explain company, role, or hiring_manager. Overall it neither strongly compensates for the missing schema coverage nor repeats schema details excessively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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: 'write a one-page cover letter .docx' and clarifies the source ('from the stored profile') and the return value ('path, word count and bracketed prompts'). This clearly separates it from resume-focused siblings like resume_create and resume_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?

It states the clear trigger: 'Call this tool to write a one-page cover letter .docx.' This gives the agent a direct condition for use. It does not explicitly name alternatives or exclusions, but the purpose is specific enough to avoid obvious sibling confusion.

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

currencies_listCurrencies the ECB quotesA
Read-onlyIdempotent

Every currency in the ECB daily set with its rate against the euro and its decimal places. This is the whole domain: a code not on this list cannot be converted, quoted or historised here.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false. The description adds useful behavioral context beyond those: the result is the complete closed domain, contains rates and decimal places, and acts as an authoritative filter for other operations. This meaningfully complements 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 tight sentences with no filler. The first sentence states what the tool returns and the second immediately gives the operational implication. 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?

For a zero-parameter read-only list tool, the description is complete: it states the content, the scope, and the practical consequence for other tools. There is no output schema, but the description tells an agent enough about what to expect (currencies, rates, decimal places) to invoke and interpret the result 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 and the schema documents that fully, so there is nothing parameter-related to explain. The description correctly focuses on the returned content instead. The baseline of 4 applies because the schema already covers the complete parameter space.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 (the ECB daily currency set), the content (rate against the euro and decimal places), and the scope (the whole domain). It also differentiates from sibling conversion/history tools by stating that any code not on this list cannot be used 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?

The description clearly implies when to use this tool: to enumerate the complete set of valid currencies or validate whether a code is supported. It does not explicitly name sibling alternatives like convert or rate_history, but the domain-boundary statement ('a code not on this list cannot be converted, quoted or historised here') gives strong contextual guidance.

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

doc_createCreate a Word documentA

Call this tool to write a real .docx file from structured sections. Returns the file path, the number of blocks written and the layout used. Free and unlimited.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate line for the letter layout, default today
styleNoLayout, default plain. plain is the title and the body; letter adds a sender block top right, a date and the addressee; proposal adds a letterhead band and a cover title
titleYesDocument title, used as the top heading and the file name
out_pathNoWhere to write the .docx. Defaults to the data directory
sectionsYesSections in order. Each one may carry a heading, paragraphs, a bullet or numbered list and a table
overwriteNoReplace out_path if a file is already there. Default false: an existing file is never overwritten
recipientNoAddressee block for the letter layout

TDQS

A4.2/5.0
Behavior4/5

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

Annotations are mostly negative hints (not read-only, not idempotent, not destructive), so the description carries the burden of explaining behavior. It adds useful details: the file path, block count, layout used, and an availability claim ('Free and unlimited'). It does not contradict the annotations and describes the return behavior 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.

Conciseness5/5

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

The description is three short sentences, front-loaded with the action ('Call this tool to write...') and quickly covering return values and availability. Every sentence earns its place with no filler or redundancy.

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

Completeness4/5

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

Given a 7-parameter tool with a fully described schema and no output schema, the description provides the necessary return-value context. It is complete enough for an agent to invoke the tool correctly, though explicit routing among sibling document tools would make it stronger.

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

Parameters3/5

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

Schema description coverage is 100%, so parameter descriptions already explain every input. The tool description adds little to param semantics beyond the phrase 'structured sections', which reflects the existing sections parameter. Therefore a baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb and resource: 'write a real .docx file from structured sections.' This is precise enough to distinguish the tool from siblings like doc_from_markdown or doc_fill_template, even without naming them. It also identifies key return values, further clarifying the tool's 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?

'Call this tool to write a real .docx file from structured sections' gives a direct and clear instruction on the intended use case. However, it does not explicitly state when not to use the tool or point to an alternative for markdown input, templates, or proposals.

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

doc_fill_templateFill a Word templateA

Call this tool to replace {{placeholders}} in a .docx and write a new file, reporting what was filled, unfilled or ignored. Call it with no values to list them. Free: templates up to 10 placeholders.

ParametersJSON Schema
NameRequiredDescriptionDefault
valuesNoPlaceholder name to value, e.g. {client: "Acme", fee: "EUR 4,500.00"}
out_pathNoWhere to write the filled .docx. Defaults to <template>-filled.docx
overwriteNoReplace out_path if a file is already there. Default false: an existing file is never overwritten
template_pathYesPath to the .docx template containing {{placeholders}}. Every style, table, header, footer and image of the original is kept. Placeholders split across runs by Word's editor are handled, because the substitution runs on the joined text of each paragraph

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false and idempotentHint=false; the description adds real context on top: it writes a NEW file, reports filled/unfilled/ignored, and notes a free tier of up to 10 placeholders (implying a limit beyond that). No return format or pagination detail, but solid added value.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the primary action, then the discovery mode, then the pricing constraint. 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?

No output schema exists, so the description's mention of reporting filled/unfilled/ignored carries the return-value burden, and it does so adequately. It's slightly incomplete on what happens to unmatched placeholders (left literal or removed) and the exact free/paid boundary.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description genuinely adds semantics: an empty/absent `values` object is a list-placeholders mode. That is behavior a caller cannot infer from the schema 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+resource: replace {{placeholders}} in a .docx and write a new file, with the extra reporting behavior described. It's clearly distinct from siblings like doc_create or doc_from_markdown, but it doesn't explicitly name an alternative to differentiate 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?

Gives clear calling context, including the useful 'call it with no values to list them' discovery mode. It does not state when NOT to use it or name the sibling for related tasks (e.g. doc_create for a template-free document).

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

doc_from_markdownMarkdown to WordA

Call this tool to turn markdown into a .docx, returning the file and a count of blocks by type. Headings, lists, GFM tables and code fences are honoured. Empty markdown is refused, and so is overwriting without the flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNo
titleNoDocument title; defaults to the first heading in the markdown
markdownYesThe markdown source. ATX headings, paragraphs, bullet and numbered lists, GFM pipe tables and fenced code blocks as monospace are honoured, as are **bold**, *italic* and `code` inline
out_pathNoWhere to write the .docx. Defaults to the data directory
overwriteNoReplace out_path if a file is already there. Default false: an existing file is never overwritten

TDQS

A4.7/5.0
Behavior5/5

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

It discloses meaningful behavior beyond the annotations: empty markdown is refused, overwriting without the flag is refused, and the response includes a file plus block-count breakdown. Since the annotations are sparse, these details carry real 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?

Three sentences with no filler: purpose and return value first, supported features second, and constraints third. Every sentence 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 tool with no output schema, the description covers the response shape, accepted input constraints, and error/overwrite behavior. Remaining details like output path defaults are already in the schema, so nothing critical 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?

The schema already covers markdown, title, out_path, and overwrite in detail, so the baseline is 3. The description adds a useful validation constraint—empty markdown is refused—and reinforces markdown features, but it does not clarify the style parameter, keeping it just above baseline.

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

Purpose5/5

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

The description clearly states the tool converts markdown into a .docx, names the return value (the file and block count), and is distinct from siblings like doc_to_html or doc_create. The verb+resource pairing is specific and actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 opens with 'Call this tool to turn markdown into a .docx,' giving an explicit use case. It does not explicitly name alternatives or say 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.

doc_readRead a Word documentB
Read-onlyIdempotent

Call this tool to extract the text of an existing .docx. Returns an outline of the headings and the full text in document order, or the block structure. Free and unlimited.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .docx file. Files produced by Word, Google Docs or this server all work; legacy .doc and .rtf do not
formatNotext (default) returns the readable text, json returns the block structure: headings with their levels, paragraphs, list items and tables, in document order

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare the full safety profile (readOnly, idempotent, non-destructive, closed-world), so the description does not need to establish safety. It does add useful behavioral context beyond the annotations: the return shape (heading outline plus document-order text, or block structure) and the cost/throughput note 'Free and unlimited'. It still omits password/permission handling and behavior on malformed files, so a 3 is fair.

Agents need to know what a tool does to the world before 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 action front-loaded and no filler; 'Free and unlimited' is a compact, high-value trailing note. The lead-in phrase 'Call this tool to' is mild boilerplate but does not bloat the 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?

There is no output schema, but the description adequately explains what is returned (heading outline, full text in document order, or block structure). Combined with a fully-covered input schema and complete annotations, an agent has enough to call this correctly, though explicit routing versus sibling readers is still 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 100%, so both parameters (path, format) are fully documented in the schema, including the .doc/.rtf exclusions and the enum semantics. The description adds no parameter detail beyond this, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (extract text) and resource (.docx), and the format-targeting language ('block structure', 'outline of the headings') makes it clearly a Word reader. It does not name or contrast itself against the many sibling read tools (resume_read, pdf_text, sheet_read), 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 when-to-use or when-not-to-use guidance and no named alternative, even though the toolset contains several other text-extraction tools (pdf_text, resume_read, sheet_read). The agent is left to infer that this is the .docx-specific reader from the description alone.

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

doc_to_htmlWord document to HTMLA

Call this tool to convert a .docx to semantic HTML you can open in a browser and print to PDF. Returns the path of the .html file. This is the supported PDF route; no PDF is rendered here. Free and unlimited.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .docx file to convert
out_pathNoWhere to write the .html. Defaults next to the source file. Open the result and print it to PDF; direct PDF output is not offered here
overwriteNoReplace out_path if a file is already there. Default false: an existing file is never overwritten

TDQS

A4/5.0
Behavior4/5

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

Annotations mark this as a non-read-only, non-idempotent, non-destructive write, and the description adds genuinely useful context beyond them: it writes an .html file and returns that path, performs no PDF rendering itself, and is free/unlimited. It does not discuss failure modes for malformed .docx input, 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.

Conciseness5/5

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

Four short sentences, front-loaded with the action and the return value, then the PDF routing note and the pricing signal. Nothing is redundant with the title or schema, and 'Free and unlimited' is a legitimate decision-relevant 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, the description correctly carries the return contract ('Returns the path of the .html file'), which is the key thing an agent needs to chain a follow-up step. It is complete for the common path, though it is silent on what happens on conversion failure or unsupported input.

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

Parameters3/5

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

Schema coverage is 100%, with all three parameters (path, out_path, overwrite) already documented including the default-next-to-source and no-overwrite behavior. The description reinforces out_path's purpose via the print-to-PDF workflow but adds no syntax, format, or edge-case detail the schema lacks, so this sits at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 transformation chain (.docx to semantic HTML, then print to PDF) rather than restating the title. It also implicitly separates itself from the many PDF siblings by saying 'no PDF is rendered here,' though it never names a concrete sibling (e.g. invoice_pdf, resume_to_html, doc_read) 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 Guidelines4/5

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

Gives clear context for use: this is 'the supported PDF route,' so an agent wanting a PDF knows to come here and print. It does not spell out when NOT to use it or which tool to prefer for direct PDF generation, 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.

docx_business_setSet your business detailsA

Store the sender details printed on every proposal, contract and letter, plus the currency, VAT, terms and prefix defaults. It writes the SAME shared profile as the invoice server's business_set.

ParametersJSON Schema
NameRequiredDescriptionDefault
vatNoAlias for default_tax_rate
bankNoBank name / BIC
ibanNoIBAN or account number for payment
nameYesYour business or freelancer name, printed on the letterhead of every proposal, contract and letter
emailNoYour own email address, printed on every letterhead. Leave it out unless the user gave it: a document that shows an address nobody supplied is worse than one that shows [add: email]
phoneNoYour own phone number. Same rule as email: only if the user gave it
vat_idNoVAT / tax registration id
addressNoPostal address, newlines allowed
tax_rateNoAlias for default_tax_rate
timezoneNoIANA zone you work in, e.g. Europe/Warsaw. Shared with time-tracker and timezone as your home zone
vat_rateNoAlias for default_tax_rate
logo_pathNoPath to a PNG or JPG logo for the letterhead (Pro)
brand_colorNoLetterhead colour as a hex code, e.g. 1F3864 (Pro)
invoice_prefixNoReference prefix used by mcp-invoice; this profile has the same field shape as mcp-invoice, so one profile serves both
default_currencyNoISO code, e.g. EUR, USD. Default EUR
default_tax_rateNoDefault VAT percent, quoted on proposals
payment_terms_daysNoDefault days until payment is due. Default 14

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare a non-read-only write, and the description adds real context beyond them: the write lands in a shared profile also used by the invoice server, so a change here has cross-tool side effects. That is exactly the kind of consequence an agent cannot infer from the schema. It stops short of saying whether unspecified fields are preserved or wiped on a partial 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?

Two tight sentences, front-loaded with what is stored and immediately followed by the cross-server consequence. No filler, no restatement of the title.

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

Completeness4/5

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

For a 17-parameter mutation with no output schema, the description covers the two things hardest to infer: what the fields mean in aggregate and that the profile is shared with the invoice server. The remaining gap — merge-vs-replace behavior on a partial update — is meaningful but narrower than what is already 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 100% and each of the 17 properties is documented in-schema (including alias handling and the email/phone 'only if supplied' rule), so the baseline of 3 applies. The description only groups fields into categories and does not add format or precedence semantics 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?

Specific verb ('store') plus the exact resource (sender details on proposals, contracts, letters) and the config categories it covers (currency, VAT, terms, prefix). It also disambiguates against the sibling invoice_business_set by stating both write the SAME shared profile, so an agent knows they are aliases rather than distinct stores.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 scope statement (use when setting sender/branding defaults), and the shared-profile note usefully answers whether invoice_business_set must also be called. However, there is no explicit when-to-use/when-not framing and no mention of prerequisites or how this relates to proposal_create/contract_create that consume the profile.

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

dst_changesDaylight-saving changesA

The clock changes in a place for a year, with the exact UTC instant and the offset before and after. Use it to check whether a recurring call moves for one of you in March or October.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoCalendar year, default this year
zoneYesPlace or IANA zone

TDQS

A3.8/5.0
Behavior3/5

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

Annotations are all false, providing no safety or side-effect hints, so the description carries the burden. It implies a read-only lookup by describing output (clock changes, UTC instant, offsets), but it does not explicitly state that no changes are made or mention any other behavioral traits such as auth or rate limits. This is adequate but not rich.

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

Conciseness5/5

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

Two sentences only: the first states the output and scope, the second gives a concrete use case. No filler or redundancy, and the core information is front-loaded.

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

Completeness4/5

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

For a simple 2-parameter tool with no output schema, the description adequately explains what is returned (UTC instant, offsets before/after) and the typical use. It doesn't specify whether multiple changes per year are returned together, but 'the clock changes' implies plural. Minor gap but not enough to hinder 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 covers both parameters (zone required, year optional) with descriptions. The description adds no extra parameter detail (e.g., zone format or year range). Per the coverage baseline, 3 is appropriate since the schema already carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (clock changes in a place for a year) and the output (UTC instant and offsets before/after). The use case ('check whether a recurring call moves') distinguishes it from sibling tools like convert_time and now, though it lacks an explicit verb like '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 phrase 'Use it to check whether a recurring call moves for one of you in March or October' provides a concrete, clear context for when to use the tool. It does not mention alternatives or when not to use it, but the guidance is specific enough 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.

duplicate_invoice_checkReview duplicate invoice candidatesB

Group up to 1000 supplied records by exact/normalized reference or exact amount/date within exact entity, supplier, type and currency. All evidence is free. Candidates require review; no payment approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNo
recordsYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and idempotentHint=false, so the agent already knows this is not a pure read and is not safely repeatable. The description adds useful context the annotations do not (evidence is 'free', candidates require review, no payment approval), but it never explains the write implied by readOnlyHint=false — namely that save=true persists results — leaving the key behavioral question unanswered.

Agents need to know what a tool does to the world before 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 and no filler; 'All evidence is free' and the review caveat are terse and each carries information. The first sentence is dense but not padded, so only marginal tightening is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 no parameter descriptions, the description should at least sketch the return shape and the effect of 'save'; it gestures at output ('candidates require review') but never describes what a candidate group contains or that save=true persists it. Adequate to call the tool, incomplete for predicting 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 must carry the load; it partially does by naming the grouping keys (entity, supplier, type, currency, reference, amount, date), which map onto the nested record fields. However, the 'save' parameter is never mentioned, and the description does not add format or constraint detail beyond what the schema itself encodes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 concrete action (group supplied records) and enumerates the matching rules (exact/normalized reference, exact amount/date within exact entity, supplier, type and currency), which lets an agent distinguish it from the report_*/license_* siblings. It never quite says 'detect duplicates' in prose, but the title plus the explicit match keys make 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 Guidelines3/5

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

Usage is implied rather than stated: 'Candidates require review; no payment approval' tells the agent the output is advisory and not an approval mechanism, which bounds how the result should be used. There is no explicit when-to-use/when-not or any named alternative, though the sibling set (reports, licensing) contains no plausible substitute for this tool.

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

entry_addAdd time entryA

Log time already worked as one entry and return its id, duration and amount. Give start plus end or minutes. rate is hourly in MAJOR units and is frozen on the entry, so a later rate change never moves it.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoISO 8601 end time (or use minutes)
noteNoOptional note
rateNoHourly rate for this entry; a number (90) or the words the user said ('90 euros an hour')
tagsNoOptional tags
taskNoWhat the work was
startYesISO 8601 start time, e.g. 2026-09-02T09:00:00
minutesNoDuration in minutes (alternative to end)
projectYesProject or client name. A partial name that matches exactly one existing project is used as that project.
billableNoDefault true; set false for non-billable work
currencyNoCurrency of the rate: EUR, USD, GBP, PLN, or words like 'euros'. Defaults to the project currency, else USD.

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the sparse annotations, the description discloses important behavior: it returns id/duration/amount and explains that rate is frozen at creation time so later rate changes won't affect it. It also clarifies that rate is in MAJOR units, which is non-obvious. It does not cover every possible edge behavior, but it substantially exceeds what 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.

Conciseness5/5

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

Three short sentences convey the core behavior, return value, duration input options, and an important rate nuance with no wasted words. The most important usage constraint ('already worked') appears first, making the description easy 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?

Given the tool has 10 parameters and no output schema, the description covers the essential calling contract: what is created, how duration is supplied, and what the caller gets back. Optional fields and defaults are already documented in the schema, so the description doesn't need to repeat them. It is slightly short on edge-case guidance (e.g., conflicts between end and minutes, or partial project matching), but the schema covers those.

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

Parameters4/5

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

Schema coverage is 100%, so a baseline of 3 applies. The description adds value by explaining that the rate is expressed in MAJOR units and frozen on the entry, and by clarifying that start plus either end or minutes are the ways to specify duration. This is meaningful semantic context beyond the schema field 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 action — 'Log time already worked as one entry' — and names the resource (time entry) plus the return payload (id, duration, amount). The phrase 'already worked' differentiates it from timer-based siblings like timer_start and timer_stop, and from mutation siblings like entry_edit/entry_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?

It clearly says this is for time already worked rather than active tracking, and explains the two input modes: 'start plus end or minutes'. It does not explicitly name alternatives or give exclusions, but the context ('already worked') is enough to guide an agent away from timer tools.

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

entry_deleteDelete time entryA
Destructive

Delete one logged entry by id and report the project and hours removed. It never touches a running timer. A billed entry goes too, losing the invoice record, so correct one with entry_edit instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEntry id from entry_list

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool as destructive, but the description adds important behavioral details beyond that: it reports project and hours removed, never touches a running timer, and deletes billed entries along with their invoice record. These are meaningful side effects the agent would not otherwise 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?

Three sentences, each earning its place: the core action and result, the running-timer safety guarantee, and the billed-entry caveat with the correct alternative. It is tightly written and 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?

For a simple one-parameter deletion tool with no output schema and destructive annotations, the description covers the action, the return information, the key non-effects, and the irreversible consequence. Nothing important 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?

The schema already fully documents the single parameter 'id' with 'Entry id from entry_list', so 100% coverage is present. The description adds 'by id' but does not meaningfully expand on the parameter 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 states a specific verb ('Delete'), a specific resource ('one logged entry by id'), and the observable effect ('report the project and hours removed'). It clearly distinguishes this tool from siblings like entry_edit and entry_add.

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 covers when to use the tool (deleting a logged entry) and when not to: it warns that billed entries lose their invoice record and directs the agent to use entry_edit instead. This is strong usage guidance with an explicit alternative.

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

entry_editEdit time entryA

Change one logged entry by id; only the fields you pass move. minutes keeps start and moves end, an end at or before start is refused, tags REPLACES the list, and rate is hourly in MAJOR units.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEntry id from entry_list
endNoISO 8601
noteNo
rateNoHourly rate override for this entry, a number or words like '90 euros'
tagsNo
taskNo
startNoISO 8601
minutesNoNew duration in minutes, keeps start
projectNo
billableNo
currencyNoCurrency of the rate, e.g. EUR

TDQS

A4.5/5.0
Behavior5/5

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

The description reveals important non-obvious behavior well beyond the annotations: partial-field merge semantics, minutes moving end while keeping start, refusal of end at/before start, tags REPLACING the list, and rate units in major currency units. These are exactly the traps 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?

The description is a single dense sentence that front-loads the core purpose and then packs the critical edge-case rules without wasted words. Every clause contributes 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?

The description covers the most important update semantics, but with 11 parameters and no output schema, it leaves some ambiguities: behavior when both end and minutes are passed, clearing fields with empty values, and what happens when the id is not found. It is adequate but not fully complete for a tool this parameter-rich.

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 55% schema description coverage, the description compensates by adding meaning for minutes, end/start validation, tags replacement behavior, and rate units. It does not individually explain note, task, project, billable, or currency, but their types and names are reasonably self-explanatory and currency is partially covered 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 'Change one logged entry by id', which names the verb, resource, and scope precisely. This clearly distinguishes entry_edit from siblings like entry_add, entry_delete, and entry_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 operating context: it edits one existing entry by id and only moves provided fields. It does not explicitly name alternatives or exclusion conditions, but the sibling set makes 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.

entry_listList time entriesA
Read-onlyIdempotent

List logged entries as a table of id, day, start, project, task, hours, billable, tags and note, newest first, with total hours. Free reads the last 7 days and says so; Pro reads the whole history.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO date/time upper bound
fromNoISO date/time lower bound
limitNoMaximum rows, newest first (default 50)
projectNoFilter by project name

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds meaningful behavioral context beyond the annotations: the exact output columns, sort order (newest first), the inclusion of total hours, and the plan-dependent data scope. This gives the agent useful expectations without being verbose.

Agents need to know what a tool does to the world before 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. The main behavior and output format are front-loaded, and the plan limitation is stated efficiently in the second sentence. 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 there is no output schema, the description fully enumerates the returned fields, ordering, and the total-hours summary. It also discloses the Free vs Pro scope, which is critical for setting correct expectations. Nothing an agent needs to call 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 100%, so all four parameters (to, from, limit, project) are documented in the schema. The description does not add parameter-specific semantics beyond the schema, which is acceptable given the full coverage. It mentions 'project' as an output column but not as a filter, so no extra value 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?

The description states a specific verb ('List'), a resource ('logged entries'), and the exact output shape: a table of named columns, newest first, with total hours. This clearly distinguishes it from sibling tools like entry_add, entry_delete, and 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?

The description gives clear context: this tool returns a table of entries and is appropriate when that tabular view is needed. It also notes the Free vs Pro data availability limitation. It does not explicitly name alternatives like export_csv or report, but the intended use is strongly implied.

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

entry_logLog work timeA

Log work time for a client/project in one step: minutes worked plus an optional note. The entry starts now minus the minutes, so it lands on today's day and week summaries.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional note
clientYesClient or project name. A partial name matching exactly one project resolves to it.
minutesYesMinutes of work to log
projectNoSub-project or task label stored on the entry

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (not read-only, not idempotent, not destructive). The description adds genuinely non-obvious behavior: the entry's start is backdated to now minus the minutes so it falls on today's day/week summaries. It omits what happens if the client name is ambiguous or fails 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 tight sentences, front-loaded with the action and followed by the one non-obvious behavioral detail. 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 and annotations covering the safety profile, the description covers the essential behavior for a small mutation tool. It could state the return value and client-resolution failure behavior, but nothing critical 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 100%, so the schema already documents all four parameters, including the partial-name resolution rule. The description only restates minutes and the optional note, adding no syntax or format detail beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

Specific verb+resource: logs work time for a client/project with minutes plus optional note. It is clear what the tool does, but it never distinguishes itself from the sibling entry_add, 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 Guidelines3/5

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

The phrase 'in one step' implies a shortcut for logging completed work rather than running a timer, but no explicit when-to-use, when-not-to-use, or alternative (entry_add, timer_start) is named. 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.

entry_mark_billedMark time entries as billedA

Close the loop after an invoice is issued: stamp the tracked hours that went on it with the invoice number, so report and invoice_summary stop offering them and the same hours are never billed twice.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO date/time end of the billed period, used with project
idsNoExact entry ids, normally the entry_ids invoice_summary returned. Pass either ids or project plus from and to. Entries already billed are left alone and listed back to you.
fromNoISO date/time start of the billed period, used with project
projectNoProject or client, used with from and to instead of ids; every billable entry in that range is stamped.
billed_atNoISO timestamp of the stamp, defaults to now
invoice_numberYesThe invoice these hours were put on, e.g. INV-2026-0001

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses that the operation stamps entries with an invoice number, causing report and invoice_summary to stop offering them and preventing double billing. This adds meaningful side-effect context beyond the annotations, which only indicate the operation is not read-only and not destructive.

Agents need to know what a tool does to the world before 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 that states the purpose, mechanism, and consequences without padding. Each clause contributes directly to the agent's understanding, and there is no redundant or vague 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?

The description provides the workflow rationale and effects, while the schema supplies all parameter details, including the idempotent skip-and-return behavior for already-billed entries. With no output schema and no safety annotations, this is adequate for correct invocation, though the description could more explicitly mention the two invocation modes (ids vs. project+from+to).

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters have descriptive text. The tool description itself adds no parameter-specific meaning beyond what the schema already provides, so the baseline score of 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('stamp') applied to a specific resource ('tracked hours') and explains the downstream effect on report and invoice_summary. This clearly distinguishes it from sibling entry-editing tools by tying it directly to the invoicing workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 phrase 'Close the loop after an invoice is issued' explicitly gives the trigger condition for using this tool. It does not name alternatives or exclusions, but the workflow context is clear enough that an agent can decide when to invoke it.

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

event_exportExport events to a .ics fileA
Read-onlyIdempotent

Call this tool to write chosen events to a new .ics file you can send or import elsewhere. Pass either ids (from events_list) or a from/to window. Times are written in UTC so the file lands correctly in any client.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast day, YYYY-MM-DD, included
idsNoEvent ids from events_list, events_search or next_event
fromNoFirst day, YYYY-MM-DD (alternative to ids)
calendarNoWith from/to: limit to one calendar
out_pathYesWhere to write the .ics file

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's main added value is the UTC serialization detail, which is genuinely non-obvious and useful for consumers. However, for a tool that writes a file, it omits key behavioral facts: whether an existing out_path is overwritten, whether the directory is created, and where the file is written relative to the caller.

Agents need to know what a tool does to the world before 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 immediately followed by the two selection modes and the timezone caveat. No filler or restatement of the title.

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

Completeness4/5

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

For a file-export tool with no output schema and full schema coverage, the description covers selection modes, output format, and timezone handling, which is most of what an agent needs. The remaining gap is file-overwrite/error behavior, which the annotations do not cover either.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters including the from/to inclusivity, the calendar scoping with from/to, and the acceptable id sources. The description's 'pass either ids or a from/to window' adds the mutual-exclusion intent, but that is largely implied by the schema text, so baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource: writing chosen events to a new .ics file, and clarifies the artifact is portable ('send or import elsewhere'). It is clear on its own, but does not distinguish itself from nearby siblings such as ics_create or the generic export_csv/report_export_csv, leaving the agent to infer which export path applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 the two ways to select data: pass ids (sourced from events_list) or a from/to window. That is actionable selection guidance. It stops short of when-not guidance, e.g. what to do when both are supplied or which mode to prefer for large ranges.

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

events_listList events in a windowA
Read-onlyIdempotent

Every event between two dates, recurring expanded to occurrences, sorted by start. Times shown in your zone (profile's, else this machine's) unless zone passed. Each id works for event_export or event_to_time_entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesLast day, YYYY-MM-DD, included
fromYesFirst day, YYYY-MM-DD
zoneNoShow local times in this zone or city instead of your own
calendarNoOne calendar name; default every imported calendar

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the readOnlyHint/idempotentHint annotations, the description discloses important behaviors: recurring events are expanded to occurrences, results are sorted by start, and timezone handling defaults to the profile's or machine's zone unless overridden. It also states that returned ids are compatible with event_export and event_to_time_entry. These details add meaningful context beyond the structured 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 concise and well-structured: three sentences each earn their place. The core function and scope are front-loaded, followed by timezone behavior and integration guidance. There is no redundant or vague 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?

The description covers the essential behavioral context and integration points, and annotations handle the safety profile. It does not describe the returned event fields or pagination, but for a read-only list tool with fully described parameters, it is largely sufficient. The lack of an output schema could be compensated by a note on the return structure, but it is not a critical omission.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds nuance to the 'zone' parameter by specifying the fallback order ('profile's, else this machine's'), which is not in the schema. It also implicitly explains how from/to define the window. This extra clarity justifies a slight increase over the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: it lists events between two dates, with recurrence expanded and sorted by start. It does not explicitly contrast with sibling events_search, but the phrase 'Every event' implies broad, unfiltered coverage, which helps distinguish it. Overall 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 context for when to use the tool: when all events in a date range are needed. It also notes that each id works for event_export or event_to_time_entry, providing guidance on related follow-up tools. It does not explicitly name alternatives or exclusion cases, but the primary 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.

event_to_time_entryTurn a meeting into a time entryB

Take one event and return the exact arguments for the time-tracker's entry_add, so a meeting that already happened becomes billable time without retyping it. Writes nothing: pass the JSON straight to entry_add.

ParametersJSON Schema
NameRequiredDescriptionDefault
rateNoHourly rate for this entry; a number (120) or the words the user said ('120 euros an hour')
projectYesProject or client the meeting is billed to
currencyNoCurrency of the rate: EUR, USD, GBP, PLN, or the word the user said ('euros'). Without it the time-tracker falls back to USD.
event_idYesEvent id from events_list, events_search or next_event

TDQS

B3.4/5.0
Behavior1/5

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

The description explicitly states 'Writes nothing', but the annotation declares readOnlyHint: false, meaning the tool is not read-only. This is a direct contradiction. The description also fails to disclose any other behavioral traits such as idempotency or side effects, though the annotation contradiction is the primary 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?

The description is two sentences, front-loading the core purpose and adding the key behavioral note about writing nothing. It is efficient and structured without unnecessary verbosity, though it could be slightly more compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 lacks an output schema but indicates the output is 'the exact arguments for entry_add' and instructs to 'pass the JSON straight to entry_add', giving the agent a clear idea of the return format. However, it does not specify error handling, edge cases, or any constraints on event_id/project beyond the schema. The contradiction with annotations further reduces 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 input schema provides full descriptions for all four parameters (100% coverage). The description does not add additional semantic detail beyond what the schema already specifies, such as formats or examples. The baseline of 3 applies because the schema carries the burden of 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 action ('Take one event and return the exact arguments'), the resource (an event), and the purpose (converting a meeting to a billable time entry). It distinguishes itself from the sibling listing/search tools by focusing on transformation rather than retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 use case: 'so a meeting that already happened becomes billable time without retyping it.' It implies when to use (when you have an event to bill) but does not explicitly exclude alternatives or state when not to use it. The context is sufficient 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.

export_csvExport entries to CSVA

Call this tool to export the timesheet to a CSV file (excel-friendly) you can hand to a bookkeeper: one row per entry with hours, billable, rate, currency and amount. Returns the file path written.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO date/time upper bound. On the free tier the export is clamped to the last 7 days; Pro exports the full history.
fromNoISO date/time lower bound. On the free tier the export is clamped to the last 7 days; Pro exports the full history.
pathNoTarget file path; a relative path resolves against the working directory. Defaults to a timestamped file in the local data directory, and the full path is returned.
projectNoOptional project filter

TDQS

A4.2/5.0
Behavior4/5

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

The description goes beyond the annotations by disclosing that a file is written and that the path is returned. It does not mention overwrite behavior or idempotency, but the tier-based clamping is covered in the parameter schema, so the gap is minor.

Agents need to know what a tool does to the world before 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 purpose is front-loaded, the output format and row content are specified, and the return value is stated. Every phrase 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 export tool, the description covers the essential decision inputs: output format, row content, intended use, and return value. The parameter schema handles defaults and tier clamping. A mention of overwrite behavior would make it fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already thoroughly documents all four parameters. The description adds useful output context like row fields and the returned path, but it does not add new meaning to the parameters themselves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('export'), a clear resource ('the timesheet'), and a concrete output ('CSV file'), along with the intended audience ('bookkeeper') and the row content. It is clearly distinguishable from sibling list/report tools.

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

Usage Guidelines4/5

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

The description explicitly opens with 'Call this tool to export the timesheet to a CSV file', which gives clear context for when to use it. 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.

find_meeting_slotsFind meeting slotsA

Rank the times when every participant is inside their own working hours. Returns each slot as a UTC instant with the local time for every participant and a fairness score, best first.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoHow many days ahead to search, default 5, at most 366. Free tier: a search longer than 5 days is shortened to 5, not refused
limitNoHow many slots to return, default 8. Slots are ranked by fairness: the score is the WORST participant's distance in hours from 13:00 local, so a slot that is 07:00 for one person never outranks one that suits everybody
recurringNoPro: also report the weekly recurring times that work on every searched weekday
participantsYesWho has to attend. A zone is OPTIONAL per person: a saved contact supplies their own, and anyone left without one (you, typically) takes the timezone on your shared business profile, so never ask the caller what timezone they are in - include yourself by name and let the server resolve it. Every slot returned is inside all of their hours; weekends in the first participant's zone are skipped. Free tier: up to 3 participants
earliest_dateNoFirst date to consider, YYYY-MM-DD, default today
duration_minutesNoMeeting length in minutes, default 60, at most 1440

TDQS

A4.1/5.0
Behavior4/5

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

With all annotation hints false, the description carries the transparency burden. It discloses the returned shape and ranking behavior ('UTC instant with the local time for every participant and a fairness score, best first'), and the verbs 'Rank' and 'Returns' imply a read-only search, though it never explicitly states that no data is modified.

Agents need to know what a tool does to the world before 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 behavior and no filler. Every clause adds either the ranking rule or the return 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 description plus the exceptionally detailed input schema covers behavior, defaults, free-tier limits, and argument semantics. Since no output schema exists, the description's mention of UTC, local times, and fairness score provides the essential return-shape information.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema itself explains defaults, limits, and the fairness-score meaning, e.g., 'distance in hours from 13:00 local'. The description only mentions fairness at a high level and adds little 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 opens with a specific action ('Rank the times') and names the resource ('meeting slots') and constraint ('every participant is inside their own working hours'). It also states the return format (UTC instant, local times, fairness score), which distinguishes it from sibling tools like overlap or business_days.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 no explicit when-to-use or alternative routing, such as naming a sibling to prefer in another case. The intended context is only implied by the tool's name and the 'every participant' phrasing, so an agent must infer when this beats the sibling tools.

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

forecastRevenue forecastA

Expected invoiced revenue per calendar month per currency from active schedules. Invoiced and skipped periods are excluded and paused schedules listed apart. Free: 3 months; Pro: up to 120.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNoMonths ahead including this one, default 12

TDQS

A4.2/5.0
Behavior4/5

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

Annotations are all false and provide no safety or behavior coverage, so the description carries the burden. It discloses important behaviors: invoiced/skipped periods are excluded, paused schedules are listed apart, and plan-based month limits apply. It does not state what happens if a request exceeds the plan limit, but the disclosed behavior 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.

Conciseness5/5

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

The description is compact and front-loaded, with the core meaning stated first and exclusions/plan limits after. Every clause adds useful information and 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 one-parameter tool with no output schema and uninformative annotations, the description is mostly complete: it covers the output dimension, scope, exclusions, paused-schedule handling, and plan limits. The main missing piece is explicit behavior when the requested months exceed the free/pro allowance (clamp vs. error), which 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?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful parameter context beyond the schema by tying the 'months' ceiling to plan level ('Free: 3 months; Pro: up to 120'), which the schema does not express. This helps an agent choose a safe 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 states a specific resource ('expected invoiced revenue') and precise scope: per calendar month, per currency, from active schedules. It also distinguishes the tool from siblings by noting exclusions and special handling of paused schedules, so an agent can tell it apart from schedule_* and invoice_* 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 provides useful context about what is included/excluded and plan-based limits ('Free: 3 months; Pro: up to 120'), but it does not explicitly say when to use this tool versus an alternative or when not to use it. Usage is mostly implied by the tool name and title.

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

free_busyBusy blocks and free windowsA

Merged busy blocks and the free gaps inside your working hours over a day range. Events marked free do not count; whole-day events block the day. Free: 31 days. Use conflicts for overlapping pairs.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesLast day, YYYY-MM-DD, included
fromYesFirst day, YYYY-MM-DD
zoneNoZone the working hours and the output are in; default your own
work_endNoEnd of your working day, HH:MM, default 17:00
calendarsNoCalendar names; default all of them
work_startNoStart of your working day, HH:MM, default 09:00

TDQS

A3.8/5.0
Behavior4/5

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

The description adds useful semantics not present in the annotations: events marked free are ignored, whole-day events block the entire day, and a 31-day limit is indicated. These rules materially change the result and would be easy to miss. It does not mention side effects or auth needs, but the annotations do not establish a read-only profile, so the description carries more of the transparency burden than in a tool 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 compact and front-loaded: the core behavior appears first, followed by edge-case rules and the sibling pointer. The cryptic 'Free: 31 days' costs a little clarity; otherwise this would be excellent for size and 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?

There is no output schema, and the description only characterizes the result as 'merged busy blocks and free gaps' without specifying response structure or how zone/calendars influence the output. It does cover core event-filtering rules and the conflicts alternative, making it usable, but an agent would still have to assume return format details.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including from, to, zone, work_start, work_end, and calendars is already explained by the schema. The description only adds 'working hours' and the cryptic 'Free: 31 days,' neither of which materially deepens parameter understanding. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly identifies the tool's deliverable: 'Merged busy blocks and the free gaps inside your working hours over a day range.' It also distinguishes from the 'conflicts' sibling by pointing out the overlap-pair use case. It lacks an explicit action verb such as 'Get' or 'List,' 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?

'Use conflicts for overlapping pairs' is an explicit alternative and a clear when-not signal for overlap analysis. The rest of the description implies this tool is for aggregate availability over a day range, which is useful context. It does not spell out when to choose events_list/events_search instead, so the guidance is good but not complete.

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

fx_rates_forFX rates in the shape expense-tracker wantsA

Call this tool when a rebill or an invoice spans more than one currency, instead of asking the user for rates. Returns the fx_rates object expense_to_invoice takes, plus the rate date to write on the invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoThe currency the invoice will be issued in; defaults to the shared business profile's default_currency. Pass it on as target_currency alongside the fx_rates object
currenciesYesThe other currencies present, e.g. ["EUR", "GBP"]. Direction: each returned rate means 1 unit of that key = X units of the target, so {"EUR": 1.08} is 1 EUR = 1.08 of the target. The target needs no rate of its own

TDQS

A3.8/5.0
Behavior3/5

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

With all annotations false, the description carries the disclosure burden. It does describe the return behavior (fx_rates object plus rate date), which is useful, but it does not mention whether rates are freshly fetched, whether external calls/failures are possible, or that the operation has no side effects. Acceptable 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?

Two tight sentences with no filler. The trigger condition is front-loaded, and every phrase adds value: when to call, what not to do, and what to expect back.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 tool with fully documented schema, the description adds the missing context: the multi-currency invoicing scenario and the shape of the return value. With no output schema, a bit more detail on the exact fx_rates object structure could help, but the cross-reference to expense_to_invoice and the rate date 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 100%, including the direction semantics of currencies and the meaning of target. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

The description clearly states when the tool applies (rebill/invoice spanning multiple currencies) and what it produces (the fx_rates object expense_to_invoice takes, plus the rate date). It does not name sibling alternatives, so it stops short of fully explicit differentiation, but the purpose 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?

It gives an explicit trigger condition — 'when a rebill or an invoice spans more than one currency' — and an explicit alternative to avoid: asking the user for rates. It does not name sibling tools like convert or rates_latest, so exclusion guidance is contextual rather than exhaustive.

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

ics_createWrite a calendar inviteA

Call this tool to write a .ics for one meeting and return the path plus the start in UTC and in your zone. Times are stored in UTC so it lands correctly in any client. Free: 3 files a month.

ParametersJSON Schema
NameRequiredDescriptionDefault
gapNoWhat to do with a time that does not exist because the clocks jumped forward: 'forward' takes the time after the jump, 'backward' the time before it. Without this, such a time is refused.
foldNoWhich occurrence of a time that happens twice because the clocks went back. Default 'first'.
zoneYesPlace the start time is given in
startYesStart time, read in `zone` unless it carries an offset
titleYesEvent title
locationNoWhere, or a meeting link
out_pathNoWhere to write the .ics file; default meeting.ics in the data dir. Times are stored in UTC, so the invite lands at the right local time in every attendee's calendar with no time zone block to go stale
attendeesNoAttendees. An entry with an email is invited (ATTENDEE:mailto:...); a name with no email is listed in the description instead, because a calendar cannot invite a name.
descriptionNoBody text
organizer_nameNoYour display name for the ORGANIZER line
organizer_emailNoYour email address, written as the ORGANIZER so replies have somewhere to go. Leave it out and your shared business profile's email is used; with neither, the ORGANIZER line is omitted rather than filled with an address you improvised
duration_minutesYesLength in minutes, at most 1440

TDQS

A3.7/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly=false, destructive=false, openWorld=false), so the description's job is to add context it does not already carry. It does: it discloses a rate limit ("Free: 3 files a month") and the return payload (path, start in UTC and in the caller's zone), plus the UTC-storage rationale. It omits whether writing to an existing out_path overwrites, which is the one remaining behavioral 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?

Three short sentences, front-loaded with the action and result, and the quota note is compact. Nothing is padded, though "Call this tool to" is a slightly wasteful opener.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, and the description compensates by stating the return values, which many definitions would omit. It also flags the quota. For a 12-parameter, non-idempotent write tool it is close to complete; the missing piece is overwrite/conflict behavior on out_path.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter — including the tricky gap/fold DST cases and the attendee/email distinction — is already documented in the schema. The description only reinforces zone/UTC semantics and adds no new parameter syntax or constraints, so baseline 3 applies.

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

Purpose4/5

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

The description names a concrete verb+resource pair ("write a .ics for one meeting") and scopes it to a single meeting, which separates it from batch/import siblings like ics_import. It also states what comes back (the path plus start times), so the agent knows what the call produces. It stops short of naming any sibling it is the alternative to, 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 Guidelines3/5

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

"Call this tool to write a .ics for one meeting" implies the usage context and the single-meeting boundary hints that bulk work belongs elsewhere, but no alternative (ics_import, event_export, schedule_create) is named and no when-not-to-use condition is given. 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.

ics_forgetForget a calendarA

Remove one imported calendar by name and delete this server's local copy of its .ics, freeing a slot. Your own calendar and the source file are untouched. ics_import replaces a name in place.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe calendar name from calendars_list

TDQS

A3.6/5.0
Behavior1/5

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

Annotations say destructiveHint=false, but the description says 'delete this server's local copy of its .ics', which is a destructive action. This is a direct contradiction. The description does add context about what is untouched (own calendar, source file), but the contradiction is severe and misleads an agent about the tool's side effects. Without the contradiction, the description adds useful transparency.

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

Conciseness5/5

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

Two sentences, each carrying distinct information: the core action and side effect, then scope limitations and the sibling distinction. Front-loaded with the main verb and resource; no redundant 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-parameter deletion tool with no output schema, the description covers the operation, side effects, exclusions, and a sibling alternative. It lacks explicit error/reversibility info, but the main gaps are acceptable; however, the contradiction with destructiveHint undermines overall completeness by sending conflicting signals about safety.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 fully documents the `name` parameter (100% coverage), including its source (calendars_list) and type. The description only repeats 'by name' and does not add constraints, formats, or behavioral details beyond the schema, so it does not exceed the baseline.

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

Purpose5/5

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

The description clearly states the action (remove/delete), the target resource (imported calendar by name), and the side effect (deletes server-side .ics copy, frees a slot). It also explicitly distinguishes from sibling tool ics_import, which replaces instead of removes, making purpose unambiguous.

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

Usage Guidelines4/5

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

The description signals this tool is for removing/freeing imported calendars and notes that ics_import handles replacing in place, giving an implicit when-to-use versus an alternative. It does not explicitly enumerate scenarios when not to use it (e.g., for non-imported calendars), though 'imported' is mentioned, so it 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.

ics_importImport a calendar (.ics)A

Call this tool to read a calendar export and keep it under a name. Give path (.ics file), text (contents), or url (public .ics/webcal feed; Pro). Google, Apple, Outlook exports read. Re-importing a name replaces it.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPublic https:// or webcal:// .ics feed. Fetched once, only because you asked; Pro feature
nameYesWhat to call this calendar, e.g. "work" or "family"
pathNoPath to a .ics file on this machine
textNoThe .ics file contents, pasted

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnly=false, destructive=false, idempotent=false, openWorld=false), but the description adds real value: 'Re-importing a name replaces it' discloses overwrite semantics, and 'Fetched once, only because you asked' describes the network behavior for url. It does not cover permissions/auth or what the result looks like, and the replace-vs-idempotentHint:false pairing is a mild unaddressed tension.

Agents need to know what a tool does to the world before 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 with no waste, front-loaded with purpose before the input options and the overwrite caveat. Every sentence 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 4-parameter import tool with 100% schema coverage and full annotations, the description covers purpose, input methods, source compatibility, Pro gating, and overwrite behavior. No output schema exists, but an import's return value is not essential 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 100%, so the schema already documents all four parameters (path, text, url, name). The description restates the three input methods and notes url is Pro, which largely duplicates the schema rather than adding new syntax or format detail. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: read a calendar export and store it under a name. An agent can tell this is an .ics ingestion tool rather than a calendar-creation or listing tool, though no sibling (e.g., ics_create, calendars_list) is named 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 Guidelines4/5

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

It gives clear context for use: three mutually exclusive input methods (path, text, url), the fact that Google/Apple/Outlook exports are supported, and the Pro-only constraint on url. It stops short of any when-not-to-use guidance or explicit alternative tools, so 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.

invoice_business_setSet your business detailsA

The ONE business profile for the whole suite: name, address, VAT id, bank details and defaults (currency, tax rate, terms, prefix, timezone). Saved to the shared profile every other server reads. Call it once, first.

ParametersJSON Schema
NameRequiredDescriptionDefault
vatNoAlias for default_tax_rate
bankNoBank name / BIC
ibanNoIBAN or account number for payment
nameYesYour business or freelancer name
emailNoYour own email address. Leave it out unless the user gave it: no server ever fills an email from anything but this profile or an explicit argument
phoneNoYour own phone number. Same rule as email: only if the user gave it
vat_idNoVAT / tax registration id
addressNoPostal address, newlines allowed
tax_rateNoAlias for default_tax_rate
timezoneNoIANA zone you work in, e.g. Europe/Warsaw. Shared with time-tracker (entries are stamped in it) and timezone (your home zone)
vat_rateNoAlias for default_tax_rate
logo_pathNoPath to a PNG or JPG logo (Pro)
invoice_prefixNoInvoice number prefix, default INV (custom prefix is Pro)
default_currencyNoISO code, e.g. EUR, USD, JPY. Default EUR
default_tax_rateNoDefault VAT percent applied to items without their own rate
payment_terms_daysNoDefault days until due. Default 14

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare this is a non-read-only, non-destructive, non-idempotent write, and the description adds the key cross-server behavior ('Saved to the shared profile every other server reads'). It does not state whether existing profile values are overwritten or merged on a repeat call, which matters given idempotentHint=false, but the shared-persistence detail is genuine context beyond the annotations.

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

Conciseness5/5

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

Three compact sentences with the scope claim front-loaded, followed by the persistence behavior and the calling guidance. No sentence is redundant with the schema and nothing is 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 16-parameter, name-only-required write with no output schema and full schema coverage, the description conveys scope, shared-profile effect and call ordering. It stops short of clarifying overwrite/merge semantics or auth requirements, a minor gap given the annotations already establish 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 100%, so the schema already documents all 16 parameters in detail, including aliases (vat/tax_rate/vat_rate) and the email/phone caution. The description only names field categories rather than adding syntax or format meaning, so the baseline of 3 applies.

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

Purpose5/5

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

The description gives a specific verb ('Set') plus resource ('business profile') and enumerates the exact fields it manages (name, address, VAT id, bank details, defaults). It explicitly claims the distinguishing scope 'The ONE business profile for the whole suite', which separates it from sibling set-style tools like profile_set, contacts_set and docx_business_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?

'Call it once, first.' gives clear ordering/timing guidance and implies it should not be repeatedly invoked. However, it never explicitly contrasts this tool with the nearby profile_set or docx_business_set tools, so an agent must infer which 'set' tool applies in which case.

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

invoice_createCreate an invoiceA

Create an invoice from line items and return the record with its next, never-reused number. unit_price is in MAJOR units; lines are rounded then summed. One currency per invoice. Free: 3 a month.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesLine items. Amounts are held as integer minor units and every line is rounded first, then summed, so the printed lines can never disagree with the total. A line may carry its own currency
notesNoFree text printed under the totals
clientYesClient name or id. Unknown names are added automatically
currencyNoInvoice currency, 3-letter ISO code. Defaults to the one currency every item agrees on, else your business default. Every line on one invoice must agree with it; a mix is refused with the exact conversion argument to pass rather than billed as if it were one currency
due_daysNoDays until due, defaults to your payment terms
issue_dateNoYYYY-MM-DD, defaults to today
discount_percentNoDiscount percent applied to every line before tax, 0-100

TDQS

A3.7/5.0
Behavior4/5

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

Beyond the annotations (readOnly=false, etc.), the description discloses meaningful behaviors: the invoice number is next and never-reused, unit prices are in major units, lines are rounded then summed, and only one currency is allowed per invoice. It also mentions the free-tier limit of 3 per month, which is useful 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 only four sentences long and every sentence earns its place: the first defines the action and return value, the second clarifies unit and rounding semantics, the third states a key constraint, and the fourth gives the free-tier quota. Information 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.

Completeness4/5

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

The input schema is fully self-describing, and the description adds the key behavioral facts an agent needs: the returned record includes a never-reused number, unit prices are major units, and rounding/currency rules. It doesn't mention sibling alternatives or idempotency, but for a write tool with a rich schema this is 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?

The schema description coverage is 100%, so the baseline is 3, but the tool description adds global semantics not obvious from the schema: unit_price is in MAJOR units, lines are rounded individually before summing, and one currency per invoice is enforced. These invariants clarify how the parameters interact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Create') and resource ('invoice') and defines the input as line items, making the core purpose unmistakable. It doesn't explicitly distinguish itself from the sibling 'invoice_from_hours', but 'from line items' implies that alternative path.

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 siblings such as invoice_from_hours or invoice_mark_paid. No when-to-use, when-not-to-use, or alternative tool is mentioned, so an agent must infer usage from the tool name and parameter names.

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

invoice_from_hoursInvoice from hoursA

Shortcut for the common case: bill one client for N hours at an hourly rate. Creates and returns a single-line invoice, converting the rate into target_currency when you supply fx_rates, and echoing back any entry_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
rateYesHourly rate in major units, expressed in currency (or the business default currency)
hoursYes
notesNo
clientYes
currencyNoCurrency the rate is in. Without target_currency this is also the invoice currency
due_daysNo
fx_ratesNoConversion rates, the same pair expense_to_invoice takes: fx_rates maps the RATE's currency to the number of target units one of it buys, meaning 1 unit of that currency = X units of target_currency, e.g. {"EUR": 1.1578} with target_currency "USD". You supply the rate; nothing here fetches or guesses one
tax_rateNo
entry_idsNoTime-tracker entry ids these hours came from (the entry_ids invoice_summary returns). Echoed back with the new invoice number so you can call entry_mark_billed
issue_dateNo
descriptionNoLine description, default 'Consulting services'
round_totalNoD-R46: when converting with fx_rates, round the line's TOTAL to the exact converted amount instead of rounding the hourly rate to cents first. Default false keeps the D-R24 basis (unit price x hours always equals the printed line, so a rounding_note explains any drift from the exact conversion); true removes the drift but unit_price x hours may then be a cent or two off the printed total.
target_currencyNoIssue the invoice in this currency instead, converting the rate. Needs fx_rates for the rate currency
discount_percentNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations only provide false hints, so the description carries the burden. It discloses the create side effect and adds useful behavioral details: rate conversion when fx_rates is supplied and echoing back entry_ids. However, it omits broader side effects, return shape specifics, or prerequisites beyond what the schema 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 tight sentences front-load the core purpose and then add the most important behavioral nuances. 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.

Completeness3/5

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

Given 14 parameters, nested objects, no output schema, and sparse annotations, the description provides only a minimal working picture. It covers the common-case invocation and key conversion/echo behavior, but an agent lacks guidance on return format and the many optional parameters that affect invoice output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 only 50%, and the description compensates partially by explaining the roles of target_currency, fx_rates, and entry_ids. It also implies the required client/hours/rate relationship. But many optional parameters (tax_rate, due_days, discount_percent, notes, etc.) receive no semantic guidance here or 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 states the tool's purpose with a specific verb ('Creates'), the resource (a single-line invoice), and the exact business scenario (billing one client for N hours at an hourly rate). It is more specific than the generic sibling invoice_create, though it does not explicitly name that sibling as the alternative.

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

Usage Guidelines4/5

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

'Shortcut for the common case' establishes a clear usage context: use this when a simple time-based invoice is needed. It does not state exclusions or explicitly compare against invoice_create, but the common-case framing is enough to guide an agent.

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

invoice_generate_dueGenerate the invoices that are dueA

Create a real invoice in the invoice server for every schedule occurrence on or before as_of that has not been invoiced yet, and render each PDF. Returns what was created, what was skipped and what is still due.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNoYYYY-MM-DD, defaults to today. Every occurrence on or before this date that has not been invoiced is billed. Idempotent: one invoice per schedule per period, keyed by the occurrence date, so running it twice creates nothing the second time
dry_runNoList what would be created without creating anything. Default false. One run creates at most 60 invoices, oldest period first
schedule_idNoOnly this schedule. Free and unlimited on every tier

TDQS

A4.7/5.0
Behavior5/5

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

The annotations are all false hints and therefore carry no real behavioral signal. The description compensates fully: it discloses write side effects, PDF rendering, idempotency keyed by occurrence date, the 60-invoice run cap, and the created/skipped/still-due return categories.

Agents need to know what a tool does to the world before 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 main description is one dense sentence that front-loads the core effect, then states the output categories. Each parameter description earns its place with distinct operational facts; 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?

Even without an output schema, the definition tells the agent what side effects to expect, how to preview with dry_run, how many invoices can be created per run, how idempotency works, and what the response reports. That is sufficient to select and 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 100%, so the baseline is 3, but the parameter text adds more than a bare schema: as_of includes the dedup key and idempotency, dry_run adds the 60-invoice cap and oldest-period-first ordering, and schedule_id notes free/unlimited scoping.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 and resource: create real invoices for uninvoiced schedule occurrences on or before as_of and render PDFs. The return summary (created/skipped/still due) makes the scope concrete and separates it from read-only schedule tools like schedule_upcoming and forecast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 trigger condition is explicit ('occurrences on or before as_of that have not been invoiced yet'), and dry_run plus schedule_id provide clear scoped/test usage. It does not name an alternative or state a when-not-to-use case, but no sibling tool performs invoice generation, so that omission is minor.

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

invoice_getGet one invoiceA
Read-onlyIdempotent

Return the full stored record for one invoice number, including every line, tax breakdown, and the balance still open after any credit note issued against it (see credited_minor).

ParametersJSON Schema
NameRequiredDescriptionDefault
numberYes

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, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context about the return content: every line, tax breakdown, and the open balance after credit notes. The parenthetical 'see credited_minor' is somewhat cryptic but 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.

Conciseness4/5

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

The description is a single, front-loaded sentence that communicates the core action and return contents efficiently. The parenthetical 'see credited_minor' is slightly ambiguous, but it does not significantly 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?

Given the tool is a simple single-parameter read operation, the description covers the most important contextual aspects: what is returned, the scope, and the credit-note balance nuance. There is no output schema, so describing the return contents is valuable. The description is sufficient for an agent to select and invoke the tool correctly in most cases, though it omits error behavior for missing invoices.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 only provides a required 'number' parameter with zero description coverage. The description adds the key semantic that this is an invoice number, which is essential. However, it does not specify expected format, examples, or edge cases, and with 0% schema coverage a stronger parameter explanation would have been helpful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('the full stored record for one invoice number'), and the exact scope (one invoice). It clearly distinguishes itself from invoice_list by focusing on a single full record and from invoice_pdf by returning the stored record rather than a generated document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 the complete stored record for one invoice number. However, it does not explicitly specify when not to use it or name alternatives such as invoice_list for summaries or invoice_pdf for a document. The contrast with list-like siblings is only implicit.

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

invoice_listList invoicesA
Read-onlyIdempotent

List invoices by number: client, dates, currency, subtotal, discount, tax lines, total, status, paid, credited and the balance still due after any credit note. Filter by status, client and date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoYYYY-MM-DD inclusive
fromNoYYYY-MM-DD inclusive
clientNo
statusNo

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, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful output detail, including credited amounts and balance due, but does not mention pagination, ordering, or whether the result is limited in any way.

Agents need to know what a tool does to the world before 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 the main action front-loaded and no filler. The list of returned fields is compact. The phrase 'by number' adds minor ambiguity but does not significantly hurt comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 operation with four optional filters and no output schema, the description covers the core return fields and available filters. It lacks pagination/ordering details, but annotations cover the safety profile and the schema covers date formats, making this 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 50%, covering from/to but not client or status. The description names status, client, and date range as filters, adding some meaning beyond the schema, but it does not clarify the client parameter's format or semantics beyond the field 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 description uses a specific verb ('List') and resource ('invoices'), and enumerates the fields returned (client, dates, currency, totals, status, balance due). It is clear what the tool does, though it does not explicitly differentiate itself from siblings like invoice_get or invoice_pdf, and the phrase 'by number' is slightly ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 states the filtering dimensions: status, client, and date range, which implies when to use this tool. However, it does not explicitly contrast it with invoice_get for single-invoice lookup or overdue_report for overdue-focused reporting, so usage guidance relies on inference.

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

invoice_mark_paidMark an invoice paidA

Record a payment on one invoice. amount is in MAJOR units and ADDS to what is paid, never replaces it; omit it to settle the rest. An overpayment is refused, naming the open balance.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoAmount received in major units, ADDED to what is already paid on this invoice. Omit to pay off the remaining balance in full
methodNoHow it was paid, e.g. bank transfer, card. Stored on this payment's row
numberYes
paid_dateNoYYYY-MM-DD, defaults to today
referenceNoBank reference or transaction id for this payment. Stored on this payment's row

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses critical behavior: amount is in MAJOR units, it ADDS to existing paid balance rather than replacing it, omitting it settles the remainder, and overpayments are refused with the open balance named. This matches the non-idempotent annotation by warning that each call likely adds another payment record. It could add what the response contains or whether the action is reversible, but it is already strong.

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

Conciseness5/5

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

Three short sentences, no fluff, and the most critical constraint (MAJOR units + additive behavior) is front-loaded. Every sentence carries behavioral or usage value. It is efficiently scannable 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?

Given there is no output schema, the description covers the main invocation-relevant behaviors: amount semantics, default settlement, and error case. The only mildly missing piece is what a successful call returns (e.g., updated invoice, payment record) and whether multiple partial payments are intended to accumulate. These are minor since the core call semantics are fully stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 80%, so the schema already documents amount, method, paid_date, and reference. The description repeats the amount semantics in clearer emphasis (MAJOR units, ADDS, omit to settle) but does not explain the 'number' parameter, which has no schema description. This is adequate but not additive enough to rise above 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?

Description opens with 'Record a payment on one invoice,' a specific verb and resource that clearly differentiates this from invoice_create, invoice_list, and invoice_pdf. The additive payment semantics further pin down the exact operation. No other sibling tool performs payment recording.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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: when a payment needs to be recorded against a single invoice, this is the tool. It does not explicitly name alternatives or exclusion conditions, but the use case is unambiguous given the sibling tool names. A dedicated when-not-to-use note would improve it to a 5.

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

invoice_pdfRender invoice PDFA
Read-onlyIdempotent

Call this tool to write one stored invoice as an A4 PDF and return the path: issuer, BILL TO, dates, items, taxes and totals. Free stamps a credit line and no logo; Pro renders it unbranded with your logo.

ParametersJSON Schema
NameRequiredDescriptionDefault
numberYesInvoice number to render, as returned by invoice_create
out_pathNoWhere to write the PDF; defaults to <data dir>/pdf/<number>.pdf. The page carries the issuer block, the BILL TO client block, dates, an item table with wrapped descriptions, subtotal, discount, one tax line per rate, the total, payment details and notes, and every money value on it carries its currency code. Use a .pdf path: the bytes written are always PDF

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, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: it writes a file to a path, returns the path, includes specific content blocks, and notes that Free vs Pro affects branding and logo. It also warns that the bytes written are always PDF, which is a useful edge-case disclosure. It doesn't mention potential errors or side effects, but the annotations cover the main safety concerns.

Agents need to know what a tool does to the world before 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 main action and output, and every clause adds useful information. The first sentence states the purpose and the second explains the Free/Pro difference. 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 tool with 2 parameters, 100% schema coverage, and no output schema, the description is quite complete. It explains what the PDF contains, the default output path, and the branding difference. It doesn't describe the return value format (e.g., whether it returns just a path or a JSON object), but since there is no output schema, a brief note on the return shape would have been helpful. Still, the description is strong for the tool's 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 description coverage is 100%, so the schema already documents both parameters. The description adds value by explaining the output path default and the content of the PDF, which helps the agent understand what 'out_path' means and what the result will look like. It doesn't add much about the 'number' parameter beyond what the schema says, but the schema already says it's the invoice number returned by invoice_create. Overall, the description complements the schema 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 states a specific verb ('write'), a specific resource ('one stored invoice'), and the output format ('A4 PDF'), and it distinguishes itself from sibling tools by focusing on rendering an existing invoice to PDF rather than creating or listing invoices. It also clarifies the difference between Free and Pro branding, which is unique to 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 Guidelines4/5

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

The description explicitly says 'Call this tool to write one stored invoice as an A4 PDF', which gives clear context for when to use it. It does not explicitly name alternatives or exclusions, but the sibling list and the focus on rendering an existing invoice make the usage context clear enough. A small gap is that it doesn't explicitly say 'use invoice_create first' or 'use invoice_get to view instead', 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.

invoice_summaryInvoice summaryA
Read-onlyIdempotent

Turn tracked billable time into invoice lines for one project: hours, hourly rate, amount per task and the total, one line per rate so two rates never average. Hours already marked billed are left out. Free: last 7 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesISO date/time end of the billing period. Free covers the last 7 days; Pro invoices any period from the full history.
fromYesISO date/time start of the billing period. Free covers the last 7 days; Pro invoices any period from the full history.
projectYesProject or client to invoice
unbilled_onlyNoDefault true: hours already put on an invoice (entry_mark_billed) are left out, so the same hours are never billed twice. Pass false to see the whole period including invoiced work.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral detail beyond annotations: billed hours are excluded by default and lines are grouped per rate to prevent averaging. This helps the agent understand output semantics without needing to inspect 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?

Three short sentences, each earning its place: purpose and output, billing exclusion behavior, and plan limitation. The key acting verb and resource appear first, and there is no filler or repetition beyond acceptable reinforcement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 summary tool with four parameters and no output schema, the description covers the essential output contents and key behaviors. It could additionally state the exact response shape, but the 'invoice lines' and 'one line per rate' phrasing give enough structural expectation for an agent to proceed 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 100%, and the input schema already explains from/to's free vs Pro period behavior and unbilled_only's default and effect. The description mostly restates these points ('Hours already marked billed are left out', 'Free: last 7 days') rather than adding new parameter-level meaning. Baseline 3 is appropriate because the schema carries the 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 starts with a specific verb and resource: turning tracked billable time into invoice lines for one project. It clearly enumerates the output fields (hours, hourly rate, amount per task, total) and adds a distinguishing behavior (one line per rate, no averaging), which separates it from sibling tools like report and export_csv.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 project, converts billable time into invoice lines, and covers a billing period. It does not explicitly name alternatives or say when not to use it, but the 'for one project' and 'invoice lines' framing strongly imply its niche relative to report and export_csv.

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

license_activateA

Activate one Pro key on every connected server in a single call and return which accepted it. Any rejection fails the whole call, because one server on Pro and another free is invisible to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesLicense key from the checkout confirmation page

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explicitly reveals atomicity ('Any rejection fails the whole call'), the reason for that design, and the fact that the tool returns which servers accepted the key. It could mention side effects or permissions, but the key behavioral trait 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?

Two sentences with no filler. The first sentence front-loads action, scope, and result; the second justifies the failure behavior. 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?

For a single-parameter tool with no output schema, the description fully explains what happens, what the call returns, and the failure semantics. The rationale for the all-or-nothing design is a strong contextual addition that helps the agent predict 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?

The schema already describes the key parameter fully ('License key from the checkout confirmation page'), so the baseline is 3. The description adds 'Pro' context and the activation scope, but does not add new meaning about the parameter itself 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 uses a specific verb ('Activate'), names the exact resource ('one Pro key'), defines the scope ('every connected server'), and states the outcome ('return which accepted it'). This clearly distinguishes it from sibling tools like license_status, which is a status check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 activation use case obvious and explains the all-or-nothing behavior, but it does not explicitly name alternatives or state when not to use it. A clear context is present, but there are no exclusionary guidelines.

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

license_statusA

Report the licence tier of every server connected to this bundle, one row each, plus the single checkout URL that upgrades them all. A server that failed to start is reported with its error.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool returns one row per server, includes a single checkout URL, and reports errors for servers that failed to start. This is meaningful behavioral context beyond a simple 'get status' statement. It doesn't mention whether the operation is read-only or has side effects, but the description's wording ('Report') strongly implies a read operation.

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

Conciseness5/5

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

Two sentences, no filler. The core output is front-loaded ('licence tier of every server'), followed by the unique checkout URL detail and the error-reporting behavior. 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 parameterless status tool with no output schema, the description covers the key output elements: per-server rows, the upgrade URL, and error reporting. It doesn't specify the exact format of the license tier values or the response structure, but given the tool's simplicity and zero parameters, the description is largely complete. A minor gap is not stating whether the checkout URL is always present or only when upgrades are available.

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 schema provides no parameter documentation. The description compensates by explaining what the output contains (per-server license tier, checkout URL, error messages), which is the relevant semantic content for a parameterless tool. Baseline 4 for 0 params 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 verb ('Report') and resource ('licence tier of every server connected to this bundle'), and clearly distinguishes itself from siblings like license_activate by focusing on status reporting rather than activation. It also adds the unique detail of a single checkout URL and error reporting for failed servers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 a status overview of all servers' license tiers and the upgrade URL. It doesn't explicitly name alternatives or exclusions, but the context of sibling tools (license_activate) makes the use case clear enough. A brief 'use this instead of license_activate for status' 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.

next_eventNext eventA

The first event not yet started, within the next 366 days, across every imported calendar or one you name. Returns title, times in your zone, how long until it starts, location, attendees and its id.

ParametersJSON Schema
NameRequiredDescriptionDefault
calendarNoOne calendar name; default every imported calendar

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses the return shape (title, times in the user's zone, countdown, location, attendees, id) and the selection behavior (not-yet-started, 366-day horizon, calendar scope). The annotations are all false and add little safety context, but the description itself makes the read-like nature apparent.

Agents need to know what a tool does to the world before 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 filler. It front-loads the selection rule before listing the returned fields, and every phrase 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 tool with one optional parameter and no output schema, the description provides both the selection criteria and the fields an agent should expect in the result. Minor unspecified edge cases, such as what happens if no event exists in the window, do not materially undermine 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 only parameter, calendar, is already fully described in the schema as 'One calendar name; default every imported calendar.' The description mostly mirrors this semantics, so it adds little beyond what the schema already provides.

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

Purpose5/5

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

The description specifies exactly what the tool does: it returns the first event that has not yet started within a 366-day window, across all imported calendars or a named one. This clearly distinguishes it from sibling list/search tools, which are not limited to the single next upcoming event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 the use case: retrieve the next upcoming event, optionally scoped to a specific calendar. It does not explicitly say when to prefer events_list or events_search instead, so it stops short of providing 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.

nowCurrent time in zonesA

The current time in one or more places, each with the zone it resolved to and the local date, time and offset, under one UTC instant. Accepts IANA zones, cities, countries and abbreviations.

ParametersJSON Schema
NameRequiredDescriptionDefault
zonesNoPlaces or IANA zones, e.g. ['Warsaw','New York','India']

TDQS

A4/5.0
Behavior3/5

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

Annotations are all false and provide no safety profile, so the description carries the burden. It discloses the output structure (zone, local date, time, offset, UTC instant) and input flexibility, which is useful. However, it does not mention side effects, error handling, or behavior on invalid input. It does not contradict the annotations—it simply does not assert read-only—so the contradiction flag remains 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?

Two concise sentences: the first states what the tool does and what it returns; the second lists accepted input formats. No redundant wording, key 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?

The description adequately explains the return value (zone, local date, time, offset, one UTC instant), which is crucial given there is no output schema. It also covers input types. It does not mention limits (e.g., maxItems) or error responses, but for a simple single-parameter tool, these are minor gaps. The tool is well-specified 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?

The schema already describes the 'zones' parameter with examples (['Warsaw','New York','India']) and has 100% coverage, giving a baseline of 3. The description adds meaning by specifying accepted formats beyond the schema: IANA zones, cities, countries, and abbreviations, which is valuable for an agent deciding what to pass. It thus adds value beyond the schema.

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

Purpose5/5

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

The description clearly states the verb-like action (current time), the resource (one or more places), and the specific details returned (zone, local date, time, offset under one UTC instant). It also specifies accepted input types (IANA zones, cities, countries, abbreviations), which distinguishes it from sibling tools like convert_time (time conversion) and dst_changes (DST 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?

The description implies it is for retrieving current time in multiple places, but it does not explicitly mention when to use this tool versus the sibling convert_time or dst_changes. No alternatives or exclusions are named, leaving the usage context implicit. The tool is simple enough that the purpose implies the use case, but explicit guidance would be clearer.

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

overdue_reportOverdue reportA
Read-onlyIdempotent

List every invoice not paid in full whose due date has passed, worst first, with days overdue and the amount, then a total per currency. Free. Use invoice_list for everything still open.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNoYYYY-MM-DD, defaults to today

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior, so the safety profile is known. The description adds useful behavioral context beyond annotations: sorting ('worst first'), computed fields ('days overdue and the amount'), and currency grouping/totals. It does not detail as_of edge-case handling, but that is minor.

Agents need to know what a tool does to the world before 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 a single tight sentence, and the sibling routing is clear. The standalone 'Free.' contributes little to an agent's selection or invocation decision, preventing a perfect 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 simple optional-parameter read-only report, the description is nearly complete: it explains what is returned, how results are sorted and grouped, and when to prefer invoice_list. It does not enumerate exact response fields, but the text sufficiently describes the report content 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?

There is only one optional parameter and the schema already documents its format ('YYYY-MM-DD') and default ('defaults to today'), giving 100% schema description coverage. The description adds no additional parameter-level meaning, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the resource ('invoices'), the exact filter ('not paid in full whose due date has passed'), and the output shape ('days overdue and the amount, then a total per currency'). It also distinguishes itself from invoice_list by saying that invoice_list covers everything still open.

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 to the sibling tool when appropriate: 'Use invoice_list for everything still open.' This is a clear when-not/alternative statement, and the first sentence makes the intended use case obvious.

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

overlapDaily working-hours overlapB

The window each day when every listed place is inside working hours. Computed on a real date, so a DST week that widens or narrows the overlap is reflected.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate to compute on, YYYY-MM-DD, default today
zonesYesPlaces, e.g. ['Warsaw','New York','Bangalore']
work_endNoLocal working day end, default 17:00
work_startNoLocal working day start, default 09:00

TDQS

B3.4/5.0
Behavior3/5

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

The description adds a genuinely useful behavioral detail: the overlap is computed on a real date so DST changes that widen or narrow it are reflected. The annotations are all false, so they do not affirm read-only or idempotent behavior; the word 'computed' weakly implies no mutation, but the side-effect profile is not explicitly stated.

Agents need to know what a tool does to the world before 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 first gives the purpose and the second adds the important DST nuance. The key idea 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.

Completeness4/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 states the conceptual result ('the window') and flags the main edge case (DST). It does not specify the exact return format, but the schema covers defaults and parameter details, so an agent has enough to invoke it successfully.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds no parameter-specific meaning beyond the general notion of 'listed place' and 'working hours,' which keeps this at the baseline rather than above 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?

The description clearly states the resource ('the window each day when every listed place is inside working hours') and that it is computed on a real date, so the core purpose is unambiguous. It does not explicitly distinguish itself from siblings like find_meeting_slots or convert_time, but the focus on working-hours overlap makes the intent inferable.

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 find_meeting_slots, convert_time, or dst_changes. The DST note hints at when the computation may matter, but there are no explicit conditions, exclusions, or alternative tool mentions.

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

pdf_countCount pages in several PDFsB

Page count per file plus the total, for any number of PDFs, with how many were readable. A file that cannot be read is reported on its own row and the others still count. Read-only. Free and unlimited.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYesPaths to the PDF files

TDQS

B3.2/5.0
Behavior1/5

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

The description asserts 'Read-only', but the annotations declare readOnlyHint=false (and idempotentHint=false). A page count is inherently a safe, idempotent read, so the annotation flag contradicts the stated behavior and could mislead an agent about safety/idempotency. The otherwise useful failure semantics ('a file that cannot be read is reported on its own row') cannot rescue a direct contradiction 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.

Conciseness5/5

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

Three tight sentences, front-loaded with the primary output ('page count per file plus the total'), then error semantics, then cost. 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.

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 well by describing return values (per-file counts, total, readable count) and partial-failure behavior. The main gap is the contradiction with readOnlyHint rather than missing content, plus no note on path resolution or how unreadable files are surfaced.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 (paths) with 100% schema description coverage, so the schema fully documents it (array of file paths, minItems 1). The description corroborates multiplicity ('any number of PDFs') and implies an array, but adds no path syntax, glob, or ordering detail beyond the schema. Baseline 3 for full 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 (count pages) and resource (PDFs), and even specifies the output shape: per-file count plus total plus readable count. It differentiates itself from single-file siblings like pdf_info and pdf_pages by emphasizing batch scope ('for any number of PDFs'), 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?

'For any number of PDFs' implies the batch use case, and the description hints this is free/unlimited so there's no reason to batch conservatively. But there is no explicit when-to-use vs. alternatives (pdf_info, pdf_pages) and no exclusions or prerequisites stated.

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

pdf_infoInspect a PDFB

Call this tool to inspect a PDF: page count, page sizes in points/mm, paper name, metadata (title, author, producer, dates) and whether it is encrypted. Read-only, never modifies the file. Free tier: unlimited.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the PDF file. ~ is expanded; a relative path is resolved against the working directory

TDQS

B3.1/5.0
Behavior1/5

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

The description asserts 'Read-only, never modifies the file', while the annotations declare readOnlyHint=false, which explicitly marks the tool as not a read-only operation. This is a direct conflict between the prose and the structured safety metadata, so per the rubric the score is 1 and the contradiction is 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?

A single front-loaded sentence with an enumerated return list; nothing is padded. The leading 'Call this tool to' is mild filler, but the payload arrives immediately and 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?

With no output schema, the description correctly carries the return-value burden and enumerates the fields an agent will receive, which is the key requirement here. It does not state behavior for malformed or password-protected files, leaving a small gap for a single-parameter inspection 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?

There is a single parameter and schema description coverage is 100%, so the schema already documents the 'path' argument including tilde expansion and relative-path resolution. The description adds nothing further about the parameter, which is the expected baseline when the schema carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (inspect a PDF) and enumerates exactly what the inspection yields: page count, page sizes in points/mm, paper name, metadata fields, and encryption state. That enumeration implicitly separates it from pdf_count, pdf_pages, and pdf_text, but no sibling is named explicitly, so it stops 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 Guidelines3/5

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

The opening imperative 'Call this tool to inspect a PDF' implies the usage context but offers no when-not guidance and no routing against near-siblings such as pdf_count, pdf_pages or pdf_text. The 'Free tier: unlimited' note is useful operational context but is not selection guidance.

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

pdf_mergeMerge PDFs into one fileA

Call this tool to join several PDFs into one, in the order given. Page sizes are kept as-is, so a merged file may have mixed sizes, and the answer says so. Inputs are never modified. Free tier: up to 5 files per merge.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYesThe PDFs to join, in the order they should appear
out_pathYesWhere to write the merged PDF
overwriteNoReplace out_path if a file is already there. Default false: an existing file is never overwritten

TDQS

A4/5.0
Behavior4/5

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

Adds real behavioral context beyond annotations: inputs are never modified, page sizes are kept as-is (mixed sizes possible), and the result reports that. Free-tier cap of 5 files is disclosed. Annotations already state destructiveHint=false and readOnlyHint=false; description reinforces the non-destructive behavior of inputs.

Agents need to know what a tool does to the world before 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: action and ordering first, then output behavior (mixed sizes), then input safety and limit. Zero waste 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?

Covers action, ordering, output quirk (mixed page sizes), input immutability, and a service limit. No output schema exists, but the description says the answer reports page-size mixing. Missing explicit overwrite guidance, though the schema covers it fully.

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

Parameters3/5

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

Schema coverage is 100%, so paths, out_path, and overwrite are already documented with semantics including default false for overwrite. The description only mentions ordering of inputs, which duplicates the paths description. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (join/merge) and resource (PDFs) with the ordering scope ('in the order given'). An agent can distinguish it from pdf_split, pdf_reorder, and other pdf_* siblings 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?

Implies usage ('join several PDFs into one') but offers no explicit when-to-use vs alternatives like pdf_reorder or pdf_split. The free-tier limit is a useful constraint but not a usage routing rule.

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

pdf_pagesExtract pages into a new PDFA

Call this tool to pull selected pages into one new PDF, in the order written: "2,4-6" gives four pages. Asking for a page twice copies it twice. The input is never modified. Free tier: files up to 30 pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe source PDF
pagesYes1-based pages and ranges to keep, in output order, e.g. "2,4-6" or "5,1,1"
out_pathYesWhere to write the extracted PDF
overwriteNoReplace out_path if it exists. Default false

TDQS

A4.2/5.0
Behavior4/5

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

The description adds useful behavioral context beyond the annotations: the input PDF is never modified, duplicate page requests produce duplicate pages, and free-tier files are limited to 30 pages. It does not contradict the annotations, though it leaves overwrite/failure behavior to 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?

Four short sentences, front-loaded with the core action and immediately followed by the most important edge cases. 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?

Given the annotations and 100% schema coverage, the description covers purpose, page-order semantics, duplicate behavior, input immutability, and tier limits. It omits return/output details, but no output schema exists and the write behavior is already well documented in 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 coverage is 100%, so the baseline is 3. The description goes beyond the schema by clarifying that asking for the same page twice copies it twice, which is not explicit in the schema's example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: pull selected pages into one new PDF. The phrase 'in the order written' and the duplicate-page example distinguish it from merge, split, and reorder siblings 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 Guidelines3/5

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

The description implies the use case by saying 'Call this tool to pull selected pages into one new PDF' and gives a free-tier size limit, but it does not explicitly say when to use this tool versus siblings such as pdf_split, pdf_merge, or pdf_reorder.

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

pdf_reorderReorder the pages of a PDFA

Call this tool to write a new PDF with pages in the order you give. The order must name every page exactly once, so nothing drops by accident; use pdf_pages for a subset. Pro.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe source PDF
orderYesThe 1-based page numbers in their new order, e.g. [3,1,2] for a three-page file. Every page must appear exactly once
out_pathYesWhere to write the reordered PDF
overwriteNoReplace out_path if it exists. Default false

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is covered. The description adds the validation rule ('name every page exactly once, so nothing drops by accident') and a cryptic 'Pro.' marker suggesting a plan requirement, but says nothing about overwrite semantics or that the source file is 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 tight sentences with the action front-loaded and the key constraint immediately after. The trailing 'Pro.' is terse to the point of being unclear, and 'Call this tool to' is minor 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 4-parameter write tool with no output schema, the description covers purpose, the critical validation constraint, and the sibling to use instead. Only the overwrite/file-clobbering behavior and any permission requirements are left implicit, and those are partly 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 100% and every parameter (path, order, out_path, overwrite) is documented in the schema itself. The description's mention of the order constraint duplicates the schema text and adds no new syntax or format detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('write a new PDF with pages in the order you give'), which is clearly distinct from pdf_pages/pdf_split. It does not differentiate itself from the other PDF writers (pdf_merge, pdf_rotate), 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 Guidelines4/5

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

Names the alternative explicitly: 'use pdf_pages for a subset', giving a clear when-not condition. No exclusion guidance relative to pdf_merge or pdf_rotate, so it stops short of a full routing statement.

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

pdf_rotateRotate pagesA

Call this tool to turn pages by a multiple of 90 degrees, clockwise for positive. Rotation is added to whatever the page already had, for a sideways scan. Writes a new file. Free tier: files up to 30 pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe source PDF
pagesNoWhich pages to turn, e.g. "1" or "2,4-6". Omit for every page
degreesYes90, 180, 270 or -90. Positive turns clockwise. Added to the page's existing rotation
out_pathYesWhere to write the rotated PDF
overwriteNoReplace out_path if it exists. Default false

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false), and the description adds genuinely useful behavior: rotation is additive to existing page rotation and a new file is written rather than in-place editing. It also discloses a 'Free tier: files up to 30 pages' operational limit, which structured fields do not capture.

Agents need to know what a tool does to the world before 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 short sentences with the core action front-loaded and the tier limit placed last. The opening 'Call this tool to' is mild filler, but there is no real 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 5-param mutation tool with no output schema, the description covers the essentials an agent needs: additive rotation behavior, new-file output, and a free-tier size cap. Page-range and overwrite semantics live in the schema, which is acceptable at full coverage.

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

Parameters3/5

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

Schema coverage is 100%, so all five parameters are already documented, including the additive-rotation note and the 90/180/270/-90 values. The description largely restates those semantics (multiple-of-90, clockwise-for-positive) rather than adding new meaning, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('turn pages by a multiple of 90 degrees') and even clarifies the direction convention. However, it never distinguishes itself from the many pdf_* siblings (pdf_reorder, pdf_stamp, pdf_pages), so an agent must infer the difference on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 via the phrase 'for a sideways scan.' There is no explicit when-to-use, no when-not-to-use, and no named alternative among the large pdf_* family, leaving selection guidance thin.

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

pdf_splitSplit a PDF into several filesA

Call this tool to write one new PDF per range. Ranges are 1-based and may be open-ended: "1-3,5,7-" gives pages 1-3, page 5, and 7 to the end. The input is never modified. Free tier: files up to 30 pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe PDF to split
rangesYesComma-separated 1-based page ranges, e.g. "1-3,5,7-". An open-ended range runs to the last page
overwriteNoReplace existing outputs. Default false: nothing is overwritten and nothing is written at all if any target exists
out_path_patternYesOutput path with a placeholder: {n} is the part number (1, 2, 3...), {range} is the range itself (e.g. 1-3), {name} is the input file name without .pdf. Example: ~/out/{name}-{range}.pdf

TDQS

A3.6/5.0
Behavior4/5

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

With annotations already declaring readOnlyHint=false and destructiveHint=false, the description usefully adds that 'the input is never modified' and discloses a free-tier limit of 30 pages, which are real operational constraints not present in the structured fields. It stops short of describing the return value or how partial failures across multiple output files are handled.

Agents need to know what a tool does to the world before 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 action and immediately followed by the range semantics and the safety guarantee. No filler, though the range example duplicates the schema verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 operation, range syntax, non-destructiveness of the input, and a tier limit, but with no output schema and four parameters it never says what the tool returns (e.g., the list of written file paths) or how the {n}/{range}/{name} pattern interacts with multiple ranges. Adequate but with a visible gap for a multi-file 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 100%, so the baseline is 3. The description restates the ranges format already fully documented in the schema and says nothing about out_path_pattern or overwrite, so it adds no meaning beyond the structured 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?

States a specific action and outcome: 'write one new PDF per range', which clearly identifies a split operation on a PDF resource. An agent can distinguish it from read-oriented siblings like pdf_text or pdf_info, though it never explicitly contrasts itself with pdf_merge (the other multi-file write 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?

Usage is implied by the verb ('Call this tool to write one new PDF per range') and the description supplies a concrete range syntax example, but there is no when-to-use vs when-not guidance and no alternative named among the many pdf_* siblings. The free-tier note hints at a scope boundary but not a routing rule.

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

pdf_stampStamp text on a PDFA

Call this tool to draw a word such as PAID or DRAFT across the pages, in a colour and position you choose. Writes a new file; input untouched. Free tier: the PAID and DRAFT presets in their preset colours.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe source PDF
textYesWhat to stamp. PAID and DRAFT are presets with their own colour; any other text is Pro
colorNoHex code such as #1b7f3b, or a name: red, green, blue, black, gray, orange, purple. Pro
pagesNoWhich pages to stamp, e.g. "1" or "2,4-6". Omit for every page
opacityNo0 to 1. Default 0.35 in the centre, 0.85 in a corner
out_pathYesWhere to write the stamped PDF
positionNoWhere on the page. Default center, which is drawn on the 45-degree diagonal like a real stamp
font_sizeNoPoint size. By default the stamp is sized to fit the page width
overwriteNoReplace out_path if it exists. Default false

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the agent knows it writes without destroying. The description adds valuable context beyond annotations: it writes a new file, leaves the input untouched, and restricts free-tier use to the PAID and DRAFT presets in preset colours. This is strong transparency, though it omits overwrite and output details covered in 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?

Three short sentences, front-loaded with the core action and followed by write behavior and tier limits. Every sentence earns its place; 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 core action, the write-to-new-file behavior, input preservation, and free-tier limits, which is sufficient given 100% schema coverage for parameters. It does not explain the output/return or overwrite edge case, but with no output schema and overwrite documented in the schema, these are minor gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already defines all nine parameters, including text presets, colour, pages, opacity, position, font size, and overwrite. The description adds only a general reference to 'colour and position you choose' and repeats the free-tier preset constraint for text/colour, which is already in the schema. Baseline 3 is appropriate because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('draw a word such as PAID or DRAFT across the pages') and resource (PDF pages), with concrete examples of the stamped text. It is clear what the tool does, though it does not explicitly distinguish itself from the sibling pdf_watermark_business, so sibling differentiation is missing.

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 only says 'Call this tool to draw a word...' but gives no when-to-use conditions, no when-not-to-use, and no alternatives (e.g., pdf_watermark_business). Usage is implied by the purpose, but explicit guidance is absent.

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

pdf_textRead the text of a PDFA
Read-onlyIdempotent

Call this tool for best-effort text extraction from standard-font PDFs. Returns nothing for a scan (no OCR), or glyph indices for a custom-encoded font, and says which case applies. Read-only. Free tier: unlimited.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe PDF to read
pagesNoWhich pages, e.g. "1" or "2,4-6". Omit for every page

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive and closed-world, but the description adds genuinely new behavioral context: scans yield nothing, custom-encoded fonts yield glyph indices, and the tool reports which case occurred. It also discloses a 'Free tier: unlimited' cost/quota trait the annotations do not 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?

Four short sentences, front-loaded with the core purpose and the failure modes immediately after; nothing is padded. The 'Read-only' clause is mildly redundant with readOnlyHint=true, which 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?

With no output schema, the description carries the return-value burden and does explain the two degraded outcomes and that the tool signals which applies. It does not describe the shape of a normal successful return (e.g., plain concatenated text vs. per-page), leaving a modest gap for a 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 description coverage is 100% with only two simple parameters (path, pages) fully documented in the schema, including the page-range syntax. The description adds no additional parameter meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('best-effort text extraction from standard-font PDFs'), and the scoping to standard-font PDFs separates it from generic PDF siblings such as pdf_info, pdf_pages, and pdf_merge. An agent can select it over those 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 usage condition ('for best-effort text extraction from standard-font PDFs') and effectively rules out scanned documents ('Returns nothing for a scan (no OCR)'), which functions as a when-not-to-use signal. It stops short of naming an alternative tool (e.g., for OCR or metadata), so it is not a full routing directive.

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

pdf_watermark_businessStamp your business details in the footerB

Call this tool to put your business name and VAT id in the footer of every page, from the shared profile mcp-invoice and mcp-docx write. Use it before sending a document out. Pro.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe source PDF
pagesNoWhich pages, e.g. "1". Omit for every page
out_pathYesWhere to write the footed PDF
overwriteNoReplace out_path if it exists. Default false

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive write. The description adds that the footer content is drawn from a shared profile, which is genuinely useful context, but it says nothing about the non-idempotent overwrite behavior or what happens to an existing out_path.

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 short, but the middle clause "from the shared profile mcp-invoice and mcp-docx write" is garbled and hard to parse, and the trailing "Pro." is a dangling fragment that does not earn its place.

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

Completeness3/5

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

For a four-parameter write tool with annotations covering safety and no output schema, the description is barely adequate. The garbled profile clause leaves ambiguity about where the business details originate, which an agent would need clarified before invoking 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 description coverage is 100%, so all four parameters including pages and overwrite are already documented in the schema. The description adds no syntax or format detail beyond what the schema provides, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource: putting business name and VAT id into the footer of every page. An agent can identify the operation clearly, though it never differentiates itself from the sibling pdf_stamp, which plausibly does overlapping work.

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

Usage Guidelines3/5

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

"Use it before sending a document out" gives a timing cue, which is useful implied usage. However, it names no alternative and no when-not condition, and the fragmented clause about the shared profile does not clarify routing against siblings like pdf_stamp.

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

price_add_manualRecord a price by handA

Call this tool to store a price you read yourself where a shop blocks fetching: it creates the watch if new and returns the amount and the observation count. An unreadable price is refused. Free: 3 watches.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesProduct page URL
labelNoShort name for this item
priceYesPrice as shown, for example 1299.00 or 1.299,00
currencyNoISO code such as USD or EUR

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate readOnly=false but the description goes further, disclosing that the tool creates the watch if new, returns the amount and observation count, and refuses unreadable prices. This adds meaningful behavioral context beyond the structured 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 filler. It front-loads the core purpose, follows with the key side effects and limitations, and tucks the quota at the end. 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 write tool, it covers the core behavior, side-effect of watch creation, return values, and a refusal condition. The schema handles parameter details, and the description is sufficient to use the tool correctly. A small gap is that error handling beyond 'unreadable price refused' is not described, but that is 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 100% and each parameter already has a clear description, including a price format example. The tool description does not add parameter-specific nuance, but the schema fully carries that burden, so a baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states a specific verb-resource pair: manually store a price when a shop blocks automated fetching. It also explains a key side effect (creates the watch if new) and differentiates itself from fetching-oriented siblings like price_check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 when to use this tool: when a shop blocks fetching, and why (manual reading). It also adds a limitation ('An unreadable price is refused') and a quota note ('Free: 3 watches'). It doesn't name an alternative tool explicitly, but the 'blocks fetching' condition clearly distinguishes it from price_check.

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

price_checkCheck a price nowA
Read-onlyIdempotent

Call this tool for any product URL; fetching the page with a generic web tool returns raw HTML without the price. Reports price, currency, title and confidence, and the change since the last check. It creates no watch.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesProduct page URL, including https://

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark it read-only and idempotent; the description adds useful behavior: it performs a fresh page fetch, returns a change since last check, and deliberately creates no watch. This goes 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.

Conciseness5/5

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

Three short sentences, each earning its place: when to use, what is returned, and the no-watch side effect. It is front-loaded 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?

For a one-parameter read-only tool, the description covers the call condition, the output fields, and the key side-effect distinction. No output schema exists, but the description supplies enough return information 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.

Parameters3/5

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

Schema coverage is 100% and the single url parameter is documented with a clear description including the https:// requirement. The description repeats 'any product URL' but does not add new parameter details; baseline 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource: 'Call this tool for any product URL' to check a price, and it explicitly lists the returned data (price, currency, title, confidence, change since last check). It distinguishes itself from a generic web fetch and from watch tools by saying 'It creates no watch.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 when-to-use context: use it for a product URL because a generic web tool returns raw HTML without the price. It does not name sibling watch/history tools or give explicit when-not-to-use conditions, but the 'creates no watch' statement implies the boundary.

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

price_historyPrice historyA

Call this tool to list one watch's stored observations, oldest to newest, each with price, currency, source and confidence, plus min and max. Nothing is fetched. Free shows the last 30.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoWatch id
urlNoWatch URL
limitNoMaximum observations to return

TDQS

A4.2/5.0
Behavior4/5

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

The description adds useful behavioral context beyond the annotations: it states the ordering ('oldest to newest'), the included fields, that nothing is fetched, and that free tier shows only the last 30. The annotations are all false, so the description carries the burden and does a good job of disclosing the read-only nature and the free-tier limit.

Agents need to know what a tool does to the world before 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: what it lists, that nothing is fetched, and the free-tier limit. Front-loaded with the core purpose and 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/list tool with no output schema, the description covers the key details an agent needs: what is returned, ordering, and the free-tier cap. It doesn't mention pagination or how to specify the watch (id vs url), but the schema covers the parameters and the tool is simple enough that this is a minor 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 100%, so the schema already documents all three parameters (id, url, limit). The description adds the 'free shows the last 30' context, which relates to limit, but doesn't add much beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('list'), a resource ('one watch's stored observations'), and a clear scope ('oldest to newest'), and it distinguishes itself from sibling tools like price_check and price_add_manual by clarifying it reads stored observations. It also mentions the output fields (price, currency, source, confidence, min/max), so an agent can tell 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 description gives clear context: use it to list stored observations for one watch, and it explicitly says 'Nothing is fetched,' which helps differentiate it from price_check. It doesn't explicitly name alternative tools or state when not to use it, 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.

profile_getShow the stored profileA
Read-onlyIdempotent

Return the stored CV profile exactly as resume_create, cover_letter_create and tailor_to_job will use it, plus the variant read and every stored variant name. Call it before any rewrite.

ParametersJSON Schema
NameRequiredDescriptionDefault
variantNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already safely mark this as read-only, idempotent, and non-destructive. The description adds useful behavior beyond that: it returns the canonical profile exactly as downstream generation tools will see it, including the resolved variant and every stored variant name. Since there is no output schema, this return-content disclosure is valuable and 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.

Conciseness5/5

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

The description is two sentences long, front-loads the core behavior, and adds a clear call-to-action ('Call it before any rewrite') with 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 what is returned and when to call it, which is good given the simple read-only nature of the tool. However, because there is no output schema and parameter coverage is zero, the missing explanation of the optional variant selection and the meaning of 'the variant read' leaves an important 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 explain the optional 'variant' parameter. It mentions 'the variant read' and 'every stored variant name,' but never explicitly states how passing a variant affects the result or what happens when it is omitted. The only parameter's semantics remain 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 names a specific verb ('Return') and a concrete resource ('the stored CV profile'), then specifies exactly how it will be used: 'exactly as resume_create, cover_letter_create and tailor_to_job will use it.' It also distinguishes itself from related read/write siblings by calling out the additional variant information and the dependencies on those generators.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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-to-use instruction: 'Call it before any rewrite.' This is clear, practical context for an agent deciding whether to invoke it. It does not name exclusions or directly compare against alternative tools like profile_set or resume_read, so it falls just short of the highest score.

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

profile_setStore your CV factsA

Store the profile every resume and cover letter is built from: contact details, summary, skills, roles with bullets, education, certifications and languages. Returns a count of what was stored.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoYour own name. Leave it out and the shared business profile's name is used, so you are never asked for a name the suite already holds
emailNoYour own email address. Leave it out and the shared business profile's email is used; with neither, letters and letterheads show "[add: email]" and say so. Never invent one
linksNoPortfolio, LinkedIn, GitHub
mergeNoUpdate the stored profile: fields you pass replace their stored value, fields you leave out are kept. Required when a profile already exists, unless you pass replace
phoneNoYour own phone number. Defaults to the shared business profile's phone
skillsNo
replaceNoDiscard the stored profile and store exactly what this call carries. Required when a profile already exists, unless you pass merge
summaryNoTwo or three lines. Used verbatim as the fit paragraph of a cover letter.
variantNoName a second profile, e.g. "backend". One profile per data directory on the free tier; named variants are Pro only.
locationNo
educationNo
languagesNo
experienceNoRoles in any order you like -- profile_set sorts and stores them newest-first (an open role with no `end` first, then by `end` descending, then by `start` descending) before saving, since page-budget trimming and cover-letter bullet ranking both trust array order to mean recency.
accent_colorNoLetterhead colour, six hex digits, e.g. 1F3864. Pro only.
certificationsNo

TDQS

A3.7/5.0
Behavior2/5

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

With no meaningful annotations (readOnlyHint=false, destructiveHint=false, no safety guidance), the description carries the full burden of disclosing behavioral traits. It only says 'Store' and mentions a return count; it omits that an existing profile requires merge or replace, that roles are re-sorted newest-first, and that omitted fields fall back to a shared business profile. These details exist in the schema, but the description itself does not disclose them.

Agents need to know what a tool does to the world before 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 efficient sentence that front-loads the core action and resource, lists the stored content, and closes with the return value. Every clause earns its place, and nothing is redundant with the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 high complexity (15 parameters), absent output schema, and blank annotations, the description is minimally adequate: it explains the store operation and return count but leaves key behavioral context (merge/replace handling, profile defaults, sorting) to the schema. It is enough for invocation only because the schema descriptions are unusually rich.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 67%, and the schema already provides rich parameter semantics such as merge/replace requirements, email fallback behavior, experience sorting, and Pro-only fields. The description adds high-level content categories but no parameter-specific meaning, which is acceptable but not compensatory for the remaining undocumented 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 ('Store') with a clear resource (the profile used by resumes and cover letters) and enumerates the contained sections: contact details, summary, skills, roles, education, certifications, and languages. This clearly distinguishes profile_set from its sibling profile_get, which reads the profile rather than storing 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 states the contextual purpose: this is the profile 'every resume and cover letter is built from,' so an agent can infer this is the setup step before generation tools like resume_create or cover_letter_create. It does not explicitly name alternatives or give when-not-to-use guidance, so it falls 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.

project_set_rateSet project rateA

Set the hourly rate and currency used to turn tracked hours into money for a project or client. Returns the new rate and, when re-rating is asked for, how many already logged entries changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject or client name. A partial name that matches exactly one existing project is used as that project.
currencyNoCurrency: a code (EUR, USD, GBP, PLN) or a word ('euros', 'pounds', 'zl'). Defaults to the shared business profile's default_currency, else USD.
hourly_rateYesHourly rate: a number (85) or the words the user said ('90 euros an hour'). '1,200 USD' is 1200; '12,50 EUR' is 12.50; anything ambiguous is refused.
only_missingNoOnly meaningful with apply_to_existing. True restores the old fill-the-gaps behaviour: only entries that carry no rate of their own are touched. Default false, which re-stamps every entry of the project.
apply_to_existingNoRe-rate time already logged for this project: every entry is re-stamped with the new rate, including entries that already carry one. Default false: the new rate applies to future entries only, because each entry captures the rate in force when it was logged.

TDQS

A4/5.0
Behavior3/5

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

Annotations only indicate readOnlyHint=false and destructiveHint=false, leaving the behavioral burden on the description. The description does disclose that it returns the new rate and the count of changed entries when re-rating is requested, but it does not mention the default behavior (future-only vs. apply_to_existing) or the side effects of the only_missing flag; these are left to the schema.

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

Conciseness5/5

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

Two sentences, both information-dense and front-loaded with the core action. No wasted words or redundant restatements 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 rich schema and the description's explicit mention of return values, the tool is adequately described for an agent to call it correctly. Minor gaps like default behavior are covered by the schema, and no output schema exists so the return value note is 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 100%, so the schema already documents all five parameters. The description adds no significant meaning beyond naming 'hourly rate' and 'currency', so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Set the hourly rate and currency used to turn tracked hours into money for a project or client'). This clearly differentiates the tool from sibling entry-management and reporting tools 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?

Provides clear context for when to use the tool (setting rates for projects/clients) and no exclusion is needed since no sibling tool competes for the same action. However, it does not explicitly state when not to use it or point to alternatives, 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.

proposal_createCreate a proposalA

Call this tool to produce a client-ready .docx proposal from summary, scope, deliverables, timeline, price and terms. Returns the reference, the total and the file path. Free tier: 3 proposals or contracts per month.

ParametersJSON Schema
NameRequiredDescriptionDefault
priceYes
scopeNoWhat is in scope, one bullet each. Omitted from the document if not given or empty
clientYesClient name, printed as 'Prepared for'. The letterhead comes from your business_set profile
summaryNoOne or two paragraphs on the problem and the approach. Omitted from the document if not given
out_pathNoWhere to write the .docx. Defaults to the data directory
timelineNoPhases and their durations, rendered as a table. Omitted from the document if not given or empty
overwriteNoReplace out_path if a file is already there. Default false: an existing file is never overwritten
valid_untilNoYYYY-MM-DD, the date the quote expires
deliverablesNoWhat the client receives, one bullet each. Omitted from the document if not given or empty
project_titleYesProject title

TDQS

A4.2/5.0
Behavior4/5

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

Annotations are all false, offering no safety or behavioral hints, so the description carries the burden. It adds useful behavioral context beyond the schema: the free-tier cap of 3 per month and the return values (reference, total, file path). It does not disclose side effects like overwriting, but that is covered in the schema's overwrite parameter, so this is not 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.

Conciseness5/5

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

Three sentences, each earning its place: the first states purpose and inputs, the second return values, and the third a usage limitation. Purpose is front-loaded and there is no vague, redundant, or promotional 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 10-parameter tool with nested objects and no output schema, the description covers the key aspects an agent needs: purpose, input categories, return values, and a limitation. The schema covers parameter details. It does not mention the business_set profile dependency, but that is present in the schema, so the description is sufficiently complete 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 90%, so the schema provides detailed parameter semantics. The description only lists field names (summary, scope, deliverables, timeline, price, terms) without adding extra meaning about formats, defaults, or constraints, so it stays at the baseline for high 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 ('produce') and resource ('client-ready .docx proposal') and lists the content components, making it unmistakably a proposal-creation tool. The title reinforces creation, distinguishing it from siblings like contract_create and proposal_update 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?

The opening instruction 'Call this tool to produce a client-ready .docx proposal' gives clear context for when to use it, and the free-tier limit adds a constraint. However, it does not explicitly mention alternatives or when not to use it (e.g., for contracts or updates), 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.

proposal_updateUpdate a proposalA

Rewrite an existing proposal in place from its reference. Only the fields you pass change; the rest comes from the data stored at creation. Returns the fields that changed and the file path.

ParametersJSON Schema
NameRequiredDescriptionDefault
priceNo
scopeNo
clientNo
summaryNo
timelineNo
referenceYesThe proposal reference, e.g. PROP-2026-0001. The same file and the same reference number are kept, so no second document is burned against the free-tier monthly count
valid_untilNo
deliverablesNo
project_titleNo

TDQS

A4.2/5.0
Behavior4/5

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

The description adds key behavioral detail beyond the annotations: it discloses in-place mutation, partial-update semantics ('Only the fields you pass change'), and the return value ('fields that changed and the file path'). Since all annotation hints are simply false, the description carries the burden well by explaining what the write operation does and 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?

Three concise sentences with no filler. The core action is front-loaded, the partial-update behavior follows immediately, and the return value closes it out. Every sentence adds 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 9-parameter tool with no output schema and no useful annotations, the description covers the most essential gaps: what is mutated, how much of the record changes, and what is returned. Minor gaps remain, such as not-found/error behavior and format expectations for fields like valid_until, but an agent has enough to invoke the update 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 low (11%), so the description must compensate; it does add important cross-cutting semantics by making clear that only passed fields are changed, which affects every parameter. The schema also gives a helpful reference description with an example and the free-tier implication. However, most parameters like valid_until, scope, and timeline still rely on names and types, with no format or value semantics 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?

The description uses a specific verb and resource: 'Rewrite an existing proposal in place from its reference.' It clearly distinguishes this from proposal_create by emphasizing 'existing' and 'in place,' so an agent can tell the two siblings apart. The 'Only the fields you pass change' clause further pins down the update-versus-create 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 gives clear context for when to use the tool: updating an existing proposal identified by reference, with partial-field patching. It does not explicitly name alternatives or state when not to use it, but the existing-in-place framing makes the intended use obvious against proposal_create.

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

rate_historyRate history for a pairA

Call this tool for the ECB rate of one currency pair across a window. Returns one row per published day plus the min, max, average and the change. A window wider than the free 90 days is shortened, not refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesQuote currency of the pair. Each row is 1 from = X to
daysNoTrailing window in calendar days, default 30. Only TARGET business days carry a rate, so 30 days holds about 21 rows. Free reads up to 90 days back; Pro reads the whole series back to 1999-01-04
fromYesBase currency of the pair
to_dateNoISO date, inclusive, default today
max_rowsNoCap the table, default 200. min/max/avg still cover the whole window
from_dateNoISO date, inclusive. Overrides days. Free is limited to the last 90 days

TDQS

A4/5.0
Behavior4/5

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

All annotations are false, so the description carries the full burden of behavioral disclosure. It adds genuinely useful behavior: one row per published day, summary statistics, and an over-wide window being shortened rather than refused. It does not explicitly state that this is read-only, but the description gives no hint of mutation either.

Agents need to know what a tool does to the world before 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: purpose, output shape, and edge-case behavior. The most important information 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.

Completeness4/5

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

With 6 parameters, no output schema, and no annotations, the description covers the core contract: what the tool returns, how it behaves on broad windows, and what data source it uses. It is slightly light on sibling differentiation and the exact meaning of 'change', but the rich input schema closes most 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 description coverage is 100%, so the schema already documents all six parameters in detail. The description adds useful context about trailing windows and the free 90-day limit, but it does not provide parameter-level meaning beyond what the schema already covers. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb-resource combination: 'ECB rate of one currency pair across a window.' It also names the exact return shape (daily rows plus min/max/avg/change), which clearly distinguishes it from siblings like rates_latest and rate_on. This is more than adequate for an agent to understand 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 Guidelines3/5

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

The opening line 'Call this tool for...' gives an implied usage context: historical rate queries with summary statistics. However, it never names alternatives or states when not to use this tool, so an agent must infer its position among siblings like rate_on and rates_latest.

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

rate_onRate on a given dateA

Call this tool for the ECB rate of one pair on one date. Returns both directions and the rate date, so a reciprocal is never reported as the published figure. A date beyond the free window is shortened, never refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesQuote currency. The rate returned is 1 from = X to
dateYesISO date YYYY-MM-DD. If the ECB published nothing that day - every weekend, 1 January, Good Friday, Easter Monday, 1 May, 25 and 26 December - the last rate published on or before it is returned and the answer names that date. Free covers the last 90 days: an older date is shortened to the oldest free day rather than refused, and rate_date says which day the numbers are really from. Pro covers every date back to 1999-01-04
fromYesBase currency. The ECB quotes every currency per 1 euro, so "the ECB rate for USD" is from EUR to USD, not the other way round; invert only if the user asked for the inverse

TDQS

A4.9/5.0
Behavior5/5

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

Annotations are all false/absent, so the description carries the full burden. It discloses the key behavioral traits: returns both directions, never reports a reciprocal as the published figure, shortens out-of-window dates instead of refusing, and names the actual rate date. It also explains the free-window cutoff and Pro coverage. This is rich, non-obvious behavior that an agent needs to know 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.

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 tool's purpose, the second clarifies the return behavior, and the third covers edge cases. Every sentence earns its place, and the parameter descriptions in the schema carry the detailed semantics without bloating the main description.

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 tool with no output schema, the description plus schema covers everything an agent needs: what the tool returns, how dates are handled, the free-window limitation, and the currency convention. The sibling list provides enough contrast to avoid confusion with rate_history or rates_latest. No critical gap remains.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema: it explains the ECB convention (quotes every currency per 1 euro), warns that 'the ECB rate for USD' means from EUR to USD, and clarifies that the date parameter's fallback behavior. The only reason it's not a 5 is that the schema already documents the parameters thoroughly, so the description's added value is complementary rather than essential.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Call this tool for'), a precise resource ('the ECB rate of one pair on one date'), and immediately distinguishes it from siblings like rate_history and rates_latest by scoping it to a single pair and a single date. It also clarifies the return shape ('both directions and the rate date'), which removes 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 Guidelines5/5

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

The description explicitly says when to call this tool ('for the ECB rate of one pair on one date') and implicitly contrasts with siblings that handle multiple dates or multiple pairs. It also gives concrete behavioral guidance: a reciprocal is never reported as the published figure, and older dates are shortened rather than refused. This is enough for an agent to select it over rate_history or rates_latest.

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

rates_latestLatest ECB reference ratesA
Read-onlyIdempotent

Call this tool for the latest ECB daily reference rates against any base: 1.0812 for USD means 1 base = 1.0812 USD. Crosses go through the euro. Returns the ECB rate date and the cache age.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseNoBase currency; defaults to the shared business profile's default_currency, else EUR. A rate of 1.0812 for USD means 1 base = 1.0812 USD. Cross rates go through the euro, the only pair the ECB publishes
quotesNoOnly these currencies, at most 200. Omit for all of them

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the tool to be read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds important behavioral details: cross rates are computed through the euro, and the response includes the ECB rate date and cache age. This provides context beyond the annotations 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.

Conciseness5/5

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

The description is brief and well-structured: the first sentence states the purpose and key interpretation, the second conveys additional behavioral details. Every sentence earns its place, with no redundant or filler content. The rate example is compact and immediately useful.

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

Completeness4/5

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

For a simple read-only tool with two optional parameters, the description covers the essential context: when to use it, how rates are expressed, and what the response includes. There is no output schema, but the description partially compensates by mentioning the returned fields. It could mention edge cases like invalid base currencies, but this is minor given the tool's low 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?

The schema already provides full descriptions for both parameters, including the base/quote interpretation and the 'omit quotes for all' behavior. The description largely repeats this information, adding no new semantic detail beyond what is in the schema. With schema coverage at 100%, a baseline score of 3 is appropriate.

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

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: fetching the latest ECB daily reference rates against any base currency. It uses a specific verb ('call this tool for'), names the resource ('ECB daily reference rates'), and clarifies the rate interpretation with an example. This distinguishes it from sibling tools focused on historical rates or conversions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 tool when you need the latest ECB reference rates. It does not explicitly mention alternatives or exclusions, but the phrase 'latest ... rates' implies a contrast with historical rate tools like rate_history or rate_on. No conflicting guidance is present.

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

reportTime reportA
Read-onlyIdempotent

Timesheet report: total tracked hours and billable money for a period, optionally grouped by (group by) project, day, task or tag - hours per project, how much to bill. Omit group_by for the plain total per currency.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesISO date/time end of the period. On the free tier the window is clamped to the last 7 days; Pro reports over the full history.
fromYesISO date/time start of the period. On the free tier the window is clamped to the last 7 days; Pro reports over the full history.
formatNotable (default), json or csv. Every format carries one amount per currency, never a mixed-currency sum.
projectNoOptional project filter
group_byNoproject | day | task | tag. Optional: omit it for the plain total per currency, with no breakdown. Money is grouped by currency and EUR is never added to USD.
unbilled_onlyNoDefault true: hours already put on an invoice (entry_mark_billed) are excluded, so the report answers 'what is still to bill'. Pass false for the full timesheet including invoiced work.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds useful aggregation context: grouping by project/day/task/tag, per-currency totals, and the 'how much to bill' framing. It does not mention the free-tier clamping or the unbilled_only default, but those are present in the schema and there is 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 two sentences with the core purpose front-loaded and no filler. The parenthetical '(group by)' is slightly redundant, but every clause contributes 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 six-parameter reporting tool with complete schema descriptions and supportive annotations, the definition covers purpose, grouping options, currency behavior, and output formats. It does not fully specify the return structure, but the format enum and per-currency guarantee reduce that 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 100%, so the schema already documents all six parameters. The description reinforces group_by behavior and adds an illustrative 'hours per project, how much to bill' framing, but it does not substantially extend what the schema already 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 clearly states the resource (timesheet report) and the outputs: total tracked hours, billable money, and how much to bill over a period, with optional grouping. It is distinct from a per-entry list and from invoice_summary by focusing on aggregated billable totals. It does not explicitly name sibling alternatives, so it stops short of 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 the use case: when you need totals or billable amounts for a period, use this tool, and omit group_by for a plain per-currency total. It does not explicitly state when to prefer report over siblings like entry_list, export_csv, or invoice_summary, nor any exclusions.

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

report_deleteDelete one saved candidate reportA
Destructive

Delete one local saved report and free a storage slot. Does not change accounting records.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=false, so safety is partly covered. The description still adds real context: that deletion frees a storage slot (a side effect beyond the record) and that accounting records are unaffected. It omits that the action is non-idempotent, i.e. a repeat call on the same id behaves differently.

Agents need to know what a tool does to the world before 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 with zero filler, and the primary action plus its side effect are front-loaded before the scope caveat. 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 single-parameter destructive tool with full annotation coverage and no output schema, the description covers the action, its side effect, and its blast radius. The main remaining gap is the irreversibility/non-idempotency of the delete, which an agent would want stated explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 a single 'id' parameter with 0% schema description coverage, so the description must carry the burden and says nothing about it. The schema's strict UUID regex pattern does document the expected format structurally, which limits the harm, but the description adds no meaning such as where the id comes from.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 local saved report') and bounds the scope ('local', 'free a storage slot'). It implicitly separates itself from accounting-record tools, though it never names a sibling like report_get or report_list 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?

Usage is implied by the resource type ('saved report') and the scope note that it does not touch accounting records, which helps an agent decide this is a local cleanup action. However, there is no explicit when-to-use guidance, no prerequisites, and no mention of related siblings such as report_list or report_export_csv.

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

report_export_csvExport candidate records as CSVB
Read-onlyIdempotent

Export free CSV pages from a saved report or unsaved preview. One row per record with reasons and group ids. Formula-like cells are escaped; no financial-loss total is calculated.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
limitNo
offsetNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description still adds real value beyond them: formula-like cells are escaped (CSV-injection handling) and no financial-loss total is computed, both of which would otherwise surprise a caller.

Agents need to know what a tool does to the world before 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 action, with no filler. The wording is dense to the point of being terse in places ('free CSV pages'), 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, the description does partially describe the return shape ('one row per record with reasons and group ids'), which is helpful. However, for a paginated export it omits the limit cap and how to advance through pages, so an agent cannot fully drive it from the definition 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 the parameters, but it only obliquely touches the id (saved report vs. 'preview:' form) and says nothing about limit or offset. The 1000-row cap and pagination behavior are entirely undocumented outside the schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (Export) plus resource (CSV pages of a saved report or unsaved preview), which separates it from report_get/report_page siblings that return report data in another form. The phrase 'free CSV pages' is slightly cryptic 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 description implies when to use it (when a CSV of a report or preview is wanted) and hints that the id may be a saved report or an unsaved preview, but it never names a competing tool such as report_page or states exclusions. 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.

report_getRead a saved candidate reportA
Read-onlyIdempotent

Read a saved report with source records, reason groups and overlap-safe candidate counts. Large reports return free paging instructions.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so safety is covered. The description still adds real behavior beyond them: what the response contains and that oversized reports return paging instructions rather than truncating silently.

Agents need to know what a tool does to the world before 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 zero filler; the payload description is front-loaded and the paging caveat follows as a secondary clause. Every phrase 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 full annotations and no output schema, the description covers what is returned and how large results are handled. The only meaningful gap is guidance on sourcing the required id.

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

Parameters3/5

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

Schema coverage is 0% for the single required 'id' parameter, so the description carries the burden. It implies the id identifies a saved report but never states that it is a required UUIDv4 or where to obtain it, 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?

States a specific verb (Read) and resource (a saved report) and enumerates the payload (source records, reason groups, overlap-safe candidate counts). This is clearly distinguishable from report_list and report_page, though it never names those siblings 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?

Usage is implied by 'Read a saved report' plus the hint that large reports return paging instructions, which gestures at report_page. There is no explicit when-to-use statement, no prerequisite that an id must come from report_list, and no stated exclusion.

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

report_listList saved candidate reportsA
Read-onlyIdempotent

List saved report ids, timestamps and unique candidate counts. Free on both tiers. Up to 100 reports per page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new information: cost across tiers and a page-size ceiling. It does not describe pagination traversal behavior or what ordering to expect, so it neither contradicts nor fully supplements 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?

Three short sentences, front-loaded with the return fields, then cost, then pagination limit. No sentence is wasted and nothing is 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 paged list with no output schema, the description supplies the return fields, the cost model, and the page ceiling, which is most of what an agent needs. The gap is pagination mechanics (how offset interacts with the page limit), which is 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 description coverage is 0%, so the two parameters (limit, offset) are only named in the schema. The description reinforces the limit ceiling ('up to 100 reports per page') but says nothing about offset semantics or how to advance pages. Partial compensation, not full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (saved reports) and enumerates exactly what is returned: ids, timestamps, and unique candidate counts. It is not tautological. It stops short of naming the sibling it is not (report_get, report_page, report_export_csv), so the 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?

'Free on both tiers' gives useful selection context, implying this cheap listing is the right entry point before a paid per-report call. However, it never explicitly says when to use this versus report_get, report_page, or report_export_csv, leaving the choice to inference.

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

report_pageRead full candidate evidence pagesC
Read-onlyIdempotent

Read free pages of records, group summaries, record reasons or one group’s members. Unsaved preview ids last 30 minutes for the last two checks in this process.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
limitNo
offsetNo
sectionYes
group_idNo

TDQS

C2.1/5.0
Behavior2/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), so the description need not repeat that. However, the description adds little beyond a cryptic note about preview ids expiring in 30 minutes. It doesn't explain pagination behavior, what 'free pages' means, or how the 'last two checks' relate to the preview id lifetime. This is insufficient behavioral context for a read tool 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.

Conciseness3/5

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

The description is brief, but the second sentence about preview ids is confusing and lacks structure. It is not front-loaded with the tool's purpose; instead it leads with 'Read free pages' which is ambiguous.

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

Completeness1/5

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

Given no output schema and 0% parameter documentation, the description fails to provide enough information for an agent to correctly use the tool. It does not clarify what sections correspond to which enum values, how id and preview ids work, or what the return data looks like.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain any of the five parameters. The critical 'section' enum values are listed vaguely as 'records, group summaries, record reasons or one group's members', but the mapping to the actual enum values (records, groups, record_summaries, group_members) is unclear, and group_id, limit, offset, and the id format (including preview: prefix) are entirely unaddressed.

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 ('records, group summaries, record reasons or one group's members') but uses a vague verb 'Read' and does not clearly distinguish this tool from siblings like report_get or report_list. It's unclear whether this is a paginated viewer, an export, or something else specific.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as report_list or report_get. The description does not state prerequisites or conditions for invocation, leaving the agent to guess based on the name.

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

resume_createWrite a resume .docxA

Call this tool to write the stored profile to a Word .docx. Returns the output path, the estimated page count, which bullets were dropped to fit, and which keywords matched or are missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNoFree tier prints "modern" only; "classic" and "compact" are Pro.modern
variantNo
keywordsNoFrom the posting. A keyword that appears anywhere in the profile is printed in bold; one that does not is reported as missing and is never added to the resume.
out_pathNoWhere to write the .docx. Defaults to <data dir>/documents/<name>-resume.docx, numbered -2, -3, ... if that exists.
max_pagesNoBullets are ordered by relevance to target_role and keywords, then trimmed to fit this many pages against a measured word budget. Default 2.
overwriteNoReplace an existing file at out_path. Default false: the call fails and nothing is written.
target_roleNoPrinted under your name and used to rank bullets

TDQS

A4/5.0
Behavior4/5

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

Annotations provide no hints (all false), so the description must carry behavioral disclosure. It does by noting the tool writes a file and returns the output path, estimated page count, dropped bullets, and keyword match/missing status, revealing potential bullet trimming. It doesn't cover failure modes like existing file conflicts, though the schema covers the overwrite 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?

A single, front-loaded sentence states the action and enumerates the return values with no wasted words. It efficiently conveys the tool's purpose and outputs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 must explain return values, and it does by listing the output path, page count, dropped bullets, and keyword status. It also makes clear it uses the stored profile. It doesn't mention error handling, but the schema covers overwrite and defaults, making this adequate for a creation 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 86%, so the schema already documents most parameters. The description adds no additional parameter meaning, only behavioral context about return values. It stays at the baseline for high 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 states the specific action 'write the stored profile to a Word .docx', identifying both the verb and the resource. This clearly distinguishes it from siblings like resume_read or resume_to_markdown, which read or convert rather than create a new docx.

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

Usage Guidelines3/5

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

The description does not explicitly mention alternatives or provide when-to-use guidance. It implies this is the tool for creating a .docx resume, but doesn't contrast it with resume_to_html or resume_to_markdown, leaving the agent to infer the choice.

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

resume_readRead an existing resume .docxA
Read-onlyIdempotent

Call this tool to read an existing .docx resume into the profile shape, with the sections found and anything unplaced. It saves nothing unless save is true, so review it first. .doc and .rtf are refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to an existing .docx. Legacy .doc and .rtf are not readable here. Parsed best effort, section by heading.
saveNoStore the result as the profile. Default false: nothing is saved. Review the result first.
variantNo

TDQS

A3.5/5.0
Behavior2/5

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

The description is behaviorally rich (best-effort heading parse, sections found + unplaced remainder, no save by default). However, it discloses that the tool writes the profile when save=true, while annotations declare readOnlyHint=true, so the stated behavior contradicts the annotation. Flagged as an annotation 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 tight sentences with the imperative action front-loaded and the save caveat placed immediately after. Minor boilerplate in 'Call this tool to' keeps it out of the top band.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 sketch the return shape ('the sections found and anything unplaced') and covers the format restriction and save semantics. The undocumented 'variant' parameter is the only 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 coverage is 67%: 'path' and 'save' are already documented in the schema, and the description mostly restates them (file-type refusals, save-off default). The 'variant' parameter has no description anywhere, which the description also fails to cover. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('read an existing .docx resume') plus the transformation target ('into the profile shape'), which separates it from resume_create and doc_read. It does not name a sibling explicitly, but 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?

Gives a clear call condition and a negative constraint: '.doc and .rtf are refused', and instructs the agent to review the result before committing. It stops short of naming alternatives (e.g. doc_read, resume_to_markdown) for those cases, so it is clear context rather than full routing.

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

resume_to_htmlPrintable resume HTMLA

Call this tool to write the resume as semantic HTML with a print stylesheet and return where it went; print it to PDF from a browser, because there is no doc_to_pdf here. Bullets are trimmed to fit max_pages. Free.

ParametersJSON Schema
NameRequiredDescriptionDefault
variantNo
out_pathNoWhere to write the .html. Defaults to <data dir>/documents/<name>-resume.html, numbered -2, -3, ... if that exists.
max_pagesNoBullets are trimmed to fit this many pages against a measured word budget. Default 2.
overwriteNoReplace an existing file at out_path. Default false: the call fails and nothing is written.
target_roleNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations provide no safety hints (readOnlyHint=false, destructiveHint=false, etc.), so the description carries the burden. It discloses that the tool writes a file, returns the path, and trims bullets to fit max_pages. It also notes 'Free' (likely cost). These are useful behavioral traits 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?

The description is brief (three sentences) and front-loads the core action. The extra note about printing to PDF and the 'Free' tag are arguably useful, though 'Free' is terse and could be placed better. Overall, it is concise without waste.

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 5 parameters and no output schema, the description is incomplete. It does not explain the return value format beyond 'where it went', does not describe the variant or target_role parameters, and omits failure behavior (e.g., when out_path exists and overwrite is false). The schema covers some params, but the description does not fill 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 60% (out_path, max_pages, overwrite have descriptions; variant and target_role do not). The description adds meaning for max_pages ('bullets are trimmed to fit max_pages') and implicitly for out_path via 'return where it went', but it does not address variant or target_role at all. It partially compensates 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 the action (write the resume as semantic HTML) and the resource (resume) with a print stylesheet, and notes it returns the location. It is clear about the output format and the printing workflow, though it does not explicitly differentiate from resume_to_markdown or other siblings. The mention of 'there is no doc_to_pdf here' provides some context but not a direct sibling comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 instructs to call the tool for HTML output and mentions printing to PDF from a browser, and that doc_to_pdf is unavailable. However, it does not specify when not to use it, nor does it mention the sibling resume_to_markdown or other alternatives. The 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.

resume_to_markdownResume as markdownA

Return the stored profile as markdown text inline, ready to paste into a form or an ATS box. Same page-budget trimming as resume_create for max_pages. Nothing is written to disk. Free.

ParametersJSON Schema
NameRequiredDescriptionDefault
variantNo
max_pagesNo
target_roleNo

TDQS

A4/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 all-false annotations: 'Nothing is written to disk' clarifies side effects, and 'Same page-budget trimming as resume_create for max_pages' explains how max_pages influences output. The 'Free' note also adds a practical constraint. No annotation contradiction is present; readOnlyHint=false is an absence of a hint rather than an explicit claim that the tool mutates 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?

Three short sentences front-load the core purpose, then add the paste use case, max_pages behavior, and side-effect/cost guarantees. Every sentence contributes information without repetition or filler.

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

Completeness3/5

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

The tool's core output and side-effect behavior are well covered, and the return format is stated inline. However, with no output schema and no descriptions for variant and target_role, the definition is incomplete for an agent that needs to invoke it with non-default optional 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?

With schema description coverage at 0%, the description needed to explain all three parameters. It only indirectly explains max_pages via 'Same page-budget trimming as resume_create for max_pages,' and leaves variant and target_role completely unexplained. An agent cannot determine what values to pass or what these parameters do.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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: 'Return the stored profile as markdown text inline.' It clearly states the output format (markdown), which differentiates it from sibling resume_to_html, and identifies the paste-ready use case. There is no ambiguity about what the 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 Guidelines4/5

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

The description gives a clear context for use ('ready to paste into a form or an ATS box') and references resume_create for max_pages trimming behavior. It does not explicitly contrast this tool with resume_to_html, resume_read, or profile_get, so the when-not-to-use guidance 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.

schedule_createCreate a recurring invoice scheduleA

Define a repeating invoice: a client, the line items, how often to bill, and when it starts and ends. Returns the schedule id, a summary and its next dates. Nothing is invoiced until invoice_generate_due runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
everyYesHow often to bill: "weekly", "monthly", "quarterly", "yearly", or {days: 10}. Month steps keep the start date's day of month and clamp it to shorter months, so a schedule starting on the 31st bills on the 28th/29th in February and back on the 31st in March
itemsYesThe line items billed every period
notesNoFree text printed under the totals of every generated invoice
clientYesClient name or id, as in the invoice server. Unknown names are created on the first generated invoice
currencyNoDefaults to your business default currency
due_daysNoDays until each invoice is due, defaults to your payment terms
end_dateNoYYYY-MM-DD, INCLUSIVE: an occurrence landing exactly on it is still generated
tax_noteNoWhy this schedule bills the tax it bills, e.g. 'Reverse charge: VAT accounted for by the recipient, art. 196 Directive 2006/112/EC'. It is printed under the totals of EVERY invoice this schedule generates, so a 0% retainer carries its reason on the document instead of only in the chat
anchor_dayNoPro: bill on this day of month instead of the start date's day. 31 means the last day of every month
start_dateYesYYYY-MM-DD. The first invoice falls on this date, and for weekly/monthly/quarterly/yearly steps its day of month is the billing day for every later period
end_of_monthNoPro: always bill on the last day of the month
auto_generateNoMarks the schedule for the monthly_billing_run prompt. Default false. Nothing runs in the background either way: invoices are created only when invoice_generate_due is called

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only state broad hints (all false), so the description carries the disclosure burden. It adds significant behavior beyond structured data: 'Nothing is invoiced until invoice_generate_due runs' and the return values (schedule id, summary, next dates). It doesn't cover permission requirements or immediate activation state, but it addresses the most surprising side-effect boundary.

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

Conciseness5/5

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

Three sentences with no filler: the first states the action and scope, the second states the return values, the third states the critical caveat. Every sentence earns its place, and the most important differentiator ('nothing is invoiced until...') is placed at the end for emphasis.

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 create tool with 12 parameters but a fully descriptive schema, the description covers the essential behavioral contract: what is created, what is returned, and when side-effects occur (only via invoice_generate_due). No output schema exists, so the explicit return description is valuable. Nothing an agent needs to know before calling 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 100%, and the schema itself contains rich parameter explanations (e.g., the 'every' field's day-of-month clamping behavior). The tool description only summarizes parameter categories ('a client, the line items, how often to bill') without adding new meaning, so the baseline of 3 applies.

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

Purpose5/5

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

The description uses a specific verb and resource ('Define a repeating invoice') and enumerates the core components (client, line items, frequency, start/end), making the tool's job unambiguous. It also states the return contract (schedule id, summary, next dates), and implicitly differentiates from siblings like schedule_update and schedule_delete by being the creation 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 provides clear context for when to use this tool: to set up a repeating invoice schedule. It does not explicitly name alternatives or exclusions (e.g., 'use schedule_update to modify'), but the title and sibling set make that distinction clear. The mention of invoice_generate_due as a downstream step rather than an alternative leaves the guidance slightly implicit.

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

schedule_deleteDelete a scheduleA
Destructive

Delete one schedule permanently. Invoices already generated stay in the invoice server and the history is kept. Re-creating it gives a NEW id, so its old periods count as unbilled. schedule_pause is reversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSchedule id, or a client name. Deletion is permanent; re-creating the same schedule afterwards gives it a NEW id, so its old periods count as unbilled again

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark destructiveHint=true, but the description adds meaningful behavioral context beyond that: invoices already generated remain in the invoice server, history is kept, re-creating the schedule yields a new id, and old periods count as unbilled. It also clarifies that pause is reversible, giving the agent a fuller picture of consequences.

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

Conciseness5/5

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

Three short sentences, all informative and none wasted. The core action and permanence are front-loaded, and the sibling contrast is placed at the end without clutter.

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 one-parameter tool with no output schema, the description covers what happens to generated invoices, history, re-creation behavior, and the reversible alternative. An agent has enough context to invoke it correctly 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 100%, and the id parameter is already described as 'Schedule id, or a client name' plus the permanent re-creation consequence. The description does not add extra parameter-level meaning, so the baseline score of 3 is appropriate.

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

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: 'Delete one schedule permanently.' It also distinguishes itself from the reversible sibling operation by noting 'schedule_pause is reversible,' so an agent can tell delete apart from pause/resume/update 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 implies when to use this tool by emphasizing permanence and contrasting with 'schedule_pause is reversible.' It gives clear context for choosing delete over pause, though it does not explicitly enumerate all alternative tools or state 'use schedule_pause if you need a reversible option.'

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

schedule_getGet one scheduleA
Read-onlyIdempotent

Return one schedule in full by id or client: items, cadence, dates, due days, anchor rules, notes, per-period amount, next due date and how many invoices it generated. schedule_history is the log.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSchedule id, or a client name

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, idempotentHint=true, and destructiveHint=false, and the description is fully consistent with those. It adds behavioral value by defining what 'in full' means, listing the concrete fields returned, and noting the relationship to schedule_history. It does not mention auth or rate limits, but those are not necessary for a read-only lookup.

Agents need to know what a tool does to the world before 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 packed sentence that front-loads the action and follows with a concise field list. The second sentence about schedule_history is a useful pointer rather than filler. There is no repetition of the tool name, title, or schema 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?

For a simple one-parameter getter, the description is complete: it states the purpose, the accepted identifier form, the full return contents, and the correct alternative for history data. The annotations cover safety, and the output-schema absence is compensated by the explicit field enumeration. 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?

The schema already describes the only parameter, id, as 'Schedule id, or a client name' with 100% coverage, so the description's 'by id or client' adds no new semantic information. There are no enums or nested objects to clarify. The schema carries the parameter-documentation burden, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description opens with 'Return one schedule in full by id or client', a specific verb-plus-resource statement that clearly differentiates this tool from list or log siblings. The enumerated payload fields (items, cadence, dates, due days, anchor rules, notes, per-period amount, next due date, invoice count) make its purpose unmistakable. The final clause about schedule_history also helps distinguish it from the history log.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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: use this when you need one full schedule by id or client, not a list or a log. It explicitly points to schedule_history for the log, but it does not spell out when to prefer schedule_list or schedule_upcoming. The by-id/full-record framing implies those boundaries well 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.

schedule_historySchedule historyA

The audit log for one schedule id, oldest first: period, invoice number, issue and due dates, amount, PDF path, and whether that invoice is unpaid, paid, skipped or since deleted. schedule_list finds the id. Pro.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.2/5.0
Behavior3/5

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

The description adds useful behavioral context: ordering, contents, invoice statuses including 'since deleted', and a 'Pro' access note. However, the annotations provide no safety hints and readOnlyHint=false sits awkwardly with the read-only-sounding 'audit log', so the agent gets no explicit statement about side effects 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 front-loads the core purpose and then efficiently lists the returned fields and statuses. The trailing 'Pro.' is minimal but adds a real access constraint without 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 one-parameter lookup tool with no output schema, the description covers the output fields, ordering, and status semantics. It does not mention pagination or limits, which may matter for an audit log, but the description is otherwise enough 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 only defines an opaque required string 'id', and description coverage is 0%. The description compensates by explaining that the parameter is a schedule id and directs the agent to schedule_list to discover it. It stops short of giving format examples, but for one parameter this is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 an audit log for one schedule id, enumerates the exact fields returned, and orders them oldest first. It also names schedule_list as the source of the id, which distinguishes it from sibling schedule tools without needing to inspect 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 gives a concrete usage pointer: use schedule_list to find the id. It does not explicitly state when to prefer this over schedule_get or schedule_upcoming, but the audit-log framing and field list 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.

schedule_listList schedulesA
Read-onlyIdempotent

List schedules: id, client, cadence, per-period amount and currency, start and end dates, status, next due date and auto_generate. Filter by status; a paused schedule reports no next due date.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo

TDQS

A4.2/5.0
Behavior4/5

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

The description adds a behavioral detail beyond annotations: 'a paused schedule reports no next due date.' Since readOnlyHint, idempotentHint, and destructiveHint are already present, the description enhances transparency by explaining a subtle output nuance that annotations do not capture.

Agents need to know what a tool does to the world before 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 'List schedules' and packs the field list and filter behavior without redundancy. Every word 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 simple list operation with one optional filter, the description covers the returned fields and the key behavioral quirk (paused schedules). It omits pagination/ordering details, but given the simplicity and strong annotations, this is a minor gap. The absence of an output schema is mitigated by the explicit field enumeration.

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 explains that the status parameter filters results and that the 'paused' status suppresses the next due date, adding meaning beyond the bare enum. However, it does not explicitly state that the parameter is optional or that omitting it returns all schedules.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 schedules' and enumerates the specific fields returned (id, client, cadence, amounts, dates, status, next due date, auto_generate), which distinguishes it from single-fetch tools like schedule_get. It also mentions filtering, making 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 Guidelines3/5

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

The description implies usage for listing schedules and supports filtering by status, but it does not explicitly contrast with sibling tools like schedule_get, schedule_history, or schedule_upcoming. There are no 'use this instead of X' directives, so the agent must infer when this tool is preferred.

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

schedule_pausePause a scheduleA

Stop one schedule generating invoices without deleting it; invoice_generate_due and forecast skip it. Its periods keep falling due and resuming back-bills them, so use schedule_skip to drop just one.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only indicate that the tool is not read-only and not destructive. The description adds meaningful behavioral context: paused schedules stop generating invoices, due periods continue accumulating, and resuming later back-bills them. This goes beyond structured fields, though it does not cover repeated-pause 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?

Two dense, purposeful sentences. The first front-loads the core action and non-destructive nature; the second adds the critical resumption-side-effect and routes to the correct sibling tool. No filler or redundancy.

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

Completeness4/5

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

For a single-parameter mutation tool, the description covers the central side effects and the alternative tool. The main gap is that it never explicitly maps the 'id' parameter to the schedule entity, but the low complexity and strong sibling differentiation keep this from being a major omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 sole required parameter 'id' has no schema description. The description never mentions that id identifies the schedule to pause. With low schema coverage, the description should compensate by explaining the parameter, but it does not.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Stop one schedule generating invoices without deleting it.' It clearly differentiates the tool from schedule_delete (no deletion) and from generation tools like invoice_generate_due and forecast, which will skip the paused schedule.

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 states when to use schedule_pause versus schedule_skip: pause stops invoice generation indefinitely while periods continue falling due; schedule_skip is for dropping a single occurrence. It also clarifies that generation and forecast tools will skip the paused schedule, giving an agent a clear decision path.

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

schedule_resumeResume a scheduleA

Make a paused schedule active again. Every period missed while it was paused is still due and the next invoice_generate_due creates them all. Refused when it would pass the free tier's 3 active.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the description doesn't need to restate those. It adds valuable behavioral context: missed periods remain due and are created by the next invoice_generate_due, and the operation is refused when it would exceed the free tier's active limit. This goes 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?

Three sentences, each earning its place: the action, the behavioral consequence, and the refusal condition. Front-loaded with the core purpose. 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 single-parameter tool with no output schema, the description covers the action, the side effect (missed periods due), and a failure condition. It doesn't describe the return value, but with no output schema that's less critical. It also doesn't explicitly state prerequisites (e.g., schedule must exist and be paused), but 'paused schedule' implies that.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden. The description doesn't explain the 'id' parameter beyond what the schema provides (a string). However, with only one parameter named 'id', the meaning is fairly obvious: it identifies the schedule to resume. The description could have added 'id of the schedule to resume' but the context is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Resume'), a resource ('a schedule'), and the state transition ('Make a paused schedule active again'). It clearly distinguishes from siblings like schedule_pause and schedule_create by focusing on the resume 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?

The description implies when to use it: when a schedule is paused and should become active again. It also mentions a refusal condition (free tier's 3 active limit), which gives context for when it might not work. It doesn't explicitly name alternatives, but the sibling list and the verb 'resume' make the usage context clear.

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

schedule_skipSkip one periodA

Close ONE occurrence for good without pausing the schedule, reporting what will not be billed. period must be a real occurrence of it. An invoiced period is refused; undo reopens a skip.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSchedule id, or a client name
undoNoRemove a previous skip so the period becomes due again. Works only on a period that has not been invoiced. Default false
periodYesThe occurrence date to skip, YYYY-MM-DD, exactly as it appears in schedule_upcoming or forecast. This is the answer to "pause this client for October": schedule_pause stops the whole schedule and a resumed schedule still back-bills the periods it missed, whereas a skipped period is closed for good

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses important behaviors beyond the annotations: the operation is permanent ('for good'), irreversible only via undo, refused on invoiced periods, and reports what will not be billed. It does not detail response format or edge cases, but the core mutation semantics are clearly conveyed.

Agents need to know what a tool does to the world before 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 most important fact. The sentence 'period must be a real occurrence of it' is slightly awkward and could more clearly say 'of the schedule,' but overall every sentence contributes meaning and the text is 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 mutation tool with no output schema, the description covers the essential invocation conditions: required parameters, exact period format, invoiced-period restriction, and undo semantics. It does not describe the exact return payload, but the phrase 'reporting what will not be billed' gives a reasonable expectation of 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 coverage is 100%, and the parameter descriptions are thorough: id accepts a schedule id or client name, period requires a YYYY-MM-DD date appearing in schedule_upcoming or forecast, and undo is explained. The description adds reasonable context without needing to repeat every schema 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 states a specific action ('Close ONE occurrence for good'), the resource (a schedule period), and the key effect (not pausing the schedule). It also distinguishes itself from schedule_pause by saying it skips one occurrence rather than stopping the whole schedule.

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 contrasts this tool with schedule_pause, explaining that pausing stops the whole schedule and back-bills missed periods, while skipping closes one period for good. It also states the invoiced-period refusal and the undo behavior, giving clear conditions for correct use.

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

schedule_upcomingWhat falls due soonA

Table every occurrence of every ACTIVE schedule due in the next N days (30 default), with its amount and the invoice due date, plus a total per currency. Free lists the first 3 in your horizon.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoDays ahead, default 30. The free tier honours the horizon you ask for and lists the first 3 occurrences in it; Pro lists them all

TDQS

A4/5.0
Behavior3/5

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

The description adds useful behavioral context: it only considers ACTIVE schedules, defaulting to 30 days, and the free tier truncates results to the first 3 occurrences. However, since readOnlyHint is false and the description never explicitly states this is a read-only report, an agent cannot fully rely on its apparent list-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?

Two short, information-dense sentences. The core operation is front-loaded, the scope and returned fields are specified, and the free-tier limit is included compactly. There is no filler or redundancy.

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

Completeness4/5

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

For a one-optional-parameter tool with no output schema, the description supplies the essential return information (amount, invoice due date, total per currency) and the horizon/free-tier behavior. It lacks finer details like timezone handling or exact output field names, but those are minor given the simplicity of the tool.

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

Parameters3/5

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

Schema coverage is 100%: the `days` parameter description already documents the default, min/max range, and free-tier vs. Pro behavior. The tool description repeats the 30-day default and free-3 limit but adds no new parameter semantics, so it does not elevate beyond the schema baseline.

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

Purpose5/5

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

The description states a concrete operation: 'Table every occurrence of every ACTIVE schedule due in the next N days,' specifying the resource (active schedules' due occurrences), the default horizon, and the returned data (amount, invoice due date, total per currency). This clearly distinguishes it from sibling tools like schedule_get, schedule_list, and schedule_history, which focus on individual schedules or different views.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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: when you need an aggregate view of upcoming due occurrences across all active schedules within a horizon. It does not explicitly name alternatives or state exclusions, so it stops short of a fully explicit routing guide, but the intended use is strongly implied.

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

schedule_updateUpdate a scheduleA

Change one schedule by id: client, items, currency, cadence, dates, due_days, notes or auto_generate. Only the fields you pass change. Periods already invoiced are never re-issued, so a new amount applies to future ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
everyNoHow often to bill: "weekly", "monthly", "quarterly", "yearly", or {days: 10}. Month steps keep the start date's day of month and clamp it to shorter months, so a schedule starting on the 31st bills on the 28th/29th in February and back on the 31st in March
itemsNo
notesNo
clientNo
currencyNo
due_daysNo
end_dateNonull clears the end date
tax_noteNoReplace the tax reason carried onto every future generated invoice. Pass an empty string to clear it
anchor_dayNoPro
start_dateNo
end_of_monthNoPro
auto_generateNo

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses two important behavioral traits: partial updates and the fact that already-invoiced periods are never re-issued, with new amounts applying only to future periods. This adds meaningful context beyond the annotations, which only indicate non-read-only and non-idempotent behavior. 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?

The description is two sentences with no filler. It front-loads the purpose and scope, then states the critical invariants. 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?

For a 13-parameter mutation tool with no output schema and minimal annotations, the description provides the key update semantics and the invoicing invariant, but it leaves many field-level details and return/error behavior to inference. It gives a solid first-order understanding without being fully operationally 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 low at 38%, so the description carries part of the parameter-semantics burden. It lists the mutable fields and adds the valuable partial-update rule, but it does not explain fields like due_days, auto_generate, client, or currency beyond their names. This is adequate but not fully compensating for the schema gaps.

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

Purpose5/5

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

The description starts with 'Change one schedule by id', giving a specific verb and resource, and then enumerates the editable fields. This clearly distinguishes the tool from siblings like schedule_create, schedule_delete, and schedule_pause 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?

The description clearly implies an update-to-existing-schedule use case through 'by id' and 'only the fields you pass change'. It does not explicitly name alternatives such as schedule_create for new schedules or schedule_pause/schedule_resume for state changes, so exclusion 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.

sheet_add_columnAdd a columnA

Call this tool to add a computed column and save the result to a NEW file; the source is never modified unless out_path points at it. Returns the new file path, the row count and a preview of the first rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the new column. It must not already exist on the sheet
pathYesPath to the source .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded); it is never modified
sheetNoSheet name; default is the first sheet
valuesNoExplicit values, one per data row, instead of a formula. Missing entries are left blank
formulaNoExpression over the columns of each row, in the same expression language as sheet_query, e.g. "[Qty] * [Unit Price]" or '[Country] = "PL"'. Give either formula or values
decimalsNoRound numeric formula results to this many decimals. Default: the widest decimal count of the columns the formula reads, capped at 2 when they all hold 2 or fewer (money in, money out); otherwise no rounding beyond float cleanup
out_pathNoOutput file; default <source>-plus-<column>.<same ext>. The source file is left untouched unless this points at it

TDQS

A4.3/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond the annotations by explaining that the source file is never modified unless out_path points at it, and by summarizing the return value. It also clarifies the tool creates a new file, which is important given readOnlyHint is false and destructiveHint is 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 two sentences with no fluff: it front-loads the tool's purpose and key safety behavior, then lists the return values. Every sentence 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?

The description is complete for selecting and invoking this tool, especially paired with a fully documented schema. It explains what the tool does, where results go, what safety guarantee applies, and what the caller receives in return.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameter meanings. The description does not add per-parameter semantics beyond the schema, so the baseline score of 3 is appropriate.

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

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 computed column and save the result to a new file. It also distinguishes the tool's core behavior from siblings by emphasizing that the source remains untouched unless out_path points at 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 for when to call this tool: to add a computed column and produce a new file. It does not explicitly name alternatives or exclusion conditions, but the intended use is unmistakable from the first sentence.

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

sheet_convertConvert fileA

Call this tool to convert a sheet between excel (xlsx), csv and json. Writes a new file next to the source unless out_path is given; the source is never modified. Returns the new file path with its row and column counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget format; the default out_path takes this as its extension
pathYesPath to the source .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded); it is never modified
sheetNoSheet to convert; default is the first sheet. Only that one sheet is written
out_pathNoWhere to write; default is the source name with the new extension, next to the source. It must differ from the source path

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already convey readOnlyHint=false and destructiveHint=false, establishing this as a non-destructive write. The description adds valuable context beyond those flags: it writes a new file next to the source by default, guarantees 'the source is never modified', and discloses the return payload (new file path with row and column counts). This is consistent with the annotations and enriches them with concrete behavior 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?

Three sentences with no waste: purpose first, then side-effect behavior, then return value. Each sentence carries distinct information (what it does, where output goes, what comes back), and the canonical 'Call this tool to...' opener front-loads the decision-relevant purpose.

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

Completeness4/5

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

With no output schema, the description correctly compensates by explaining the return value (new file path plus row and column counts). Combined with 100% schema parameter coverage and consistent annotations, an agent has what it needs to invoke correctly. The only minor gap is the unstated relationship to the sheet_load/sheet_unload workflow — it does not say whether the source file must be loaded in the workspace first.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (path, to, sheet, out_path) are already well-documented in the schema. The description adds no parameter-level semantics beyond what the schema states — the 'source is never modified' claim and out_path default behavior are both already present in the schema's parameter descriptions. Baseline 3 applies.

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

Purpose5/5

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

The opening sentence states a specific verb and resource — 'convert a sheet between excel (xlsx), csv and json' — which clearly differentiates this tool from siblings like sheet_read, sheet_write, sheet_load, and sheet_add_column. An agent can immediately tell this is a format-conversion tool, not a read/write/query 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?

'Call this tool to convert a sheet between excel (xlsx), csv and json' provides an explicit trigger condition for when to invoke it. However, it does not name alternatives or state when NOT to use it (e.g., no mention that in-place editing should use sheet_write). The context is clear but lacks explicit exclusions.

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

sheet_findFind textA

Call this tool to search every cell of a spreadsheet or CSV for text; built-in file readers cannot parse spreadsheets. Matching is case insensitive. Returns cell addresses with a preview of the row each hit is on.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded)
textYesText to look for; matched case insensitively anywhere inside a cell. Up to 200 hits are returned
sheetNoSheet name; default searches every sheet

TDQS

A4.2/5.0
Behavior4/5

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

The description adds useful behavioral details beyond the annotations: matching is case insensitive, and it returns cell addresses with a row preview. Since annotations provide no positive safety signal and the tool is a search operation, this is reasonably transparent, though it could have explicitly stated it does not modify the file.

Agents need to know what a tool does to the world before 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 and front-loads the core purpose with 'Call this tool to search every cell...' followed by a brief rationale and key behavioral details. Every sentence 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.

Completeness4/5

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

For a simple search tool with full schema coverage, the description adequately explains return shape (cell addresses with row preview) and matching behavior. It is slightly incomplete in that it does not describe error conditions or explicitly confirm no side effects, but these are minor for this operation.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema fully documents all three parameters. The description adds high-level behavior but does not materially extend parameter-level meaning beyond what the schema already provides, meriting the baseline 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 a specific action: 'search every cell of a spreadsheet or CSV for text.' This clearly distinguishes the tool from siblings like sheet_read and sheet_query, which read or query structured data rather than doing a raw cell-by-cell text search.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: when searching spreadsheets for text, noting that 'built-in file readers cannot parse spreadsheets.' It does not explicitly name alternative sibling tools or state when not to use it, so it misses the top tier of explicit exclusions.

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

sheet_infoSpreadsheet overviewA

Call this tool for any spreadsheet or CSV file path; built-in file readers cannot parse spreadsheets and must not be used for them. Start here: sheet names, size, header row, column types and samples.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded)

TDQS

A3.8/5.0
Behavior3/5

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

With all annotations false, the description carries the full burden and does list the return content (sheet names, size, header row, column types, samples). However, it says nothing about whether the tool modifies anything, requires special permissions, or how it handles invalid paths, so behavioral disclosure is only partial.

Agents need to know what a tool does to the world before 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 with no filler. The routing instruction and the prohibition on built-in readers come first, followed by a compact list of the output's contents, making it easy for an agent 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 simple one-parameter info tool with no output schema, the description adequately states what the agent will get. It could be more complete by noting that the tool is read-only or what happens on missing/invalid files, but those are minor gaps 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?

The single path parameter is 100% covered by the input schema, including accepted extensions and tilde expansion. The description only restates 'any spreadsheet or CSV file path', adding no syntax, formatting, or usage details beyond the schema, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly defines the tool as a spreadsheet/CSV overview entry point, stating exactly what it returns: sheet names, size, header row, column types, and samples. It distinguishes itself from built-in file readers, but does not explicitly route between sibling sheet_* tools, so it falls just 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 Guidelines4/5

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

It explicitly says to call this tool for any spreadsheet or CSV file path and forbids using built-in readers for them, which is a strong when-to-use/when-not-to-use rule. It also positions the tool as 'start here', but it does not give explicit conditions for preferring siblings like sheet_read or sheet_stats over this tool.

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

sheet_queryFilter, group and sort rowsA

Call this tool for any spreadsheet or CSV file path; built-in file readers cannot parse spreadsheets and must not be used for them. Filter, group, aggregate and sort in one call; never hand sums over sheet_read rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
asNo
pathYesPath to the .xlsx or .csv file
sortNoSort column; may be an aggregate alias such as total_units
limitNoDefault 100
sheetNo
whereNoFilter, e.g. [Qty] >= 5 AND ([Status] = "open" OR [Status] = "new")
selectNoColumn names to return; default all (with group_by, defaults to the group columns plus the aggregates)
group_byNoGroup rows by these columns before aggregating, e.g. ["Rep"] or ["Region","Rep"]
aggregateNoAggregates per group, e.g. [{"col":"Units","fn":"sum","as":"total_units"}]. Defaults to a row count when group_by is given.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations are present but sparse, and the description adds workflow-level behavior (everything in one call, no need to read rows and aggregate manually). However it says nothing about side effects, output size/pagination beyond the schema's limit default, or cost, and it does not resolve the surprising readOnlyHint=false/idempotentHint=false flags for what is functionally a query operation.

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

Conciseness5/5

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

Two sentences, zero filler. The first sentence is front-loaded with the routing instruction (when to use this tool and which tools to avoid), and the second packs the operation set plus a do-not-workaround rule. 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?

With 9 parameters including nested objects and no output schema, the description covers selection/routing well but is silent on return shape, pagination behavior at the 100-row default, and error/edge cases (missing sheet, bad column). Given the annotations carry some safety signal, it is adequate but not complete for a parameter-heavy 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 78% and the schema already carries rich per-parameter detail (where-clause syntax example, group_by examples, aggregate alias semantics, limit default). The description restates the capabilities at a high level but adds no syntax or interaction detail (e.g. how select interacts with group_by) beyond what the schema provides, so the baseline 3 applies.

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

Purpose5/5

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

The description names a concrete capability set — filter, group, aggregate, sort — over a concrete resource (any spreadsheet or CSV file path), and the title reinforces the row-level scope. It also implicitly separates itself from the generic row reader via 'never hand sums over sheet_read rows', so an agent can identify the right tool 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?

It gives explicit positive and negative routing: call this for any spreadsheet/CSV path, do NOT use the built-in file readers because they cannot parse spreadsheets, and do the aggregation here rather than summing sheet_read rows. Both the when-to-use and the when-not-to-use cases are stated with the alternative named.

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

sheet_readRead rowsA
Read-onlyIdempotent

Call this tool for any spreadsheet or CSV file path; built-in file readers cannot parse spreadsheets and must not be used for them. Reads rows as a table, JSON or CSV; page with limit/offset or an A1 range.

ParametersJSON Schema
NameRequiredDescriptionDefault
asNoOutput format, default table
pathYes
limitNoRows to return, default 100
rangeNoA1 range such as A1:D50; overrides limit/offset
sheetNoSheet name; defaults to the first sheet
offsetNoRows to skip, default 0

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 as read-only, idempotent, and non-destructive, so the description does not need to repeat safety traits. It adds useful behavioral context by explaining raw row reading, supported output formats, and pagination via limit/offset or an A1 range.

Agents need to know what a tool does to the world before 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 tightly packed sentences: the first provides the critical routing rule, and the second summarizes output formats and pagination options. Every sentence contributes value with no repetition 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 read tool with no output schema, the description gives enough to understand what it returns (rows as table, JSON, or CSV) and how to page through results. It does not specify the exact returned JSON/table shape or mention the sheet parameter, but the high-quality schema fills most of that 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 high at 83%, and the schema already documents as, limit, range, sheet, and offset with defaults and override behavior. The description mostly echoes these concepts without adding meaningful new parameter semantics beyond clarifying that path refers to spreadsheet/CSV files.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: it reads rows from spreadsheet or CSV file paths and supports table, JSON, or CSV output. It distinguishes itself from built-in file readers, though it does not explicitly differentiate from sibling sheet tools such as sheet_query or sheet_load.

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 when-to-use rule ('Call this tool for any spreadsheet or CSV file path') and an explicit when-not-to-use rule for built-in file readers, which cannot parse spreadsheets. This is direct routing guidance with a named alternative class of functionality.

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

sheet_statsColumn statisticsA

Call this tool for any spreadsheet or CSV file path; built-in file readers cannot parse spreadsheets and must not be used for them. Whole-column statistics: count, empty, distinct, min, max, sum, mean, median.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sheetNo
columnsNoLimit to these columns; default all

TDQS

A3.5/5.0
Behavior3/5

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

The description lists the statistics returned, providing some output expectation, but it does not state whether the operation is read-only, how errors like missing files are handled, or the response format. Annotations are all false, so they provide no safety or side-effect 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 carry the full message with no filler; the usage directive is front-loaded and the statistic list is compact. 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?

Core purpose and output statistics are clear, but the definition is incomplete for an agent: it lacks sheet parameter semantics, output format, and read-only/side-effect guarantees. No output schema exists, so the description should carry more of this burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 33%, and the description only adds meaning to path by allowing spreadsheet or CSV paths; columns already has a schema description. The optional sheet parameter is never explained, and no guidance is given about how it applies to CSV files.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 operation: computing whole-column statistics (count, empty, distinct, min, max, sum, mean, median) for spreadsheet or CSV paths. It distinguishes the tool from built-in file readers, but it does not explicitly differentiate it from sibling sheet_* tools like sheet_read or sheet_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 explicitly says to call this tool for any spreadsheet or CSV file path and states that built-in file readers cannot parse spreadsheets and must not be used. This is clear usage context, though it does not discuss when to prefer sheet_query/sheet_read or when not to use this tool.

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

sheet_writeWrite rowsA

Call this tool to write rows to an xlsx, csv, tsv or json file; the extension of out_path picks the format. mode is new_file, append or overwrite. Other sheets are kept. Free: 500 rows per file.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesnew_file writes a brand new file and refuses to clobber an existing one; append adds the rows under the existing data; overwrite replaces the file contents
pathYesSource file for append/overwrite, or the intended file for new_file (~ is expanded)
rowsYesArray of objects, whose keys become the headers, or an array of arrays with the header row first
sheetNoSheet to write; default is the first sheet of the source, or "Sheet1" for a new file. Other sheets of an existing workbook are kept unchanged
out_pathNoWhere to write; default is a new file next to the source for new_file, or the source itself for append/overwrite. The output format follows this extension: .xlsx, .csv, .tsv or .json. An extension is required

TDQS

A4/5.0
Behavior4/5

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

The annotations already signal a mutating, non-idempotent, non-open-world operation, so the description does not need to restate that. It adds useful behavioral detail beyond the annotations: "Other sheets are kept" clarifies side effects on existing workbooks, and "Free: 500 rows per file" discloses a quota constraint. No contradiction with the annotations 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.

Conciseness5/5

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

The description is three short sentences with no filler. It front-loads the core action, then packs the most decision-relevant facts—format selection, modes, preservation of other sheets, and row quota—into compact follow-up statements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 write tool with a rich schema and no output schema, the description provides the key operational context: supported formats, mode choices, non-destructive effect on other sheets, and file-size limits. It does not describe the return value or error behavior, but the schema covers parameter semantics sufficiently for an agent to invoke 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 100%, with detailed explanations for path, rows, mode, sheet, and out_path. The description mostly summarizes the mode enum and format selection rather than adding new meaning, so the baseline of 3 is appropriate; it does not need to compensate for schema gaps.

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

Purpose5/5

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

The description states a specific verb and resource: "write rows to an xlsx, csv, tsv or json file." It also clarifies that the output format is chosen by the extension of out_path, which distinguishes it from sibling read/query/convert tools. The name and title align tightly with this described behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 opens with "Call this tool to write rows," which gives a clear general context for when the tool applies. However, it does not name alternatives, state when not to use it, or explain how it differs from sibling tools like sheet_load, sheet_convert, or sheet_add_column. Usage 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.

summary_clientClient summaryA
Read-onlyIdempotent

All-time totals for one client/project: hours, entry count and billable amount, with a per-day breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientYesClient or project name. A partial name matching exactly one project resolves to it.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. With no output schema, the description usefully discloses the return contents (hours, entry count, billable amount, per-day breakdown), though it says nothing about behavior for a non-matching or ambiguous client name.

Agents need to know what a tool does to the world before 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 names the scope first and the returned metrics second, 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 one-parameter read tool with rich annotations, the definition covers scope and output contents, the latter compensating for the missing output schema. It is only slightly short of complete because it omits how ambiguous or non-matching client names are handled.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is fully documented, including the partial-name resolution rule. The description merely echoes 'client/project' without adding format or matching detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('All-time totals for one client/project') plus the exact metrics returned, and the 'All-time' scope implicitly contrasts with the sibling summary_day and summary_week tools. It does not explicitly name those siblings, so an agent must infer the scoping distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 'all-time' framing implies when this is preferable to the day/week summaries, but there is no explicit when-to-use statement, no exclusion, and no named alternative. 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.

summary_dayDaily summaryA
Read-onlyIdempotent

Total hours logged for one calendar day (local date, default today), broken down per project.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoLocal date YYYY-MM-DD. Default: today.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered; the description adds useful non-structured detail by disclosing the aggregation shape (per-project breakdown) and the default-resolution rule. It stops short of mentioning whether running timers are counted or how rounding works.

Agents need to know what a tool does to the world before 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, default, and output shape all 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 simple read-only aggregate with rich annotations and no output schema, the description plus schema is largely sufficient. Minor gaps remain around timezone/'local' semantics and whether in-progress timers contribute to the total.

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

Parameters3/5

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

Schema coverage is 100% and the description's 'local date, default today' simply restates the schema's own parameter description verbatim, adding no extra syntax, format, or edge-case meaning. Baseline 3 is appropriate when the schema does all the 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?

States a specific verb+resource ('Total hours logged') with an explicit scope ('one calendar day') and output granularity ('broken down per project'). The day-scope implicitly separates it from summary_week, though no sibling is named outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 narrow scope (one calendar day, default today), but there is no explicit when-to-use guidance and no mention of when to prefer summary_week or summary_client instead. An agent must infer the routing decision.

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

summary_weekWeekly summaryA
Read-onlyIdempotent

Total hours logged in the week containing today (Mon-Sun, local dates), broken down per project.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world scope, so the safety profile is covered. The description adds genuine behavioral detail beyond that: the week boundary rule (Mon-Sun, local dates, week containing today) and the per-project grouping. It still omits anything about data freshness, whether zero-hour projects appear, or billed/unbilled treatment.

Agents need to know what a tool does to the world before 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 metric, then the time window, then the grouping. Every clause earns its place and nothing is repeated from the title 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 zero parameters and no output schema, the description must convey the return shape, and it does: total hours, weekly window, per-project breakdown. Small gaps remain around output format (decimal hours vs 'H:MM'), empty-week behavior, and whether all projects or only active ones are listed, but for a zero-arg read tool this 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?

The tool takes no parameters, so the schema carries no semantic burden and the baseline is 4. The description correctly introduces no parameter prose, and the only 'argument-like' content — the date window — is hard-coded behavior rather than an input.

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

Purpose4/5

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

States a concrete resource and metric ('Total hours logged'), plus the exact time window ('week containing today, Mon-Sun, local dates') and the breakdown dimension ('per project'). The week scope implicitly separates it from summary_day and summary_client, but those siblings are never named, so differentiation requires inference from 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?

No explicit when-to-use, when-not-to-use, or alternative routing is given. Usage is only implied by the resource itself — an agent must infer that this is the weekly roll-up versus summary_day, summary_client, or report. Adequate but leaves routing decisions to the caller.

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

tailor_to_jobGap analysis against a postingA

READ-ONLY gap analysis against a posting: writes nothing, changes nothing. Returns matched keywords, missing ones, a coverage figure and orderings of facts you already stated. Act on it with resume_create.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many keywords to extract from the posting. Default 30.
variantNo
job_descriptionYesPaste the posting. The free tier reads up to 2,000 characters; Pro reads any length.

TDQS

A4.1/5.0
Behavior5/5

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

The description explicitly and prominently discloses read-only behavior: 'writes nothing, changes nothing.' This is especially valuable because annotations do not assert readOnlyHint. It also lists the return payload components, giving the agent a clear behavioral model. Although readOnlyHint is false in annotations, this reads as an absent hint rather than a positive 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 short and front-loaded with the most decision-relevant fact (read-only). The redundancy of 'READ-ONLY' plus 'writes nothing, changes nothing' costs a minor point, but overall every sentence earns its place and the follow-up action is stated cleanly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, safety, outputs, and the next sibling to call, which is strong for a three-parameter analysis tool with no output schema. However, the variant parameter is completely unexplained, and the phrase 'facts you already stated' is vague about prerequisites or how a resume's facts are supplied. These are meaningful gaps for an agent deciding how to invoke 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 coverage is only 67%: limit and job_description have schema descriptions, but variant has none. The description adds no parameter-level meaning and does not compensate for the undocumented variant field. The phrase 'against a posting' only echoes job_description's existing schema description rather than enriching 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 states a clear, specific operation: gap analysis against a job posting, with concrete outputs (matched keywords, missing ones, coverage figure, orderings). It also disambiguates from the sibling resume_create by framing that tool as the follow-up action. This is a strong, distinct 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?

The description implies the context: run this analysis against a posting before acting with resume_create. It names the relevant sibling and frames the sequencing. It does not explicitly state when not to use the tool, but since no other sibling performs gap analysis, the exclusions are not necessary.

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

target_checkCheck weekly hours goalA
Read-onlyIdempotent

Compare hours logged this week (Mon-Sun, local dates) against the weekly target from target_set.

ParametersJSON Schema
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 readOnly, idempotent, closed-world, non-destructive behavior, so the safety profile needs no restatement. The description adds genuinely useful behavior beyond that: the comparison window is explicitly Mon–Sun on local dates, and the target value is sourced externally from target_set rather than passed in.

Agents need to know what a tool does to the world before 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 action and its operands, with no filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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-parameter, fully annotated read tool with no output schema, the description covers what is compared and over what window. It is slightly incomplete on what the comparison actually returns (surplus/deficit, status) and on the behavior when no target has ever been set via target_set.

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 zero parameters, so the baseline is 4. The description goes slightly further by defining the implicit temporal scope (this week, Mon–Sun, local dates) that would otherwise be ambiguous for a parameterless 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 (compare), the two resources being compared (hours logged this week vs. the weekly target), and names the sibling that supplies the target (target_set). An agent can distinguish this from summary_week or target_set 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 clearly establishes the context for use — checking progress against a weekly goal — and names the prerequisite source (target_set). It does not, however, state any exclusions or contrast itself with the other weekly-aggregation siblings such as summary_week, leaving the agent to infer that distinction.

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

target_setSet weekly hours goalA
Idempotent

Set a weekly hours goal used by target_check. Stored locally.

ParametersJSON Schema
NameRequiredDescriptionDefault
weekly_hoursYesTarget hours per week, e.g. 32

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare non-read-only, idempotent, non-destructive, and closed-world semantics, so the safety profile is covered. 'Stored locally' usefully adds persistence scope beyond the annotations, but the description is silent on whether an existing goal is overwritten or how the setting is scoped (per workspace/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?

Two short sentences, front-loaded with the action and resource, with no filler. Every clause earns its place and 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 single-parameter setter with full annotation coverage and no output schema, the description covers what the tool does and where the value is stored. Minor gaps remain around overwrite behavior and scoping, but 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.

Parameters3/5

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

Schema description coverage is 100% and weekly_hours is documented with type, example (32), and an exclusiveMinimum constraint. The description adds no unit, range, or formatting detail beyond what the schema already provides, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Set') and resource ('weekly hours goal'), and ties it to the sibling that consumes it ('used by target_check'), which separates it from the family of entry_* and summary_* tools. It stops short of explicitly contrasting itself with target_check's read behavior, so it is clear but not maximally differentiated.

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

Usage Guidelines3/5

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

'Used by target_check' implies the context in which the value matters, which lets an agent infer this is the write counterpart to that check. It never states when to call it, whether it is required before target_check, or what happens if no goal is set, so 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.

timer_startStart timerA

Start a stopwatch for work on a project and return the start time. Only one runs at a time: a new one stops and logs the previous, naming it. rate is an hourly rate in MAJOR units for this timer only.

ParametersJSON Schema
NameRequiredDescriptionDefault
rateNoHourly rate for this timer only; a number (90) or the words the user said, e.g. rate '90 euros an hour'. Defaults to the project rate set by project_set_rate.
tagsNoFree-form tags, e.g. ['dev','meeting']
taskNoWhat you are working on right now
projectYesProject or client name, e.g. 'acme-website'. A partial name that matches exactly one existing project is used as that project.
currencyNoCurrency of the rate: EUR, USD, GBP, PLN, or words like 'euros'. Defaults to the project currency, else USD.

TDQS

A4/5.0
Behavior4/5

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

With all annotations set to false, the description carries the full burden of behavioral disclosure. It adds a key non-obvious behavior: starting a new timer stops and logs the previous one. This goes beyond the schema and gives the agent important side-effect information.

Agents need to know what a tool does to the world before 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, tightly written, with the primary purpose front-loaded. Every sentence contributes meaning: purpose, behavior, and a key parameter clarification. 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 core behavior, the single-run constraint, and the return value (start time). It does not detail error handling or the exact naming convention for the logged previous timer, but these are secondary. Given the schema covers parameter specifics, the description is adequate for an agent to invoke 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 coverage is 100%, so the schema already documents all parameters. The description adds only a clarification about 'MAJOR units' for the rate parameter, which is useful but minimal. It does not elaborate on tags, task, currency, or project beyond what the schema provides.

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

Purpose5/5

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

The description clearly states a specific action: starting a stopwatch for project work and returning the start time. It also distinguishes itself from siblings by noting that only one timer runs at a time, implying this tool supersedes any existing timer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 start a timer) and notes that it stops the previous one, but it does not explicitly mention alternatives like timer_stop for stopping without starting, or when not to use this tool. 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.

timer_statusTimer statusA
Read-onlyIdempotent

Report the running timer and today's total hours. Today is the local calendar day, so a timer started at 23:30 yesterday contributes only the minutes since midnight. No arguments, and it writes nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description adds value beyond the annotations by clarifying that 'Today is the local calendar day' and that a timer started before midnight contributes only post-midnight minutes. This edge-case behavioral detail is not present in the annotations and helps the 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.

Conciseness5/5

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

Three sentences, each with a distinct purpose: state the output, explain the calendar-day nuance, and confirm no side effects. It is front-loaded with the main function and contains no filler or redundant 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?

For a zero-parameter read-only tool, the description fully covers what is reported, how the day boundary is handled, and that no state is changed. Annotations already cover safety, and the description supplies the operational detail needed for correct invocation and interpretation.

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

Parameters4/5

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

The input schema has zero parameters, so there is nothing for the description to explain. The description does explicitly state 'No arguments,' which reinforces the schema and removes any doubt for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 the running timer and today's total hours.' It clearly identifies the tool's output and distinguishes it from sibling tools like timer_start and timer_stop by emphasizing it is a status read, not a mutation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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: to check current timer state and accumulated hours. It does not explicitly name alternatives or exclusions, but the context of sibling tools and the explicit 'No arguments' and 'writes nothing' phrases effectively signal read-only usage.

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

timer_stopStop timerA

Stop the running timer and log it as one entry. Returns the duration, the money at the rate in force and the new entry id. With no timer running it says so and writes nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional note stored with the entry

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 the actual effects: it logs the timer as one entry, returns duration, money, and the new entry id, and does nothing if no timer is running. This gives the agent a solid understanding of side effects and edge-case 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-load the core action, then cover return values and the no-timer behavior. There is no filler or redundant information.

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

Completeness5/5

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

For a simple tool with one optional parameter and no output schema, the description covers the main scenario, the return values, and the edge case where no timer is running. Nothing material 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.

Parameters3/5

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

The input schema already documents the optional 'note' parameter with 100% coverage. The description does not add any extra meaning about the parameter, so it meets the baseline but provides no additional value 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 specific verb ('Stop'), a precise resource ('the running timer'), and the resulting action ('log it as one entry'). It also mentions the new entry id, which clearly separates it from sibling tools like timer_start, timer_status, and entry_add.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 timer is running and should be stopped and logged. It also covers the no-timer case by saying it writes nothing, but it does not explicitly name alternatives such as timer_start or timer_status.

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

variables_listList the variables a selection needsA
Read-onlyIdempotent

List every {{variable}} the clauses you name use, and which clause uses each, so the facts are gathered before contract_assemble leaves bracketed prompts. Reads only; a title matching several is refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
clause_idsYesClause ids or titles

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description reinforces this with 'Reads only.' It adds behavioral value beyond annotations by disclosing that ambiguous title matches cause a refusal, which is not present in the structured metadata. This helps the agent anticipate error 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 description is a single, front-loaded sentence that packs action, purpose, and a behavioral constraint with no filler. Every clause earns its place, and the critical workflow hint appears before the refusal caveat.

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

Completeness4/5

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

For a simple read-only tool with one parameter and strong annotations, the description covers the core workflow trigger (before contract_assemble), the output concept (which variable is used by which clause), and a notable edge case (ambiguous titles refused). It does not detail return formatting or error handling for missing ids, but the tool's simplicity and annotation coverage make that gap acceptable.

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

Parameters4/5

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

Schema description coverage is 100% for clause_ids, so the baseline is 3. The description adds meaning by explaining the purpose of these ids ('the clauses you name') and by clarifying that titles are accepted but rejected when ambiguous ('a title matching several is refused'), which goes beyond the schema's 'Clause ids or titles.'

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

Purpose5/5

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

The description states a specific verb and resource: 'List every {{variable}} the clauses you name use, and which clause uses each.' It clearly differentiates itself from siblings like contract_assemble by referencing its role in gathering facts before assembly, and from clause_get/clause_list by focusing on variable dependencies rather than clause 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 gives clear context for when to use the tool: 'so the facts are gathered before contract_assemble leaves bracketed prompts.' It also notes a key constraint ('a title matching several is refused'). However, it does not explicitly name alternative tools or state when not to use this one, though the timing cue is strong enough for an agent to infer the intended workflow.

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

watch_addWatch a priceA

Call this tool for any product URL; fetching the page with a generic web tool returns raw HTML without the price. Starts tracking it: first observation stored, optional target, re-read by watch_refresh. Free: 3 watches.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesProduct page URL
labelNoShort name for this item
currencyNoISO code such as USD or EUR, if the page does not say
target_priceNoReport this watch in alerts_pending when the price is at or below this (positive number)

TDQS

A4/5.0
Behavior4/5

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

With all annotations being false, the description carries the burden and discloses key side effects: it starts tracking, stores a first observation, supports an optional target, and is subject to a free limit of 3 watches. This gives the agent a good understanding of the state changes and quota implications.

Agents need to know what a tool does to the world before 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 earning its place: the first explains why to use it, the second states the core behavior, and the third gives a critical quota detail. It is front-loaded with the primary use case and contains 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 tool with 4 parameters, no output schema, and minimal annotations, the description provides enough context to call it correctly: it explains the URL input, the initial observation, optional target, and the watch_refresh relationship. It does not cover failure modes or response format, but these are not strongly required given 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.

Parameters3/5

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

The input schema already has 100% coverage, so the baseline is 3. The description adds minimal parameter context by mentioning 'optional target' and referencing re-reading via watch_refresh, but it does not deeply explain the semantics of url, label, currency, or target_price beyond what the 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 clearly states that the tool tracks a product URL by storing the first price observation, and contrasts itself with a generic web tool that returns raw HTML without the price. It does not explicitly name siblings like price_add_manual, so it is clear but not fully differentiated from related 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 a clear when-to-use directive ('Call this tool for any product URL') and explains why it should be used instead of a generic web fetch because that returns raw HTML without the price. It also mentions that re-reading is done via watch_refresh, providing a workflow, but does not mention conditions where alternatives like price_add_manual should be used.

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

watch_listList watchesA
Read-onlyIdempotent

Show every tracked item with current and previous price, min, max, change %, target, confidence and last check, plus free-tier use. Prices are as of the last watch_refresh, never live; nothing is fetched.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description's added contribution is the 'never live; nothing is fetched' disclosure, which tells agents this tool performs no network I/O and returns cached data. This is meaningful behavioral context beyond the structured hints.

Agents need to know what a tool does to the world before 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 field list is front-loaded and the freshness caveat follows. Every clause adds information needed to invoke or interpret 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 parameterless, read-only list tool, the description supplies both the return contents and the data-freshness caveat. No output schema is present, but the enumerated fields make the response shape predictable.

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 there is no schema semantics for the description to supplement. Baseline 4 is appropriate because the description adds no parameter claims but none are 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?

Opens with 'Show every tracked item with current and previous price...' – a specific verb, resource, and exact field list. It clearly identifies this as a read-only listing tool and differentiates it from mutation siblings like watch_add, watch_remove, and watch_refresh by emphasizing 'nothing is fetched.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 caveat that prices are as of the last watch_refresh and never live gives agents clear context for when this cached view is appropriate. It does not name alternatives or state exclusions, but the staleness warning is sufficient guidance for a simple list operation.

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

watch_refreshRefresh pricesA

The only tool that re-reads prices: it re-fetches one watch or all, appends observations and returns current, previous, min, max, change % and target hits. A page that fails is listed; then read alerts_pending.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoWatch id or URL to re-fetch. Omit and set all=true to refresh everything. Nothing runs in the background, so call this whenever the user asks about prices, drops or alerts - typically once at the start of a session, then read alerts_pending.
allNoRefresh every watch in one call (Pro; on free, refresh one id at a time)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only state readOnlyHint=false, openWorldHint=false, idempotentHint=false, destructiveHint=false, so the description adds real behavioral value by disclosing that observations are appended (a side effect) and that failures are listed for follow-up. It also explains what the tool returns, which is useful given there is no output schema. It stops short of discussing rate limits or authorization, but those gaps are minor.

Agents need to know what a tool does to the world before 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 deliver the core purpose, behavior, return values, failure handling, and follow-up action without wasted words. The critical 'only tool that re-reads prices' message is front-loaded, and each clause contributes necessary information.

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

Completeness5/5

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

Given no output schema, the description adequately covers return values and failure behavior. It differentiates the tool from siblings, explains the state-changing 'appends observations' behavior, and routes the agent to alerts_pending. With only two optional parameters fully documented in the schema, 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.

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents both parameters in detail, including the 'id or URL' format, the 'all=true' behavior, and the free-tier restriction. The main description only repeats 'one watch or all' and adds no additional parameter-level nuance, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('re-reads prices') and resource ('one watch or all'), and explicitly claims it is 'the only tool' that does this, distinguishing it from siblings like price_check and price_history. It also enumerates the returned fields (current, previous, min, max, change %, target hits), making the tool's 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 Guidelines5/5

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

The description positions the tool as the sole mechanism for refreshing prices and instructs the agent to follow up with alerts_pending when a page fails. The schema's id description further reinforces when to call ('whenever the user asks about prices, drops or alerts') and that nothing runs in the background, providing 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.

watch_removeRemove a watchA
Destructive

Call this tool to stop tracking one item, by watch id or URL. Its whole price history is deleted and cannot be recovered, so re-adding starts empty. A key matching no watch is refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoWatch id from watch_list
urlNoURL of the watch, if you do not have the id

TDQS

A4.5/5.0
Behavior5/5

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

The description explicitly warns that the entire price history is deleted and cannot be recovered, and that re-adding starts empty – which goes well beyond the annotation's destructiveHint=true. It also states that a non-matching key is refused, a failure condition an agent needs to know. This aligns with annotations, and 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?

Three short sentences, each earning its place: action+parameters, irreversibility consequence, and error condition. The purpose is front-loaded in the first sentence. No filler or repetition of structured fields.

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 two-parameter destructive tool with annotations already present, the description covers the essential call semantics, the lasting side effect, and the failure mode. It does not describe the return value, but with no output schema and a straightforward removal, that is not required. The description is 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.

Parameters3/5

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

Schema coverage is 100%, so the description is not required to document parameter syntax. It does add the semantic that id and URL are alternative means of identifying the watch, and that a key must match an existing watch. However, the schema already conveys the 'if you do not have the id' relationship, so the description adds marginal 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 opens with 'Call this tool to stop tracking one item, by watch id or URL,' which clearly states the verb, the resource, and the two acceptable keys. This distinguishes it from siblings like watch_add and watch_list, and the title aligns with the description. No ambiguity remains 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?

It tells the agent when to call it: when you want to stop tracking an item, and it offers two input methods (id or URL). It does not explicitly name alternatives or exclusions, but the context of 'stop tracking' is sufficiently clear. The error note about non-matching keys is helpful for understanding 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv0.22.9
    • Addedduplicate_invoice_check
    • Addedentry_log
    • Addedreport_delete
    • Addedreport_export_csv
    • Addedreport_get
    • Addedreport_list
    • Addedreport_page
    • Addedsummary_client
    • Addedsummary_day
    • Addedsummary_week
    • Addedtarget_check
    • Addedtarget_set
  2. 117 tool updatesv0.20.0
    • First observedalerts_pending
    • First observedbusiness_days
    • First observedcache_status
    • First observedcalendars_list
    • First observedclause_add
    • First observedclause_delete
    • First observedclause_export
    • First observedclause_get
    • First observedclause_import
    • First observedclause_list
    • First observedclause_search
    • First observedclause_update
    • First observedclient_add
    • First observedclient_delete
    • First observedclient_list
    • First observedconflicts
    • First observedcontacts_list
    • First observedcontacts_set
    • First observedcontract_assemble
    • First observedcontract_create
    • First observedconvert
    • First observedconvert_many
    • First observedconvert_time
    • First observedcover_letter_create
    • First observedcurrencies_list
    • First observeddoc_create
    • First observeddoc_fill_template
    • First observeddoc_from_markdown
    • First observeddoc_read
    • First observeddoc_to_html
    • First observeddocx_business_set
    • First observeddst_changes
    • First observedentry_add
    • First observedentry_delete
    • First observedentry_edit
    • First observedentry_list
    • First observedentry_mark_billed
    • First observedevent_export
    • First observedevent_to_time_entry
    • First observedevents_list
    • First observedevents_search
    • First observedexport_csv
    • First observedfind_meeting_slots
    • First observedforecast
    • First observedfree_busy
    • First observedfx_rates_for
    • First observedics_create
    • First observedics_forget
    • First observedics_import
    • First observedinvoice_business_set
    • First observedinvoice_create
    • First observedinvoice_from_hours
    • First observedinvoice_generate_due
    • First observedinvoice_get
    • First observedinvoice_list
    • First observedinvoice_mark_paid
    • First observedinvoice_pdf
    • First observedinvoice_summary
    • First observedlicense_activate
    • First observedlicense_status
    • First observednext_event
    • First observednow
    • First observedoverdue_report
    • First observedoverlap
    • First observedpdf_count
    • First observedpdf_info
    • First observedpdf_merge
    • First observedpdf_pages
    • First observedpdf_reorder
    • First observedpdf_rotate
    • First observedpdf_split
    • First observedpdf_stamp
    • First observedpdf_text
    • First observedpdf_watermark_business
    • First observedprice_add_manual
    • First observedprice_check
    • First observedprice_history
    • First observedprofile_get
    • First observedprofile_set
    • First observedproject_set_rate
    • First observedproposal_create
    • First observedproposal_update
    • First observedrate_history
    • First observedrate_on
    • First observedrates_latest
    • First observedreport
    • First observedresume_create
    • First observedresume_read
    • First observedresume_to_html
    • First observedresume_to_markdown
    • First observedschedule_create
    • First observedschedule_delete
    • First observedschedule_get
    • First observedschedule_history
    • First observedschedule_list
    • First observedschedule_pause
    • First observedschedule_resume
    • First observedschedule_skip
    • First observedschedule_upcoming
    • First observedschedule_update
    • First observedsheet_add_column
    • First observedsheet_convert
    • First observedsheet_find
    • First observedsheet_info
    • First observedsheet_query
    • First observedsheet_read
    • First observedsheet_stats
    • First observedsheet_write
    • First observedtailor_to_job
    • First observedtimer_start
    • First observedtimer_status
    • First observedtimer_stop
    • First observedvariables_list
    • First observedwatch_add
    • First observedwatch_list
    • First observedwatch_refresh
    • First observedwatch_remove

TDQS

B3/5.0

Scored across 129 tools

Disambiguation3/5

Within each sub-domain tools are fairly distinct, but cross-domain collisions exist: 'report' (timesheet) vs report_list/report_get/report_page/report_export_csv (saved reports / duplicate checks), and invoice_business_set vs docx_business_set both write the same profile. Descriptions are unusually explicit in steering callers ('use X instead'), which rescues an otherwise confusing set, but the overlap remains real.

Naming Consistency2/5

Conventions are mixed: noun_verb ordering (schedule_list, invoice_create, client_add) coexists with verb_noun (watch_add, clause_add, convert_many) and bare nouns/verbs (report, now, convert, conflicts, overlap, forecast). All snake_case, but the verb/noun ordering and the presence of bare names make the pattern unpredictable.

Tool Count1/5

129 tools is far beyond any reasonable single-server surface, even granting it bundles many domains. Each sub-domain (time tracking, invoicing, schedules, sheets, price watches, FX, docx, resumes, timezone, PDF, calendar, duplicate checks) would be its own server, and the aggregate is unmanageable.

Completeness4/5

Coverage is genuinely deep: CRUD/lifecycle exists for clients, invoices, schedules, clauses, watches, sheets, PDFs, docs, calendars and reports, plus cross-linking tools (entry_mark_billed, event_to_time_entry, fx_rates_for). Only minor gaps and a few read-vs-write asymmetries, so it is close to complete for the sprawling scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server for time tracking, project management, and AI-powered memory storage using semantic search. It enables users to log time, manage client billing, and capture shared or personal ideas through integrated tools and team collaboration features.
    1
    -
  • A
    license
    B
    quality
    B
    maintenance
    A flexible proxy server that aggregates multiple backend MCP servers into a single interface using STDIO or SSE transports. It supports dynamic server management via an HTTP API and utilizes namespacing to prevent tool conflicts across connected services.
    3
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A remote MCP server for the Moxie Public API, deployable to Cloudflare Workers. Exposes all 29 documented Moxie endpoints as MCP tools for managing clients, contacts, projects, tasks, invoices, payments, and more.
    -
  • A
    license
    A
    quality
    A
    maintenance
    MCP gateway/proxy: multiplexes tool calls across upstream MCP servers into one aggregated, namespaced catalog and logs every call. Local, single-user, $0/month by default.
    2
    MIT