Frihet MCP Server
The Frihet MCP Server connects AI assistants to the Frihet ERP/business management platform, enabling natural language control over business operations through 31 tools across 6 categories:
Invoicing: Create, list, search, update, and delete invoices with line items, tax rates, due dates, and status tracking
Expenses: Record, categorize, update, and delete business expenses with tax-deductibility tracking
Clients: Maintain a client database with contact info, tax IDs (NIF/CIF), and addresses
Products & Services: Manage a reusable catalog with pricing, SKU, units, and default tax rates for faster invoice/quote creation
Quotes: Create, track, update, and delete quotes/estimates with line items and expiry dates
Webhooks: Configure event-driven notifications for business events like
invoice.paidorexpense.created
Additional capabilities:
Pre-built workflows: Guided multi-step prompts for monthly closing, client onboarding, quarterly tax preparation, overdue invoice follow-ups, and batch expense processing
Static resources: Access Spanish tax rates, filing calendars, expense categories, invoice status flows, and API documentation without extra API calls
Spanish tax compliance: Built-in support for IVA, IGIC, IPSI, and IRPF
Multiple connection options: Local STDIO, remote HTTP endpoint, or OAuth 2.0
AI tool compatibility: Works with Claude Code, Cursor, Copilot, Gemini CLI, and others
Distribution
Channel | Status | Install |
npm | Live |
|
Remote endpoint | Live |
|
Smithery | Live | |
MCP Registry | Live | |
Glama | Live | |
mcp.so | Auto-index (unverified) | mcp.so — indexes from npm + GitHub |
PulseMCP | Auto-index (unverified) | pulsemcp.com — indexes from npm + GitHub |
Cursor Marketplace | Coming soon | |
ChatGPT Apps | Coming soon | |
Anthropic Claude Directory | Coming soon |
Surface truth: the catalogue contains 158 canonical operations. The local full profile serves 163 tool names, 11 resources, and 10 prompts (158 canonical operations plus 5 fiscal aliases). The hosted grouped profile serves 166 tool names, 7 resources, and 10 prompts (the same names plus 3 discovery tools, with API-backed resources kept local-only). The separately reviewed OpenAI profile serves 33 tool names, 0 resources, and 0 prompts. Catalogue membership is not a promise that a backing API is enabled for every workspace.
Related MCP server: Finizi B4B MCP Server
What is this
An MCP server that connects your AI assistant to Frihet. Create invoices by talking. Query expenses in natural language. Manage your entire business from your IDE.
You: "Create an invoice for TechStart SL, 40 hours of consulting at 75 EUR/hour, due March 1st"
Claude: Done. Invoice INV-2026-089 created. Total: 3,000.00 EUR + 21% IVA = 3,630.00 EUR.158 canonical operations. Five fiscal aliases. Ten prompts. The local package serves 11 resources; the hosted Worker deliberately serves the 7 static resources, while API-backed workspace resources remain local-profile only.
Try it instantly (no signup)
Kick the tires with zero setup — no account, no API key:
FRIHET_DEMO=1 npx -y @frihet/mcp-serverIn demo mode the server answers from realistic example fixtures (Spanish invoices with IVA/IGIC, expenses, clients, products, a bank account, and more) — every record uses demo_-prefixed IDs and the server prints a DEMO MODE banner on startup. Nothing is persisted and no network call is ever made. Writes are simulated and fiscal actions (e-invoice, VeriFactu, TicketBAI, FACe, payroll) return a clearly-labeled simulation — never a real submission to any tax authority.
When you're ready for your real data, drop the flag and add your key (app.frihet.io → Settings → API keys). See Install below.
For AI agents
If you are an agent reading this repository rather than a person reading a page, everything you need is machine-readable and generated from the running server — you do not have to parse this README.
What | Where |
Onboarding contract: quickstart per client, auth, safe workflow, human-authority tool lists, error recovery |
|
Per-tool capability truth: |
|
How to behave once connected | the |
Three rules the contract encodes, in short:
Orient before acting.
get_business_contextand thefrihet://tax/ratesresource decide the correct fiscal treatment. Do not recall a Spanish tax rate from memory.Draft, show, stop.
create_invoice,create_quoteandcreate_credit_noteall default tostatus=draft— no fiscal number, no hash, nothing sent to a tax authority. Present the draft and hand back.Human authority is not yours to assume. Any tool with a non-empty
externalSideEffectsreaches a client's inbox, a webhook, money, or AEAT / VeriFactu / TicketBAI / FACe. Several also takeconfirm=true; that flag records a human decision — never set it to satisfy your own plan.
docs/agent-onboarding.json is regenerated from the live surface by npm run generate:agent-onboarding and gated in CI by npm run gate:agent-onboarding, so its tool lists and counts cannot drift from the server.
Install
One-line (Claude Code, Cursor, Copilot, Codex, Windsurf, Gemini CLI, and more)
npx skills add Frihet-io/frihet-mcpClaude Code plugin (skill + MCP server in one install)
This repository is also a Claude Code plugin (frihet-erp): installing it wires up both the business-management skill and the MCP server.
# Try it locally
claude --plugin-dir /path/to/frihet-mcpOnce available in the community marketplace:
/plugin marketplace add anthropics/claude-plugins-community
/plugin install frihet-erp@claude-communitySkill invocation: /frihet-erp:frihet-mcp. The bundled .mcp.json launches @frihet/mcp-server via npx — set FRIHET_API_KEY in your environment (get one at app.frihet.io → Settings → API keys).
Claude Code — one command
claude mcp add frihet -s user -e FRIHET_API_KEY=fri_your_key_here -- npx -y @frihet/mcp-server
claude mcp list # verify: frihet ✓ ConnectedThe CLI owns the config file, so there is nothing to hand-edit and no path to get wrong. (User scope writes ~/.claude.json, not ~/.claude/mcp.json.)
Codex CLI — one command
codex mcp add frihet --env FRIHET_API_KEY=fri_your_key_here -- npx -y @frihet/mcp-server
codex mcp list # verifyCodex config is TOML, not JSON. codex mcp add writes:
[mcp_servers.frihet]
command = "npx"
args = ["-y", "@frihet/mcp-server"]
[mcp_servers.frihet.env]
FRIHET_API_KEY = "fri_your_key_here"Pasting a JSON
mcpServersblock into~/.codex/config.tomlis a TOML parse error that takes down your whole Codex config, not just this server. Use the command above.
Claude Desktop, Cursor, Windsurf, Cline — JSON config
{
"mcpServers": {
"frihet": {
"command": "npx",
"args": ["-y", "@frihet/mcp-server"],
"env": {
"FRIHET_API_KEY": "fri_your_key_here"
}
}
}
}Tool | Config file |
Claude Desktop |
|
Cursor |
|
Windsurf |
|
Cline | VS Code settings or |
The JSON above is identical for these four clients; only the file path changes. Claude Code and Codex are not in this table — they manage their own config through the CLI commands shown above.
Remote (no install)
Use the hosted endpoint at mcp.frihet.io -- zero local dependencies, runs on Cloudflare Workers.
With API key:
{
"mcpServers": {
"frihet": {
"type": "streamable-http",
"url": "https://mcp.frihet.io/mcp",
"headers": {
"Authorization": "Bearer fri_your_key_here"
}
}
}
}With OAuth 2.0 + PKCE (browser-based login, no API key needed):
Clients that support OAuth (Claude Desktop, Smithery, etc.) can connect directly to https://mcp.frihet.io/mcp and authenticate via browser. The server implements the full OAuth 2.1 authorization code flow with PKCE.
Get your API key
Log into app.frihet.io
Go to Settings > API
Click Create API key
Copy the key (starts with
fri_) -- it's only shown once
What you can do
Talk to your ERP. These are real prompts, not marketing copy.
Invoicing
"Show me all unpaid invoices"
"Create an invoice for Acme SL with 10h of consulting at 95/hour"
"Mark invoice abc123 as paid"
"How much has ClientName been invoiced this year?"Expenses
"Log a 59.99 EUR expense for Adobe Creative Cloud, category: software, tax-deductible"
"List all expenses from January"
"What did I spend on travel last quarter?"Clients
"Add a new client: TechStart SL, NIF B12345678, email admin@techstart.es"
"Show me all my clients"
"Update ClientName's address to Calle Mayor 1, Madrid 28001"CRM
"Add a contact to Acme SL: Ana Garcia, CTO, ana@acme.es"
"Log a call with TechStart: discussed Q2 proposal, they're interested in upgrade"
"Add a note to ClientName: prefers invoices in English, payment NET 30"
"Show me all activities for Acme SL"Quotes
"Create a quote for Design Studio: logo design (2000 EUR) + brand guidelines (3500 EUR)"
"Show me all pending quotes"Webhooks
"Set up a webhook to notify https://my-app.com/hook when invoices are paid"
"List all my active webhooks"What to expect
This MCP is a structured data interface -- you describe what you want in natural language, and the AI creates, queries, or modifies business records in Frihet. Most of the 158 canonical operations are CRUD operations over the REST API; the rest are read-only summaries and fiscal/e-invoice actions. Alias and discovery names are counted separately.
Works great:
"Create an invoice for TechStart SL, 40h consulting at 75 EUR/h" --> creates the invoice
"Show unpaid invoices over 1,000 EUR" --> queries and filters
"Log a 120 EUR expense for the Madrid train, category: travel" --> records the expense
"Update client Acme's email to billing@acme.es" --> modifies the recordDoes not do:
OCR or PDF scanning -- you cannot upload an invoice image and have it read
File upload or attachment handling
Image processing of any kind
If you need to digitize paper invoices or receipts, extract the data first (e.g., Claude Vision API, a dedicated OCR service, or manual entry), then use the MCP to create the record:
1. Scan/photograph the invoice
2. Use Claude Vision: "Read this invoice image and extract the vendor, items, amounts, and dates"
3. Then: "Create an expense in Frihet for [extracted data]"Catalogue operations (158)
Invoices (12)
Tool | What it does |
| List invoices with pagination |
| Get full invoice details by ID |
| Create a new invoice with line items |
| Update any invoice field |
| Delete a draft invoice; a sent/paid one is cancelled, not destroyed ( |
| Find invoices by client name, date, or status |
| Email invoice to client (PDF attachment) — reaches a third party, |
| Mark an invoice as paid with optional payment date |
| Get bounded invoice PDF bytes as base64 |
| Get bounded XML or Factur-X PDF bytes for an invoice |
| Create a credit note linked to an existing invoice |
| Apply a late payment fee to an overdue invoice |
Expenses (5)
Tool | What it does |
| List expenses with pagination |
| Get expense details |
| Record a new expense |
| Modify an expense |
| Delete an expense |
Clients (5)
Tool | What it does |
| List all clients |
| Get client details |
| Register a new client |
| Update client info |
| Remove a client |
CRM: Contacts (3)
Tool | What it does |
| List all contacts for a client |
| Add a contact person to a client |
| Remove a contact from a client |
CRM: Activities (2)
Tool | What it does |
| List CRM activities (calls, emails, meetings, tasks) |
| Log a call, email, meeting, or task against a client |
CRM: Notes (3)
Tool | What it does |
| List all notes for a client |
| Add a free-form note to a client |
| Remove a note from a client |
Products (5)
Tool | What it does |
| List products and services |
| Get product details |
| Add a product or service |
| Update pricing or details |
| Remove a product |
Quotes (6)
Tool | What it does |
| List all quotes |
| Get quote details |
| Draft a new quote |
| Modify a quote |
| Delete only a clean draft with no delivery, response, attachment, or conversion evidence; refuse protected drafts; cancel non-drafts ( |
| Email quote to client for acceptance |
Webhooks (6)
Tool | What it does |
| List configured webhooks |
| Get webhook details |
| Register a new webhook endpoint |
| Modify events or URL |
| Remove a webhook |
| Send a test payload to a configured webhook endpoint |
Intelligence (4)
Tool | What it does |
| Full snapshot: profile, plan, recent activity, top clients, current month |
| Monthly P&L: revenue, expenses, profit, tax liability, top clients by revenue |
| Quarterly tax prep: Modelo 303/130 fields, collected vs deductible, liability |
| Clone an invoice for recurring billing (copies items/client/tax, starts as draft) |
E-Invoicing (10)
Tool | What it does |
| Dispatch an invoice in 11 formats (XRechnung, Factur-X, FatturaPA, PEPPOL, Facturae, UBL, CII) via email / Chorus Pro / SDI / PEPPOL / download |
| Poll Hatchet workflow run status until succeeded/failed — returns ackId, XML URL, PDF/A-3 URL |
| Validate raw XML against format schema + schematron rules (KOSIT / Mustang / XSD / Schematron) |
| Export accounting data as DATEV EXTF (Buchungsstapel / Debitoren / Kreditoren) in CP1252 encoding |
| Export e-invoice data in machine-readable formats (JSON/XML) for archival or integration |
| Submit invoice to FACe (Spain B2G government e-invoicing platform) |
| Poll submission status from FACe for a submitted invoice |
| Submit TicketBAI fiscal record to Basque Country tax authority (Hacienda) |
| Poll TicketBAI submission status from the Basque tax authority |
| Submit invoice to KSeF (Poland) — stub: transport is infra-ready in Frihet-ERP but not yet exposed as a live endpoint (production gated on KSeF cert); returns a labeled "unavailable" error until activated |
Time Tracking (6)
Tool | What it does |
| List time entries with filter by user, project, date range, billable status |
| Get full details of a single time entry by ID |
| Log hours for a project (billable flag, description, date) |
| Update any field on an existing time entry (PATCH semantics) |
| Soft-delete a time entry (confirm=true required) |
| Aggregate total/billable/non-billable hours for a period, with optional groupBy (user/project/day) |
Recurring Invoices (8)
Tool | What it does |
| List all recurring invoice templates (filter by active/paused) |
| Get full details of a recurring template by ID |
| Create a new recurring invoice template (daily/weekly/monthly/quarterly/yearly) |
| Update template fields — affects future generated invoices only |
| Pause an active template — no invoices generated while paused |
| Resume a paused template — next invoice on next scheduled cycle |
| Permanently delete a template (confirm=true required) |
| Manually trigger immediate generation of the next invoice instance |
Team Management (4)
Tool | What it does |
| List active members + pending invites (owner excluded) |
| Invite a new member by email with role (admin/editor/accountant/viewer) |
| Change an existing member's role (admin/editor/accountant/viewer) |
| Remove a member from the workspace (confirm=true required) |
Gestoria — Accountants (5)
Tool | What it does |
| Send a message in a contextual thread (documentRequest / filingItem / obligation) |
| List messages in a thread, newest first; paginate backwards with |
| Create a reusable document request template with variables + due-date offset |
| Bulk send a template to up to 500 client workspaces in one call |
| Cross-client AR aging report (buckets, per-workspace breakdown, top overdue) |
Audit GL (3)
Tool | What it does |
| Approve a GL journal entry (gestor/admin only — TRUST AREA) |
| Reject a GL entry with a mandatory reason (TRUST AREA) |
| Retrieve full audit trail for a GL entry |
White-label Portal Domain (3)
Tool | What it does |
| Add a custom domain to the client portal (returns DNS CNAME records) |
| Verify DNS propagation for a custom portal domain |
| Remove a custom portal domain (reverts to default Frihet subdomain) |
Self-onboard & VIES (2)
Tool | What it does |
| Generate a time-limited self-onboard link for a prospective client |
| Validate an EU VAT number (CIF intracomunitario) via VIES |
IGIC — Canary Islands Indirect Tax (4)
Tool | What it does |
| M415 annual operations >€3,005 (Canarias equivalent of M347) |
| M425 annual IGIC recap for Canary Islands businesses |
| M418 monthly IGIC return for large enterprises (grandes empresas) |
| Calculate AIEM (Arbitrio Importación) for imported/produced goods in Canarias |
Impuesto sobre Sociedades — Corporate Tax (2)
Tool | What it does |
| Modelo 200 annual IS return (taxable base, deductions, net payable) |
| Modelo 202 installment payments (1P April, 2P October, 3P December) |
Bank Categorization Rules (2)
Tool | What it does |
| List all bank auto-categorization rules (conditions + actions + status) |
| Create a new rule to auto-categorize transactions by description, amount, counterparty |
Deposits (7)
Tool | What it does |
| List deposits with pagination |
| Get deposit details by ID |
| Record a new client deposit |
| Update deposit fields |
| Delete a deposit (confirm=true required) |
| Apply a deposit balance against an invoice |
| Issue a refund for a deposit |
Vendors (5)
Tool | What it does |
| List all vendors/suppliers |
| Get vendor details |
| Add a new vendor |
| Update vendor info |
| Remove a vendor |
Banking (5)
Tool | What it does |
| List connected bank accounts |
| Get details for a bank account |
| List bank transactions with filters |
| Assign a category and expense/income type to a transaction |
| Link a bank transaction to an existing invoice |
Fiscal — Spanish Tax Models (7)
Tool | What it does |
| Quarterly IVA return (Modelo 303) — collected vs deductible, net payable |
| Quarterly IRPF installment for self-employed (Modelo 130) |
| Annual IVA summary (Modelo 390) |
| Annual withholding summary for rentals (Modelo 180) |
| Annual third-party transactions >€3,005 (Modelo 347) |
| Get VeriFactu submission status for a fiscal record |
| Resubmit a rejected VeriFactu fiscal record |
| Poll TicketBAI submission status — cross-reference from E-Invoicing (10); NOT counted toward this section's 7 |
Vacation Rentals / Stay (5)
Tool | What it does |
| List rental reservations with filters |
| Get reservation details |
| Create a new reservation |
| List all rental properties |
| Trigger OTA channel sync (Airbnb, Booking.com, etc.) |
POS — Point of Sale (4)
Tool | What it does |
| List registered POS terminals |
| Get details for a POS sale transaction |
| List POS sales with pagination |
| Issue a refund for a POS sale |
Kitchen / Restaurant (6)
Tool | What it does |
| List kitchen order tickets for the live board, filtered by status or station |
| Get a single kitchen ticket by ID with all items and their individual statuses |
| Advance a ticket's status (queued → preparing → ready → served) or reassign it to another station |
| List all kitchen stations with id, name, and active status |
| List the kitchen menu catalog with free-text search and active/inactive filter |
| Slow-station detection: aggregate open tickets per station and flag the bottleneck |
HR — Human Resources (9)
Tool | What it does |
| Create a leave request (vacation, sick, personal) |
| Approve a pending leave request |
| Reject a leave request with a reason |
| Cancel an approved or pending leave request |
| List leave requests with filters (user, status, date range) |
| Record clock-in for an employee |
| Record clock-out for an employee |
| Read daily/weekly overtime, aggregate minutes/hours, and compliance alerts computed over the selected YYYY or YYYY-MM records |
| List attendance anomalies (missing punches, excessive overtime) |
Payroll (2)
Tool | What it does |
| Read normalized payroll-ready employee data; the format value is an echoed destination label, not a generated file |
| List payable employees with payroll-profile readiness, missing fields, and monthly review state |
Onboarding (2)
Tool | What it does |
| Get onboarding completion status for the current workspace |
| Set or update the business persona (freelancer, SME, gestoría, etc.) |
Permissions (2)
Tool | What it does |
| Get the documented RBAC-model snapshot (not a runtime authorization guarantee) |
| Compare RBAC-model fields with actual API-key scopes and known scope denials (non-exhaustive) |
Period Close (3)
Tool | What it does |
| Get the current or selected YYYY fiscal-year range, open/closed state, and nullable closing details |
| Close an accounting period (gestor/admin only — TRUST AREA) |
| Reopen a closed period with a mandatory reason (TRUST AREA) |
All canonical operations (and their aliases) return structured output via outputSchema -- typed JSON, not raw text. List response shapes follow their API family; not every list endpoint is paginated.
Capability and side-effect truth
On the full MCP surfaces, every tools/list entry includes _meta["io.frihet/capability"]:
registeredmeans the name and handler exist in this server build;callabilityisapi_dependent(the handler calls the API; deployment, workspace enablement, and authorization still decide),runtime_checked(the handler explicitly distinguishes an absent backend from empty data),deferred,unavailable, orlocal—never an unconditional “available” claim;writesFrihet,externalInteraction, andexternalSideEffectsdistinguish state changes and calls to external entities/providers;MCP action annotations remain the standard source for read-only, destructive, idempotent, and open-world hints.
The ChatGPT/OpenAI host is a separately reviewed surface: exactly 33 business operations with complete descriptions, 0 discovery meta-tools, 0 prompts, and 0 resources. Its 17 reads and 16 writes are deliberately narrow, and all writes require literal confirm=true. Ten writes may deliver full business events to active endpoints previously configured by the workspace owner; webhook administration itself remains excluded. Direct email delivery, the legacy monthly summary, raw invoice PDFs, invoice lifecycle transitions, updating an existing quote, regulated filing, deleting client parent records, deleting expenses with their linked files, deleting products, and deleting vendors are also excluded. This surface must not be inferred from the full catalogue.
Resources
Context the AI can read to make smarter decisions.
The local package serves 11 resources: 7 static references plus 4 API-backed workspace resources. The hosted Worker serves the 7 static resources. The OpenAI-reviewed host serves 0 resources.
Static (reference data, no API calls):
Resource | URI | What it provides |
API Schema |
| OpenAPI summary: endpoints, auth, rate limits, pagination, error codes |
Tax Rates |
| Tax rates by Spanish fiscal zone: IVA, IGIC, IPSI, EU reverse charge, IRPF |
Tax Calendar |
| Quarterly and annual filing deadlines for the listed Spanish tax models |
Expense Categories |
| 8 categories with deductibility rules, IVA treatment, amortization |
Invoice Statuses |
| Status flow (draft > sent > paid/overdue > cancelled), transition rules, webhook events |
Currencies |
| 40 supported currencies with ISO codes, symbols, decimal places, locale formatting |
Countries |
| 61 supported countries with fiscal zones, default tax rates, currencies, invoice prefixes |
Dynamic (live data from your account):
Resource | URI | What it provides |
Business Profile |
| Your business info, plan, defaults, recent activity, top clients |
Monthly Snapshot |
| Current month P&L, revenue, expenses, tax liability |
Overdue Invoices |
| All invoices past due date (up to 100) |
Plan Limits |
| Live plan tier, usage counters, invoices/month, API rate limits |
Prompts (10)
Pre-built workflows the AI can execute as guided multi-step operations.
Prompt | What it does | Arguments |
| Close the month: review unpaid invoices, categorize expenses, check tax obligations, generate summary |
|
| Set up a new client with correct tax rates by location, optionally create a welcome quote |
|
| Prepare quarterly tax filing: calculate IVA/IGIC, identify deductibles, preview Modelo 303/130/420 |
|
| Find overdue invoices, draft follow-up messages, suggest payment reminders | -- |
| Create a client + first invoice in one workflow with tax rate lookup |
|
| Generate expense report grouped by category with deductible totals |
|
| Full annual closing: quarterly review, pending invoices, uncategorized expenses, year-end checklist |
|
| Project cash flow for coming months: recurring income, expenses, overdue receivables, tax deadlines |
|
| AR aging analysis: group unpaid invoices by bucket (0-30/31-60/61-90/90+ days), top debtors, collection actions | -- |
| Process expenses in bulk: categorize, apply tax rates, flag missing receipts |
|
How it works
graph LR
AI["Your AI assistant"]
MCP["frihet-mcp"]
API["api.frihet.io"]
DB["Frihet ERP"]
AI -- "create_invoice()" --> MCP
MCP -- "POST /v1/invoices" --> API
API --> DB
DB -- "201 + invoice data" --> API
API -- "structured JSON" --> MCP
MCP -- "typed response + suggestions" --> AI
style AI fill:#09090b,stroke:#4ade80,color:#fafafa
style MCP fill:#09090b,stroke:#fafafa,color:#fafafa
style API fill:#09090b,stroke:#3f3f46,color:#a1a1aa
style DB fill:#09090b,stroke:#3f3f46,color:#a1a1aaThe server translates tool calls into REST API requests. It handles authentication, rate limiting (automatic retry with backoff on 429), pagination, and error mapping.
Two transports:
stdio (local) --
npx @frihet/mcp-serverwithFRIHET_API_KEYStreamable HTTP (remote) --
https://mcp.frihet.io/mcpwith Bearer token or OAuth 2.0+PKCE
Environment variables
Variable | Required | Default |
| Yes (stdio) | -- |
| No |
|
| No |
|
Tool exposure: depth served on demand
Frihet's differentiator is depth — full ES/EU fiscal coverage plus native compliance (VeriFactu, TicketBAI, Facturae/FACe; KSeF Poland infra-ready, activation pending), banking, CRM, HR/payroll, stay/PMS and POS. But a flat list of every tool, loaded into an agent's context up front, is the 2026 context-rot problem: it crowds out the task and degrades tool selection before any work begins.
FRIHET_TOOL_MODE lets you choose how that depth is exposed.
Mode | Behavior |
| Canonical tools and fiscal aliases are exposed with full descriptions and schemas. Public descriptors add conservative callability and side-effect truth; operation names, schemas and handlers are unchanged. |
| Progressive disclosure. Each tool's description collapses to a one-line |
In grouped mode operation names, input schemas and handlers are unchanged. Descriptors also expose the same conservative capability and action truth as the full profile. Discovery flows through three meta-tools:
list_tool_groups()— the domain map (invoicing, expenses, fiscal/compliance, banking, CRM, HR/payroll, stay/PMS, POS, intelligence, products, platform) with a one-line blurb and tool count for each.search_tools(query)— free-text search across tool name, title, summary and group; returns matching tools with their group, summary, read-only flag and input fields. Optionalgroupfilter andlimit.describe_tool(name)— the full original description and input fields for one tool, on demand, before you call it.
// claude_desktop_config.json — opt in to grouped mode
{
"mcpServers": {
"frihet": {
"command": "npx",
"args": ["@frihet/mcp-server"],
"env": {
"FRIHET_API_KEY": "fri_...",
"FRIHET_TOOL_MODE": "grouped"
}
}
}
}Grouped exposure changes description density, not operation behavior. The versioned OpenAI-reviewed profile is composed separately and remains independently gated.
API limits
Limit | Value |
Requests per minute | 100 per API key |
Results per page | 100 max (50 default) |
Request body | 1 MB max |
Webhook payload | 100 KB max |
Webhooks per account | 20 max |
Rate limiting is handled automatically with exponential backoff.
Claude Code Skill
Beyond raw MCP tools, this repo includes a Claude Code skill that adds business context: Spanish tax rules, workflow recipes, financial reports, and natural language commands.
Install the skill
git clone https://github.com/Frihet-io/frihet-mcp.git
ln -s "$(pwd)/frihet-mcp/skill" ~/.claude/skills/frihetOr with the universal installer:
npx skills add Frihet-io/frihet-mcpCommands
Command | What it does |
| Account overview, recent activity, pending payments |
| Create, list, search invoices |
| Log and query expenses |
| Manage client database |
| Create and manage quotes |
| Financial summaries (P&L, quarterly, overdue) |
| Configure automation triggers |
| Guided setup and connection test |
The skill knows about IVA rates, IRPF retention, Modelo 303 prep, expense deductibility rules, and VeriFactu compliance.
Full documentation: docs.frihet.io/desarrolladores/skill-claude-code
Development
git clone https://github.com/Frihet-io/frihet-mcp.git
cd frihet-mcp
npm install
npm run buildRun locally:
FRIHET_API_KEY=fri_xxx node dist/index.jsTest with the MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.jsContributing
Contributions are welcome. Please open an issue first to discuss what you'd like to change.
git clone https://github.com/Frihet-io/frihet-mcp.git
cd frihet-mcp
npm install
npm run build # must pass before submittingCurrent limitations
No OCR or file upload -- the MCP works with structured data, not images or PDFs.
Single company -- one API key maps to one Frihet workspace.
Frihet account required -- you need an active account at app.frihet.io and an API key (starts with
fri_).
Ecosystem
Package | What it is |
This MCP server (158 canonical operations + 5 alias names; 11 local resources; 10 prompts) | |
TypeScript SDK ( | |
CLI ( | |
n8n community node for workflow automation | |
OpenAPI 3.1 at | |
Hosted endpoint on Cloudflare Workers (zero install) | |
Real-time events with HMAC-SHA256 |
Links
Frihet -- The product
Documentation -- Full docs
API reference -- REST API
MCP server docs -- Setup guides, troubleshooting
npm -- Package registry
Smithery -- Smithery marketplace
MCP Registry -- Anthropic official registry
Remote endpoint -- Hosted MCP server (Cloudflare Workers)
OpenAPI spec -- Machine-readable API definition
Security policy -- Private vulnerability reporting guidance
License
MIT. See LICENSE.
Built by Frihet.
Available Tools
148 toolsanomaly_listList AnomaliesARead-onlyIdempotent
List HR / operational / financial anomalies detected by the system. Filter by type (duplicate_clock_in, overtime_spike, missing_clock_out, expense_outlier, etc.), severity (low/medium/high/critical), or period. Useful for daily HR review and compliance audits. / Lista anomalias detectadas (RRHH/operativas/financieras) con filtros opcionales.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Period end ISO 8601 / Fin | |
| from | No | Period start ISO 8601 / Inicio | |
| type | No | Filter by anomaly type slug / Tipo | |
| limit | No | Max results / Maximos | |
| offset | No | Offset / Desplazamiento | |
| severity | No | Filter by severity / Severidad |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's role is reduced. It adds domain context (HR/operational/financial anomalies) and mentions filtering capabilities, which is useful beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two bilingual sentences with no wasted words. It front-loads the core purpose and immediately provides usage guidance and filtering options. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with 6 parameters (0 required), output schema present, and clear annotations, the description adequately covers what the tool does, what anomalies it detects, and how to filter. No missing elements given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description groups parameters into type, severity, period, and gives example values for type (e.g., duplicate_clock_in). This adds context but does not provide syntax or formats beyond what the schema already describes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List HR / operational / financial anomalies detected by the system', specifying the verb (list) and resource (anomalies). It provides concrete anomaly type examples, distinguishing it from sibling tools which deal with other resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Useful for daily HR review and compliance audits', giving clear usage context. It also mentions filtering by type, severity, or period. While it does not explicitly exclude use cases, the context is sufficient for this unique tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_depositApply DepositAIdempotent
Apply a deposit to an invoice or mark it as used. Transitions the deposit status to 'applied'. Example: id='dep_abc123', invoiceId='inv_xyz' / Aplica un deposito a una factura o lo marca como utilizado.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deposit ID / ID del deposito | |
| notes | No | Application notes / Notas de aplicacion | |
| invoiceId | No | Invoice ID to apply the deposit to / ID de la factura a la que aplicar el deposito |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| data | No | |
| meta | No | |
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context: the deposit status transitions to 'applied'. Annotations provide idempotentHint=true, which is consistent but not elaborated. The description does not contradict annotations and adds meaningful state-change info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with an example and bilingual text. It is clear and front-loaded, though the Spanish translation adds redundancy for an English-focused agent. Still, it is efficient and not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality and mentions the optional invoiceId for applying to an invoice. Given the output schema exists and parameters are simple, the description is reasonably complete, though it could mention prerequisites or error scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented structurally. The description adds an example but does not provide additional semantic meaning beyond what the schema already offers. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool applies a deposit to an invoice or marks it as used, and transitions status to 'applied'. It distinguishes from sibling tools like refund_deposit or update_deposit by specifying the action on invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an example but no explicit guidance on when to use this tool versus alternatives like refund_deposit or update_deposit. Usage is implied but not clarified with when-not or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_late_feeApply Late FeeA
Apply late payment interest to an overdue invoice. Calculates interest based on EU Late Payment Directive (8% default) or auto-calculates from days overdue. Creates a debit note linked to the original invoice. / Aplica intereses de demora a una factura vencida. Calcula intereses segun la Directiva Europea de Morosidad (8% por defecto) o los calcula automaticamente a partir de los dias de retraso. Crea una nota de debito vinculada a la factura original.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | Override fee amount. If omitted, auto-calculated from days overdue and legal rate. / Importe de la comision. Si se omite, se calcula automaticamente. | |
| invoiceId | Yes | ID of the overdue invoice / ID de la factura vencida | |
| daysOverdue | No | Override days overdue count. If omitted, calculated from due date. / Dias de retraso. Si se omite, se calcula a partir de la fecha de vencimiento. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| data | No | |
| meta | No | |
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details key behaviors: interest calculation based on EU directive, auto-calculation from days overdue, and creation of a debit note. Annotations (readOnlyHint=false, destructiveHint=false) align with this, and additional context is provided beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual, making it longer than necessary. While clear and front-loaded, the duplication of content in two languages reduces conciseness for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main function and auto-calculation feature. It assumes the invoice is overdue, which is clearly stated. Given the output schema exists, it is sufficiently complete for a tool of moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining that amount and daysOverdue can be auto-calculated if omitted, supplementing the schema's override descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool applies late payment interest to overdue invoices, calculates based on EU Late Payment Directive, and creates a debit note. It is specific and distinct from sibling tools like create_credit_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool is for applying late fees to overdue invoices but does not explicitly contrast with alternatives or state when not to use it. However, the context of sibling tools implies its specific role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attendance_clock_inClock In (Attendance)A
Record an employee clock-in. Optionally captures mood (employee well-being tracking) and location (remote/office/site). Returns an attendance entry with status='open'. Pair with attendance_clock_out to close the entry. / Registra una entrada de fichaje. Captura opcionalmente estado de animo y ubicacion.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | Optional mood slug (e.g. 'great','ok','tired') / Estado de animo | |
| location | No | Optional location ('remote','office','site') / Ubicacion | |
| employeeId | Yes | Employee ID / ID del empleado |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| mood | No | |
| status | No | |
| location | No | |
| clockInAt | No | |
| createdAt | No | |
| updatedAt | No | |
| clockOutAt | No | |
| employeeId | No | |
| durationMinutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it's a write operation (readOnlyHint=false). Description adds that it returns an attendance entry with status 'open' and that mood and location are optional. This provides useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences (plus Spanish translation) that concisely capture the tool's purpose and key details. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple clock-in tool, the description is complete enough. It covers the basic action, optional fields, and pairing. With annotations and output schema present, additional details are not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The description briefly mentions mood and location as optional but adds little beyond what the schema already provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Record an employee clock-in' with optional mood and location, and mentions that it returns an entry with status 'open'. It distinguishes itself from sibling attendance_clock_out by noting the pairing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Pair with attendance_clock_out to close the entry', providing clear context for when to use it. It doesn't explicitly state when not to use it, but the pairing instruction is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attendance_clock_outClock Out (Attendance)AIdempotent
Close an open attendance entry. Stamps clockOutAt and computes durationMinutes. Idempotent: clocking out an already-closed entry is a no-op. / Cierra una entrada de fichaje abierta. Calcula la duracion en minutos.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | Open attendance entry ID / ID de la entrada abierta |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| mood | No | |
| status | No | |
| location | No | |
| clockInAt | No | |
| createdAt | No | |
| updatedAt | No | |
| clockOutAt | No | |
| employeeId | No | |
| durationMinutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. The description adds specific behavioral details: stamps clockOutAt and computes durationMinutes. It explicitly states idempotency, reinforcing the annotation. No contradictions. The description adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The English part is concise (two sentences) and front-loaded. The Spanish translation adds length but serves a bilingual user base, which is acceptable. No filler words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (1 param, good annotations, output schema exists), the description covers key aspects: action, idempotency, and computed result. A minor gap is the lack of prerequisites (e.g., entry must be open). Output schema likely handles return info, so no need to describe it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description effectively repeats the schema's description for entryId ('Open attendance entry ID'). It adds no new information about the parameter's format or constraints. With high coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Close an open attendance entry'), the resource ('attendance entry'), and specifics ('Stamps clockOutAt and computes durationMinutes'). It also notes idempotency. While it doesn't explicitly differentiate from sibling 'attendance_clock_in', the verb 'clock out' and the name make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (closing an open entry) but provides no explicit when-to-use or when-not-to-use guidance. There's no mention of prerequisites (e.g., must have an open entry) or contrast with alternatives like 'attendance_clock_in'. The idempotency note is helpful but insufficient for full usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
categorize_transactionCategorize TransactionAIdempotent
Apply a category to a bank transaction for manual classification. Categories map to expense categories for tax deduction tracking. Example: id='tx_abc', category='supplies', notes='Office paper Q1' / Asigna una categoria a un movimiento bancario. Las categorias se mapean a categorias de gastos para el control de deducciones fiscales.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Transaction ID / ID del movimiento | |
| notes | No | Optional notes for this classification / Notas opcionales | |
| category | Yes | Category slug (e.g. 'supplies', 'travel', 'software') / Categoria |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| amount | Yes | |
| status | No | |
| category | No | |
| currency | No | |
| postedAt | No | |
| accountId | No | |
| createdAt | No | |
| updatedAt | No | |
| description | No | |
| matchedDocId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it's not read-only and idempotent. The description adds context about manual classification and tax mapping, but does not disclose overwrite behavior or potential side effects. With annotations bearing part of the burden, this is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences plus an example in two languages. It front-loads the purpose and includes relevant details without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the three parameters and presence of an output schema, the description covers the essential intent and usage. It lacks some details like category validation, but the schema examples compensate. It is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The description provides an example that clarifies usage but does not add new meaning beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'apply a category' and the resource 'bank transaction' and the purpose of manual classification for tax deduction tracking. An example is provided, making it unambiguous. It is easily distinguishable from siblings like 'match_transaction_to_invoice'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for manual classification but does not explicitly state when to use this tool versus alternatives like automatic categorization or matching. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_client_noteCreate Client NoteA
Add a note to a client. Notes are free-form text entries useful for keeping context. Example: clientId='abc123', content='Prefers invoices in English. Payment NET 30.' / Anade una nota a un cliente. Las notas son texto libre para mantener contexto.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Note content / Contenido de la nota | |
| clientId | Yes | Client ID / ID del cliente |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| content | Yes | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the write nature is clear. The description adds no further behavioral details such as idempotency, limits, or side effects beyond the basic verb and purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise at three sentences including a bilingual translation and an example. The structure is clear, though the bilingual part adds some redundancy for English readers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, 100% schema coverage, and existence of an output schema, the description is complete enough. It covers the essential purpose, parameters, and usage context without requiring extensive elaboration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds value by providing a concrete example with parameter values, illustrating typical usage and expected data format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Add' and resource 'a note to a client', and distinguishes notes as free-form text entries from sibling tools like log_client_activity, which might be more structured.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via an example but does not explicitly state when to use this tool versus alternatives like log_client_activity or list_client_notes. No when-not-to-use or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_credit_noteCreate Credit NoteA
Create a credit note (factura rectificativa) for an existing invoice. This reverses all or part of an invoice for compliance. Spanish market: generates VeriFactu-compliant R1-R5 rectificativa. Other markets: standard credit note with negative amounts. / Crea una factura rectificativa para una factura existente. Mercado espanol: genera rectificativa R1-R5 conforme a VeriFactu. Otros mercados: nota de credito estandar con importes negativos.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Reason for the credit note. Maps to Spanish R-types: error→R1 (art. 80.1), refund/discount/cancellation/other→R4 / Motivo de la rectificacion. error→R1, resto→R4 | |
| invoiceId | Yes | ID of the original invoice to credit / ID de la factura original a rectificar | |
| issueDate | No | ISO date for the credit note (YYYY-MM-DD). Defaults to today. / Fecha de emision (YYYY-MM-DD). Por defecto hoy. | |
| fullCredit | No | true = full credit (tipo S, sustitucion), false = partial (tipo I, diferencias). Default: true / true = abono total (tipo S), false = parcial (tipo I). Por defecto: true | |
| reasonDescription | No | Optional free-text description of the reason / Descripcion libre del motivo |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| success | No | |
| creditNote | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false, etc.). The description adds behavioral context: it performs a write operation that reverts an invoice, and in the Spanish market it generates VeriFactu-compliant R1-R5 rectificativa. This goes beyond the annotations by specifying compliance details and the effect on the invoice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the first sentence front-loading the main action. It includes a bilingual paragraph for Spanish users, which is slightly redundant but serves a clear audience need. No wasted sentences, but length could be reduced for English-only contexts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality and market differences, which is adequategiven the presence of an output schema and parameter descriptions. Missing are prerequisites (e.g., invoice must exist and not be fully credited) and error conditions, but these are not critical for initial selection. Overall complete enough for an agent to understand the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already having bilingual descriptions in the input schema. The tool description itself does not add additional semantics for parameters. Per guidelines, when schema_coverage is high, baseline is 3, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it creates a credit note (factura rectificativa) for an existing invoice, specifying it reverses all or part of an invoice for compliance. It distinguishes the tool from siblings like create_invoice and refund_sale by mentioning market-specific behavior (VeriFactu in Spain, standard negative amounts elsewhere), making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains when to use the tool: to generate a credit note for an existing invoice. It provides context about market-specific compliance requirements but does not explicitly state when not to use it or name alternatives. However, the context is sufficient for an agent to decide based on the invoice and market.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_depositCreate DepositA
Record a new deposit from a client. Requires clientId and amount. Useful for tracking advance payments, retainers, and security deposits. Example: clientId='abc123', amount=500, currency='EUR', description='Project retainer' / Registra un nuevo deposito de un cliente. Requiere clientId e importe. Util para adelantos, retenciones y depositos de garantia.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Deposit date in ISO 8601 (YYYY-MM-DD) / Fecha del deposito | |
| notes | No | Internal notes / Notas internas | |
| amount | Yes | Deposit amount / Importe del deposito | |
| status | No | Status (e.g. 'pending', 'applied', 'refunded') / Estado | |
| clientId | Yes | Client ID / ID del cliente | |
| currency | No | Currency code (e.g. 'EUR', 'USD') / Codigo de moneda | |
| reference | No | External reference or receipt number / Referencia externa | |
| clientName | No | Client name (denormalized) / Nombre del cliente | |
| description | No | Deposit description / Descripcion del deposito | |
| paymentMethod | No | Payment method (e.g. 'bank_transfer', 'card') / Metodo de pago |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| date | No | |
| notes | No | |
| amount | Yes | |
| status | No | |
| clientId | Yes | |
| currency | No | |
| createdAt | No | |
| reference | No | |
| updatedAt | No | |
| clientName | No | |
| description | No | |
| paymentMethod | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-idempotent, non-destructive mutation. The description adds no behavioral traits beyond stating it records a deposit. It does not mention side effects, auth needs, or idempotency behavior. With annotations covering the mutation type, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences in English (plus Spanish translation). It front-loades purpose and requirements, with no filler. Every sentence is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 10 parameters (100% schema coverage) and presence of an output schema, the description covers core purpose, required params, and example. It does not explain optional parameters, but the schema handles that. It is sufficiently complete for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explicitly highlighting required parameters (clientId and amount) and providing an example with values. This helps clarify usage beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Record a new deposit from a client' with specific verb and resource. It provides use cases (advance payments, retainers, security deposits) and distinguishes from sibling tools that update, delete, refund, apply, list, or get deposits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly requires clientId and amount, gives an example, and lists use cases. However, it does not explicitly state when not to use it or provide direct comparisons with alternative tools like apply_deposit or refund_deposit. Still, the intended usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_invoiceCreate InvoiceA
Create a new invoice. Requires client name and at least one line item. The invoice number is auto-generated. Defaults to draft status and today's date. Example: clientName='Acme Corp', items=[{description:'Consulting', quantity:10, unitPrice:150}], taxRate=21, irpfRate=15 / Crea una nueva factura. Requiere nombre del cliente y al menos un concepto. El numero se genera automaticamente. Por defecto estado borrador y fecha de hoy. Soporta retencion IRPF (autonomos ES), recargo de equivalencia, serie, anticipo y descuento global.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Line items (each with description, quantity, unitPrice) / Conceptos de la factura | |
| notes | No | Additional notes shown on the invoice / Notas adicionales | |
| status | No | Invoice status (default: draft) / Estado de la factura | |
| dueDate | No | Due date in ISO 8601 format (YYYY-MM-DD) / Fecha de vencimiento | |
| taxRate | No | Tax rate percentage (e.g. 21 for 21% IVA, 7 for IGIC) / Porcentaje de impuesto | |
| clientId | No | Existing client ID — server back-fills taxId/address / ID de cliente existente | |
| irpfRate | No | IRPF withholding % (retencion autonomo ES, e.g. 15 or 7) / Retencion IRPF % | |
| poNumber | No | Client purchase-order reference / Numero de pedido del cliente | |
| seriesId | No | Invoice numbering series ID / ID de serie de numeracion | |
| issueDate | No | Issue date in ISO 8601 format (YYYY-MM-DD), defaults to today / Fecha de emision | |
| clientName | Yes | Client/customer name / Nombre del cliente | |
| prepayment | No | Prepaid/advance amount already collected in EUR / Anticipo cobrado en EUR | |
| clientTaxId | No | Client tax ID (NIF/CIF/VAT) shown on the invoice / NIF/CIF del cliente | |
| discountRate | No | Global discount % applied to the invoice / Descuento global % | |
| clientAddress | No | Client billing address shown on the invoice / Direccion fiscal del cliente | |
| operationType | No | Operation type (service or goods) / Tipo de operacion | |
| clientLocation | No | Fiscal zone driving IVA vs IGIC vs exempt / Zona fiscal (IVA/IGIC/exento) | |
| documentNumber | No | Externally-issued number for import (honored verbatim) / Numero externo para importacion | |
| equivalenceSurchargeRate | No | Recargo de equivalencia % (ES retail regime) / Recargo de equivalencia % |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| items | No | |
| notes | No | |
| total | No | |
| status | No | |
| dueDate | No | |
| taxRate | No | |
| createdAt | No | |
| issueDate | No | |
| updatedAt | No | |
| clientName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a mutation tool (readOnlyHint=false). The description adds significant behavioral context: auto-generated invoice number, default draft status, today's date, and support for advanced features like IRPF, equivalence surcharge, series, prepayment, and global discount. This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with essential information, and includes a helpful example. The bilingual content (English and Spanish) adds redundancy but is not excessive. Every sentence contributes meaningful guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (19 parameters, 3 enums, output schema present), the description covers core behavior, prerequisites, defaults, and advanced features. It does not need to explain return values due to the output schema. The context is sufficient 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by providing an example that demonstrates how to use common parameters (clientName, items, taxRate, irpfRate) and highlights advanced features (IRPF, surcharge, series, prepayment, discount) that correspond to schema properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new invoice' and specifies required parameters (client name, at least one line item). It distinctively identifies the creation action compared to sibling tools like get_invoice, update_invoice, and delete_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states prerequisites (client name, at least one line item) and defaults (auto-generated number, draft status, today's date). It provides an example but does not explicitly state when not to use or mention alternatives, though none are directly relevant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_productCreate ProductA
Create a new product or service in the catalog. Requires a name and unit price. Products can be referenced when creating invoices and quotes for faster data entry. Example: name='Web Design', unitPrice=1500, taxRate=21, description='Full website redesign' / Crea un nuevo producto o servicio en el catalogo. Requiere nombre y precio unitario. Los productos se pueden usar al crear facturas y presupuestos para entrada rapida de datos.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Product/service name / Nombre del producto o servicio | |
| taxRate | No | Default tax rate % (e.g. 21 for 21% IVA) / IVA por defecto | |
| unitPrice | Yes | Unit price in EUR / Precio unitario en EUR | |
| description | No | Product description / Descripcion |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| taxRate | No | |
| createdAt | No | |
| unitPrice | Yes | |
| updatedAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by specifying required fields (name and unit price) and giving an example. Annotations indicate non-destructive behavior, and the description aligns with that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual, which makes it slightly longer. While front-loaded with English, the Spanish repetition adds verbosity. Could be more concise by omitting the Spanish or reducing it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown) and the parameter schema with full coverage, the description explains the tool's purpose and usage context sufficiently, including integration with invoices and quotes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description's mention of required fields and the example provides additional clarity, reinforcing parameter semantics without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new product or service in the catalog' with a specific verb and resource. It distinguishes from sibling tools like 'list_products' and 'update_product' by focusing on creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains that products can be referenced when creating invoices and quotes for faster data entry, providing context for use. However, it does not explicitly state when not to use it or alternatives beyond those mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_quoteCreate QuoteA
Create a new quote/estimate for a client. Requires client name and at least one line item. Quotes can later be converted to invoices. Defaults to draft status. Example: clientName='Acme Corp', items=[{description:'Design', quantity:1, unitPrice:3000}], validUntil='2026-04-30' / Crea un nuevo presupuesto. Requiere nombre del cliente y al menos un concepto. Los presupuestos se pueden convertir en facturas despues.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Line items (each with description, quantity, unitPrice) / Conceptos del presupuesto | |
| notes | No | Additional notes shown on the quote / Notas adicionales | |
| status | No | Quote status (default: draft) / Estado del presupuesto | |
| dueDate | No | Due date in ISO 8601 (YYYY-MM-DD) / Fecha de vencimiento | |
| taxRate | No | Tax rate % (e.g. 21 IVA, 7 IGIC) / Porcentaje de impuesto | |
| clientId | No | Existing client ID — server back-fills taxId/address / ID de cliente existente | |
| irpfRate | No | IRPF withholding % (retencion autonomo ES) / Retencion IRPF % | |
| issueDate | No | Issue date in ISO 8601 (YYYY-MM-DD), defaults to today / Fecha de emision | |
| clientName | Yes | Client name / Nombre del cliente | |
| validUntil | No | Expiry date in ISO 8601 (YYYY-MM-DD) / Fecha de validez | |
| clientTaxId | No | Client tax ID (NIF/CIF/VAT) / NIF/CIF del cliente | |
| clientAddress | No | Client billing address / Direccion fiscal del cliente | |
| clientLocation | No | Fiscal zone driving IVA vs IGIC vs exempt / Zona fiscal | |
| equivalenceSurchargeRate | No | Recargo de equivalencia % / Recargo de equivalencia % |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| items | No | |
| notes | No | |
| total | No | |
| status | No | |
| createdAt | No | |
| updatedAt | No | |
| clientName | No | |
| validUntil | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations lack clear hints (readOnlyHint: false, destructiveHint: false). The description adds that the default status is 'draft' and mentions future conversion to invoices, providing some behavioral context. However, it does not disclose other behaviors like permission requirements or side effects beyond creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences and one example. It front-loads the core purpose and requirements, then adds a practical example. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 params, but schema covers them all) and the presence of an output schema, the description covers the essentials. It includes required fields and a future use case (conversion to invoice), but could mention that clientId can back-fill address/taxId.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all 14 parameters have descriptions). The description adds an example showing clientName and items structure, which enhances understanding beyond the schema. However, it doesn't explain nuanced parameters like clientLocation or equivalenceSurchargeRate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Create a new quote/estimate for a client' and specifies required fields (client name, at least one line item), providing a clear verb-resource-action. It distinguishes from siblings like update_quote and create_invoice by mentioning future conversion to invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (initial quote creation) and notes quotes can be converted to invoices. It does not explicitly exclude alternatives (e.g., update_quote for modifications), but the purpose is well-understood.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_recurring_invoiceCreate Recurring InvoiceA
Create a new recurring invoice template. Specify frequency (daily/weekly/monthly/quarterly/yearly), recipient client, line items, and optional start date. The first invoice instance is generated on the next scheduled run date. Example: clientId='cli_abc', frequency='monthly', templateName='Servicio mensual', lineItems=[{description:'SaaS', quantity:1, unitPrice:299}] / Crea una nueva plantilla de factura recurrente. Especifica frecuencia, cliente destinatario, lineas y fecha de inicio opcional. La primera instancia se genera en la proxima fecha programada.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Notes to include on generated invoices / Notas a incluir en las facturas generadas | |
| taxRate | No | Tax rate percentage (e.g. 21 for 21% IVA) / Tipo impositivo (e.g. 21 para IVA 21%) | |
| clientId | Yes | Client ID (recipient of generated invoices) / ID del cliente destinatario | |
| frequency | Yes | Billing frequency / Frecuencia de facturacion | |
| lineItems | Yes | Invoice line items / Lineas de la factura | |
| startDate | No | First billing date ISO 8601 (YYYY-MM-DD). Defaults to next natural cycle date. / Primera fecha de facturacion (por defecto proximo ciclo natural) | |
| templateName | Yes | Name for this recurring template / Nombre de la plantilla |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | No | |
| nextRun | No | |
| createdAt | No | |
| frequency | No | |
| lineItems | No | |
| recipient | No | |
| updatedAt | No | |
| templateName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false). The description adds value by noting that the first invoice is generated on the next scheduled run date. However, it does not disclose other behaviors like overwrite rules, permission requirements, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with a concrete example. Bilingual text adds length but maintains clarity. No unnecessary words, though the example could be more compact. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values are covered. The description covers the main purpose, parameters, and a key behavioral note. For a creation tool with 7 parameters, it is sufficiently complete, though it could mention uniqueness constraints on templateName.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The tool description provides an example with values and bilingual explanations, but this adds minimal meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a new recurring invoice template, with specific verbs ('Create') and resource ('recurring invoice template'). It distinguishes from sibling tools like create_invoice (one-off) and update_recurring_invoice (modification).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for setting up recurring billing templates and lists required parameters, but lacks explicit when-to-use or when-not-to-use guidance versus alternatives. No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reservationCreate ReservationA
Create a new reservation manually (not via channel sync). Requires property ID, check-in/check-out dates, and guest count. Optionally provide a guest ID or inline guest data to create a new guest. / Crea una nueva reserva manualmente. Requiere propiedad, fechas y numero de huespedes.
| Name | Required | Description | Default |
|---|---|---|---|
| guest | No | New guest data (used if guestId not provided) / Datos del nuevo huesped si no se proporciona guestId | |
| notes | No | Internal notes / Notas internas | |
| checkIn | Yes | Check-in date YYYY-MM-DD / Fecha de entrada | |
| guestId | No | Existing guest ID (if known) / ID de huesped existente | |
| checkOut | Yes | Check-out date YYYY-MM-DD / Fecha de salida | |
| currency | No | ISO 4217 currency (defaults to workspace currency) / Divisa | |
| channelId | No | Booking channel ID (Airbnb, Booking.com, Direct) / Canal de reserva | |
| guestCount | Yes | Number of guests / Numero de huespedes | |
| propertyId | Yes | Property ID / ID de propiedad | |
| totalAmount | No | Total amount in workspace currency / Importe total |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| notes | No | |
| nights | No | |
| status | Yes | |
| checkIn | Yes | |
| guestId | No | |
| checkOut | Yes | |
| currency | No | |
| channelId | No | |
| createdAt | No | |
| updatedAt | No | |
| guestCount | Yes | |
| propertyId | Yes | |
| totalAmount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare no readOnly or destructive hints, and the description confirms it's a create operation. However, it does not disclose side effects like confirmation emails or immediate channel sync implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences in English and one in Spanish, front-loaded with purpose, no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters, nested objects, and output schema, the description covers the essentials but could mention what the tool returns (e.g., reservation ID) or date validation rules.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds minimal info beyond schema, only listing required fields and optional guest data, without further detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create', the resource 'reservation', and the context 'manually (not via channel sync)', distinguishing it from sibling tool sync_channel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly notes when to use (manual creation) and contrasts with channel sync, but does not mention when not to use or other alternatives like importing from channels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_time_entryCreate Time EntryA
Log a time entry for a project. Requires projectId, hours (decimal), and date. Mark as billable=true to include in client invoicing. Example: projectId='proj_abc', hours=2.5, description='Frontend review', billable=true, date='2026-05-10' / Registra una entrada de tiempo para un proyecto. Requiere projectId, horas (decimal) y fecha. Marca billable=true para incluirlo en la facturacion al cliente.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Work date ISO 8601 (YYYY-MM-DD) / Fecha del trabajo | |
| hours | Yes | Hours worked (decimal, e.g. 1.5) / Horas trabajadas (decimal) | |
| userId | No | User ID (defaults to API key owner) / ID del usuario (por defecto el propietario de la API key) | |
| billable | No | Whether hours are billable to client (default true) / Si las horas son facturables | |
| projectId | Yes | Project ID / ID del proyecto | |
| description | No | Description of work done / Descripcion del trabajo realizado |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| date | No | |
| hours | Yes | |
| status | No | |
| userId | No | |
| billable | No | |
| createdAt | No | |
| projectId | No | |
| updatedAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a write operation (readOnlyHint=false) and not destructive (destructiveHint=false). The description aligns with this by stating it 'logs' a time entry, but adds no further behavioral context beyond the example. Given annotations carry the burden, the description is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences (plus bilingual repeat) that front-load the main purpose and key parameters. Every sentence adds value without redundancy or wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown but indicated true) and 100% schema coverage, the description covers the essential aspects: action, required fields, optional billable, and an example. It is complete enough for an agent to use correctly, though it could mention default behavior for userId or billable more explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, explaining each parameter. The description adds value by providing a concrete example (projectId='proj_abc', hours=2.5, etc.), which helps clarify how to format the inputs, exceeding what the schema alone offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Log a time entry for a project.' It specifies the required fields (projectId, hours, date) and an optional one (billable). This distinguishes it from sibling tools like list_time_entries, get_time_entry, update_time_entry, delete_time_entry, and get_time_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context with an example and highlights when to set billable=true. However, it does not explicitly state when not to use this tool or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_vendorCreate VendorA
Create a new vendor/supplier. Requires at minimum a name. Vendors are used when tracking expenses and purchase orders. Example: name='Office Supplies Ltd', email='billing@office.com', taxId='B87654321', address={street:'Gran Via 1', city:'Madrid', country:'ES'} / Crea un nuevo proveedor. Requiere como minimo un nombre. Los proveedores se usan al registrar gastos y pedidos de compra.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Vendor/company name / Nombre del proveedor o empresa | |
| No | Email address / Correo electronico | ||
| phone | No | Phone number / Telefono | |
| taxId | No | Tax ID (NIF/CIF/VAT) / NIF o CIF | |
| address | No | Vendor address / Direccion del proveedor |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| No | ||
| phone | No | |
| taxId | No | |
| address | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only mutation. The description adds a requirement (minimum a name) and includes an example, which enriches behavioral transparency beyond the annotations. However, it does not detail further behavioral traits like idempotency or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient with two sentences plus an example. It is front-loaded with the core purpose. The bilingual repetition slightly reduces conciseness, but overall it is clear and compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a modest parameter set (5) with 1 required, and an output schema exists. The description explains the purpose, required field, and usage context. It lacks detail on validation or error handling, but for a simple creation tool, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes beyond by providing a concrete example with parameter values (name, email, taxId, address), demonstrating the structure and acceptable data. This adds meaning that aids selection and invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new vendor/supplier' with a specific verb and resource. It distinguishes from sibling tools like list_vendors, get_vendor, etc., by explicitly stating the creation action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context by mentioning that vendors are used when tracking expenses and purchase orders, giving a clear usage scenario. It does not explicitly list alternatives or when not to use, but the context is sufficient for a creation tool with no direct sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhookCreate WebhookA
Register a new webhook endpoint. You must specify the URL to receive notifications and which events to subscribe to. Available events: invoice.created, invoice.updated, invoice.paid, invoice.deleted, expense.created, expense.updated, expense.deleted, client.created, client.updated, quote.created, quote.updated, quote.accepted. Example: url='https://example.com/webhook', events=['invoice.created','invoice.paid'], secret='my-secret' / Registra un nuevo endpoint de webhook. Especifica la URL y los eventos a suscribir.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Webhook endpoint URL / URL del endpoint del webhook | |
| active | No | Whether the webhook is active (default: true) / Si el webhook esta activo | |
| events | Yes | Events to subscribe to (e.g. ['invoice.created', 'invoice.paid']) / Eventos a suscribir | |
| secret | No | Signing secret for payload verification / Secreto para verificar las notificaciones |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| active | No | |
| events | Yes | |
| secret | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds context by listing events and mentioning a signing secret, but does not disclose potential side effects (e.g., URL validation, test notification sent), rate limits, or authentication requirements. The description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and includes an example, but is repeated in both English and Spanish, doubling length without adding value. The structure is front-loaded with the main verb and resource, but the bilingual repetition is not efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown), the description does not need to explain return values. It covers the main functionality, required parameters, and available events. It lacks mention of permissions or URL accessibility requirements, but overall is sufficiently complete for a webhook creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by listing all available events and showing an example with url, events, and secret. It also implies the active parameter defaults to true (schema confirms). This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Register a new webhook endpoint' with specific verb ('register') and resource ('webhook endpoint'). It lists available events and provides an example, distinguishing it from sibling tools like get_webhook, update_webhook, delete_webhook, test_webhook, list_webhooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what to specify (URL, events, secret) and provides a list of available events. It gives an example usage. However, it does not explicitly state when to use this tool versus alternatives (e.g., update_webhook), nor does it mention prerequisites or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_client_contactDelete Client ContactADestructiveIdempotent
Permanently delete a contact from a client. This action cannot be undone. / Elimina permanentemente un contacto de un cliente. Esta accion no se puede deshacer.
| Name | Required | Description | Default |
|---|---|---|---|
| clientId | Yes | Client ID / ID del cliente | |
| contactId | Yes | Contact ID / ID del contacto |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states permanence and irreversibility ('cannot be undone'), which adds context beyond the annotation destructiveHint=true. It reinforces the destructive nature, though the annotation already covers this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two short sentences (one per language), no wasted words. It front-loads the core action and key warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with two parameters, annotations, and output schema, the description is adequate. It covers the destructive nature and permanence, though could mention if this is a soft or hard delete, and any cascading effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with bilingual descriptions for both parameters. The tool description adds no extra semantic information about parameters, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('permanently delete a contact') and the resource ('from a client'), with bilingual text. It distinguishes itself from sibling delete tools by specifying the resource as client contact, but does not explicitly differentiate from similar tools like delete_client_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as when to use soft-delete or update instead. No prerequisites or conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_client_noteDelete Client NoteADestructiveIdempotent
Permanently delete a note from a client. This action cannot be undone. / Elimina permanentemente una nota de un cliente. Esta accion no se puede deshacer.
| Name | Required | Description | Default |
|---|---|---|---|
| noteId | Yes | Note ID / ID de la nota | |
| clientId | Yes | Client ID / ID del cliente |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds 'cannot be undone' beyond destructiveHint annotation. However, it is bilingual and somewhat repetitive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two clear sentences in English followed by Spanish translation. No unnecessary detail, but could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation, description and schema are sufficient. Output schema exists but not shown; description doesn't need to elaborate return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions. Description does not add further meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Permanently delete a note from a client' with specific verb and resource. Distinguishes from sibling tools like list_client_notes and create_client_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs alternatives or prerequisites. Implied usage is clear but lacks exclusionary context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_depositDelete DepositBDestructiveIdempotent
Permanently delete a deposit by its ID. This action cannot be undone. / Elimina permanentemente un deposito por su ID. Esta accion no se puede deshacer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deposit ID / ID del deposito |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds 'cannot be undone,' reinforcing irreversibility. But no additional context about permissions, side effects, or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
English part is succinct and front-loaded. The Spanish translation duplicates content, adding length without new information, slightly reducing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one parameter and an output schema, the description fully covers what the agent needs: the action, the irreversibility warning, and the input requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'id'. The description adds no extra meaning beyond the schema's description, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('delete') and resource ('deposit'), making the purpose unambiguous. However, it does not differentiate from sibling delete tools (e.g., delete_invoice, refund_deposit), missing an opportunity to guide selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like refund_deposit or other delete tools. Lacks prerequisites, exclusions, or context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_expenseDelete ExpenseADestructiveIdempotent
Permanently delete an expense by its ID. This action cannot be undone. / Elimina permanentemente un gasto por su ID. Esta accion no se puede deshacer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Expense ID / ID del gasto |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds crucial context: 'permanently delete' and 'cannot be undone', which reinforces the irreversible nature. No contradiction with annotations; the description enriches behavioral understanding beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two English sentences and two Spanish equivalents. It is front-loaded with the key action. The bilingual repetition is slightly redundant but still efficient. No unnecessary fluff; every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one required parameter, no nested objects, and an output schema exists), the description is adequate. It specifies the core action and its irreversibility. For a delete operation, this completes the context needed by an agent, though it could briefly mention the output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool description does not add any parameter-specific information beyond what is already in the input schema. The schema covers 100% of parameters with a clear description for 'id'. Thus, the baseline score of 3 is appropriate, as the description adds no extra semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('permanently delete') and the resource ('expense by its ID'). The verb 'delete' and the noun 'expense' are specific, and the mention of 'ID' clarifies the input. This distinguishes it from sibling tools like 'update_expense' or 'list_expenses'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when wanting to remove an expense permanently, but it does not explicitly state when to use this tool versus alternatives (e.g., 'update_expense' for modifications). No when-not-to-use guidance is provided. The inclusion of 'This action cannot be undone' hints at caution but is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_invoiceDelete InvoiceADestructiveIdempotent
Permanently delete an invoice by its ID. This action cannot be undone. / Elimina permanentemente una factura por su ID. Esta accion no se puede deshacer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Invoice ID / ID de la factura |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but description adds 'permanently delete' and 'cannot be undone', reinforcing the irreversible nature. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences in English and Spanish, front-loaded with the main action. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete-by-ID tool with output schema, the description covers essential aspects: action, permanence, and required ID. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with description, but description adds no additional meaning beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (permanently delete) and resource (invoice by ID), distinguishing it from sibling tools like get_invoice or update_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only warns that action cannot be undone, but does not provide explicit guidance on when to use this tool vs alternatives (e.g., credit notes) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_productDelete ProductADestructiveIdempotent
Permanently delete a product by its ID. This action cannot be undone. / Elimina permanentemente un producto por su ID. Esta accion no se puede deshacer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Product ID / ID del producto |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds emphasis on the permanent nature ('cannot be undone'), which reinforces the destructive behavior. It does not contradict annotations and provides additional context beyond what annotations offer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences (plus Spanish translation) that front-load the action and parameter. No wasted words; every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (1 parameter, clear annotations, output schema exists), the description is complete. It explains the action, the necessary parameter, and the irreversible consequence. No additional information is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'id' parameter. The description does not add any additional meaning beyond what is in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Permanently delete a product by its ID.' It specifies the resource (product) and the operation (delete), distinguishing it from sibling tools like update_product or get_product. The information is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool vs alternatives. It lacks context about prerequisites, conditions, or exclusions. The warning about irreversibility is helpful but does not constitute usage guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_quoteDelete QuoteADestructiveIdempotent
Permanently delete a quote by its ID. This action cannot be undone. / Elimina permanentemente un presupuesto por su ID. Esta accion no se puede deshacer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Quote ID / ID del presupuesto |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds that deletion is permanent and cannot be undone, providing additional context beyond annotations. No contradictions noted. No mention of authentication or rate limits, but for a simple delete this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the key action. The Spanish repetition is somewhat redundant but serves a multilingual audience. Every sentence is meaningful, though could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (context signal true), the description does not need to explain return values. It covers the destructive nature and irreversibility. It could mention prerequisites or error scenarios, but for a delete operation the information is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the single parameter 'id' is described as 'Quote ID / ID del presupuesto'. The description adds no further meaning or examples beyond what the schema already provides, so baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('delete') and resource ('quote'), specifying it is permanent and by ID. It distinguishes from sibling tools like 'update_quote' or 'get_quote'. The bilingual text does not hinder clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. It implies usage when intending to delete a quote, but lacks guidance on when not to use it (e.g., if deletion is not allowed due to dependencies). No comparison with sibling tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_recurring_invoiceDelete Recurring InvoiceADestructiveIdempotent
Permanently delete a recurring invoice template. This does NOT delete previously generated invoices — only the template and future scheduled runs. Requires confirm=true to prevent accidental deletion. / Elimina permanentemente una plantilla de factura recurrente. No elimina facturas ya generadas — solo la plantilla y las ejecuciones futuras. Requiere confirm=true para evitar eliminaciones accidentales.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Recurring invoice template ID / ID de la plantilla | |
| confirm | Yes | Must be true to confirm deletion / Debe ser true para confirmar la eliminacion |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructive, idempotent), the description adds that deletion is permanent, does not affect previously generated invoices, and requires confirmation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences in English and Spanish. It is front-loaded with key information and contains no redundancy, though the bilingual version slightly lengthens it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's destructive nature and the output schema, the description covers key aspects: permanence, scope (template only), and safety requirement. It is complete enough for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description reiterates the need for 'confirm=true' but does not add new information beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is for permanently deleting a recurring invoice template, distinguishing it from deleting generated invoices. The verb 'delete' and resource 'recurring invoice template' are specific, and it differentiates from sibling tools like 'delete_invoice'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that it deletes only the template and future runs, not past invoices, and requires the 'confirm' parameter to prevent accidental deletion. It provides clear context for when to use the tool, though it does not explicitly mention alternatives like pause or resume.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_time_entryDelete Time EntryADestructiveIdempotent
Soft-delete a time entry by ID. Requires confirm=true to prevent accidental deletion. Deleted entries are excluded from billing reports but retained for audit. / Elimina (soft-delete) una entrada de tiempo por su ID. Requiere confirm=true para evitar eliminaciones accidentales. Las entradas eliminadas se excluyen de informes de facturacion pero se retienen en auditoria.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Time entry ID / ID de la entrada de tiempo | |
| confirm | Yes | Must be true to confirm deletion / Debe ser true para confirmar la eliminacion |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Exceeds annotations by detailing the soft-delete behavior, requirement for confirmation, and consequences (excluded from billing reports but retained for audit). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is functional but includes bilingual repetition, making it longer than necessary. While not overly verbose, the Spanish translation adds redundancy without substantial value for AI agents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, annotations, and output schema, the description fully covers the operation's effect, requirements, and consequences. No missing context for an AI 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The description adds value by emphasizing 'confirm=true' requirement, but that is already present in the schema. No additional parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('soft-delete') and resource ('a time entry by ID'), distinguishing it from other delete operations by specifying it's a soft-delete. The bilingual text reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly requires 'confirm=true' to prevent accidental deletion, providing a key usage requirement. It implies when to use (for soft-deletion with audit retention) but does not explicitly state when not to use or compare with alternatives like update_time_entry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_vendorDelete VendorADestructiveIdempotent
Permanently delete a vendor by their ID. This action cannot be undone. Warning: this may affect existing expenses referencing this vendor. / Elimina permanentemente un proveedor por su ID. Esta accion no se puede deshacer. Advertencia: puede afectar a gastos existentes que referencien este proveedor.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Vendor ID / ID del proveedor |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds specific context: 'cannot be undone' and 'may affect existing expenses referencing this vendor'. This provides behavioral transparency beyond annotations, though no details on authorization or return value are given (output schema exists).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the key action in English, and includes a warning. The bilingual repetition adds slight redundancy but does not detract significantly. Every sentence provides essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, an output schema, and annotations covering safety traits, the description adequately covers the tool's purpose and key behavioral warning. It mentions the main side effect (affecting expenses), which is sufficient for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a single required 'id' parameter. The description mentions 'by their ID' but does not add any additional semantics or constraints beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'delete' and the resource 'vendor', and specifies the action is permanent. It distinguishes from sibling tools like 'list_vendors', 'get_vendor', 'create_vendor', and 'update_vendor' by focusing on deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description warns that the action cannot be undone and may affect existing expenses, providing implicit usage guidance. However, it does not explicitly state when to use this tool versus alternatives or when not to use it (e.g., if vendor has pending expenses).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhookDelete WebhookADestructiveIdempotent
Permanently delete a webhook by its ID. Notifications will stop immediately. / Elimina permanentemente un webhook por su ID. Las notificaciones se detendran inmediatamente.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID / ID del webhook |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations by stating 'Notifications will stop immediately', aligning with destructiveHint. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, clear sentences front-loading the action and effect. Bilingual redundancy is acceptable for scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple delete operation, one parameter, annotations present, and output schema exists, the description fully covers necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (id) which is fully described in the schema. The description adds no additional meaning beyond the schema's bilingual description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Permanently delete a webhook by its ID', specifying the verb and resource. Differentiates from sibling tools like get_webhook, create_webhook, update_webhook, and test_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use when wanting to permanently remove a webhook, but does not explicitly specify when not to use or mention alternatives like update_webhook for temporary disabling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_invoiceDuplicate InvoiceA
Duplicate an existing invoice for a new period. Copies all line items, client data, tax rate, and notes. Strips the original ID, document number, status, and timestamps. The new invoice starts as 'draft' with today's date (or the provided date). Perfect for recurring invoices — duplicate last month's invoice and adjust if needed. / Duplica una factura existente para un nuevo periodo. Copia conceptos, cliente, impuestos y notas. La nueva factura empieza como 'borrador' con fecha de hoy.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the invoice to duplicate / ID de la factura a duplicar | |
| newDueDate | No | Due date for the new invoice (YYYY-MM-DD) / Fecha de vencimiento de la nueva factura | |
| newIssueDate | No | Issue date for the new invoice (YYYY-MM-DD), defaults to today / Fecha de emision de la nueva factura |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details what is copied (line items, client, tax rate, notes) and what is stripped (original ID, document number, status, timestamps), plus the new invoice starts as 'draft'. Annotations (destructiveHint: false) align with non-destructive creation, and the description adds valuable behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual, front-loaded with the core action, and each sentence adds value. It is appropriately sized, though the Spanish repetition slightly reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (duplicating with several field groups) and the presence of an output schema, the description covers the key aspects: what is copied, what is reset, and the resulting draft status. It is sufficient for an agent to understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema sufficiently documents parameters. The description adds limited extra meaning: it mentions the new invoice defaults to today's date and allows providing a due date, but does not elaborate on the id parameter beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it duplicates an existing invoice for a new period, copying line items and client data while stripping identifiers and resetting status. This distinguishes it from siblings like create_invoice (new from scratch) or update_invoice (modify existing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly suggests usage for recurring invoices ('Perfect for recurring invoices — duplicate last month's invoice and adjust if needed.'), providing clear context. However, it does not mention when not to use it or alternatives like create_invoice for new invoices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
einvoice_exportExport E-Invoice XMLARead-onlyIdempotent
Export an invoice as e-invoicing XML in a specific format. Supports Facturae (ES B2G), XRechnung-CII (DE), XRechnung-UBL (DE), Factur-X profiles (FR), FatturaPA (IT), PEPPOL-BIS-3 (EU network), UBL and CII (generic). For Facturae, set signed=true to get XAdES-enveloped XML for FACe/AEAT submission. Returns a signed download URL valid for 24 hours.
/ Exporta una factura como XML de facturacion electronica en el formato especificado. Para Facturae con signed=true devuelve XML firmado XAdES para envio a FACe/AEAT.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | E-invoice format. Choose based on recipient country: ES B2G→facturae, DE→xrechnung-cii/ubl, FR→facturx-*, IT→fatturapa, EU PEPPOL→peppol-bis-3, generic→ubl or cii / Formato de factura electronica. | |
| signed | No | If true, returns XAdES-enveloped signed XML (Facturae only). Requires workspace signing certificate configured. / Si true, devuelve XML firmado XAdES (solo Facturae). Requiere certificado de firma configurado. | |
| invoiceId | Yes | Frihet invoice ID to export / ID de la factura a exportar |
Output Schema
| Name | Required | Description |
|---|---|---|
| xml | Yes | Raw e-invoice XML content (the document itself, returned inline by the CF) |
| format | Yes | E-invoice format used (echoes the requested format) |
| signed | Yes | Whether XAdES signature was applied (Facturae + signed=true only) |
| filename | Yes | Suggested filename (e.g. INV-2026-001_Facturae.xml) |
| contentType | Yes | MIME type of the XML payload (application/xml) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that signed XML for Facturae requires a workspace signing certificate and returns a signed download URL valid for 24 hours, which are important behavioral traits beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with key information in English, followed by Spanish translation. While slightly longer due to bilingual content, every sentence adds value and no information is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not cover return values. It adequately covers purpose, format selection, signed behavior, and URL expiration. Minor gap: does not mention potential error conditions or prerequisites beyond cert for signed Facturae.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant value: it explains how to choose format based on recipient country, clarifies that signed only applies to Facturae, and mentions certificate configuration requirement. This goes beyond the schema's enum and type info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports an invoice as e-invoicing XML, lists supported formats, and specifies the signed option. It distinguishes itself from siblings like send_einvoice and validate_einvoice_xml by focusing on generating the XML file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides per-country format guidance (e.g., ES->facturae, DE->xrechnung-cii/ubl) and explains the signed parameter's use case. Does not explicitly mention when not to use or alternatives, but the context is sufficient for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_datevExport DATEVARead-onlyIdempotent
Export accounting data in DATEV EXTF format for import into DATEV Kanzlei-Rechnungswesen or compatible systems. Returns a signed download URL valid for 24 hours.
Supported EXTF formats: • extf-buchungsstapel — Journal entries (Buchungsstapel) — most common, use for P&L/tax • extf-debitoren — Accounts receivable master data (Debitoren-/Kreditorenstamm AR) • extf-kreditoren — Accounts payable master data (Debitoren-/Kreditorenstamm AP)
Output encoding is always CP1252 per DATEV EXTF specification. Date range: both periodStart and periodEnd must be ISO 8601 dates (YYYY-MM-DD).
If the DATEV export backend is not deployed for this workspace, returns an honest 'unavailable' response — never a fabricated file URL. / Exporta datos contables en formato DATEV EXTF para importacion en DATEV o sistemas compatibles.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | DATEV EXTF export format: extf-buchungsstapel (journal entries), extf-debitoren (AR master), extf-kreditoren (AP master) / Formato EXTF de DATEV. | |
| periodEnd | Yes | End of the export period (ISO 8601 YYYY-MM-DD). Inclusive. / Fin del periodo de exportacion (YYYY-MM-DD). Inclusivo. | |
| periodStart | Yes | Start of the export period (ISO 8601 YYYY-MM-DD). Inclusive. / Inicio del periodo de exportacion (YYYY-MM-DD). Inclusivo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fileUrl | Yes | Signed URL to download the DATEV EXTF file |
| encoding | Yes | File encoding — always CP1252 per DATEV EXTF spec |
| filename | Yes | Suggested filename (e.g. EXTF_Buchungsstapel_2026-01.csv) |
| rowCount | Yes | Number of accounting rows in the export |
| fiscalPeriod | Yes | Fiscal period covered (e.g. '2026-01' or '2026-Q1') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey safety (readOnlyHint, idempotentHint). The description adds important operational details: signed download URL valid 24 hours, CP1252 encoding, and honest backend availability response. These go beyond what annotations specify.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but verbose due to bilingual repetition (English and Spanish). Key information is front-loaded, but the dual-language text makes it longer than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and complete parameter coverage, the description covers essential aspects: purpose, available formats, date constraints, encoding, and backend behavior. It does not need to document return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by explaining each format's purpose in plain language, specifying ISO 8601 and inclusive date range, and noting output encoding – details not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Export accounting data in DATEV EXTF format' with a specific verb and resource. It lists three distinct export formats, uniquely identifying this tool among siblings (no other DATEV-specific tool).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. While the description mentions compatibility with DATEV Kanzlei-Rechnungswesen, it does not compare the tool to sibling export utilities like einvoice_export or face_submit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
face_statusGet FACe Submission StatusARead-onlyIdempotent
Poll the status of a FACe (Spain B2G) invoice submission. Returns the current FACe portal state code, description, and the registro number.
Common FACe status codes: • 1200 — Registrada / Registered (submission received) • 1300 — En proceso de contabilización / In accounting (being processed) • 1400 — Contabilizada / Accounted (approved, awaiting payment) • 2400 — Anulada / Cancelled • 3100 — Rechazada / Rejected (check rejectionReason)
/ Consulta el estado de un envío a FACe. Devuelve el código de estado, descripción y número de registro.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | Frihet invoice ID (same as used in face_submit) / ID de la factura |
Output Schema
| Name | Required | Description |
|---|---|---|
| codigo | Yes | FACe status code (e.g. '1200'=Registrada, '1400'=Contabilizada, '3100'=Rechazada) |
| motivo | Yes | Reason/motive associated with the current status (e.g. rejection motive) |
| descripcion | Yes | Human-readable FACe status description |
| numeroRegistro | Yes | FACe registration number for this submission |
| estadoTramitacion | Yes | FACe processing-state code (estado de tramitación) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive. Description adds 'Poll' which aligns but no extra details on rate limits, authentication, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise English paragraph with useful status code list. Spanish translation is somewhat redundant but acceptable. Well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and annotations are present, description covers purpose, return values, and common status codes for interpretation. Adequate for a polling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter invoiceId has 100% schema coverage with description matching. Description does not add further semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Title and description clearly state 'Poll the status of a FACe invoice submission' with specific verb and resource. Distinguishes from sibling tools like face_submit and other status tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies polling but lacks explicit when-to-use vs alternatives. While the FACe context is clear, no guidance on when not to use or comparisons to get_einvoice_status or ticketbai_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
face_submitSubmit to FACe (Spain B2G)A
Submit a Facturae-formatted invoice to the Spanish FACe (Punto General de Entrada de Facturas Electrónicas) B2G portal. The invoice must have a recipient with DIR3 administrative unit codes (órgano gestor, unidad tramitadora, oficina contable). Returns a submission reference (registro) that can be used with face_status to poll the portal.
Modes: • mock — local simulation only, no network call (safe for dev/test) • sandbox — FACe pre-production endpoint (requires sandbox credentials) • production — live FACe SOAP endpoint (default)
/ Envía una factura Facturae al portal FACe del Estado español. Requiere códigos DIR3 en el destinatario (órgano gestor, unidad tramitadora, oficina contable). Devuelve el número de registro para consulta de estado con face_status.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Submission mode: mock (local sim), sandbox (FACe pre-prod), production (live). Default: production. / Modo de envío: mock (simulación local), sandbox (pre-producción FACe), production (real). Por defecto: production. | |
| invoiceId | Yes | Frihet invoice ID to submit / ID de la factura a enviar a FACe |
Output Schema
| Name | Required | Description |
|---|---|---|
| codigo | Yes | FACe result code returned by the portal (resultado.codigo) |
| status | Yes | Submission accepted by FACe (the CF returns an error otherwise) |
| idempotent | No | True if this echoes a prior already-registered submission (no resubmission occurred) |
| descripcion | Yes | Human-readable FACe result description (resultado.descripcion) |
| numeroRegistro | Yes | FACe registration number (número de registro) returned by the portal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by detailing the three modes and the requirement for DIR3 codes. Annotations are minimal (no readOnly, destructive, idempotent hints contradicted), so the description carries the burden but does not fully disclose potential side effects or idempotency behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with English, and includes a Spanish translation. Each sentence adds value, though the bilingual format slightly increases length. No unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the tool's specific domain, the description covers prerequisites (DIR3), modes, return value, and references the sibling tool for subsequent status polling. It is sufficiently comprehensive for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have descriptions in the schema. The description provides additional context for the 'mode' parameter (e.g., default is production, mock is safe) but largely repeats schema information. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it submits a Facturae invoice to the Spanish FACe B2G portal, with specific prerequisites (DIR3 codes) and return value. It distinguishes itself from the sibling face_status by noting the returned reference can be used with that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the three modes (mock, sandbox, production) with guidance on when each is appropriate, including that mock is safe for dev/test. However, it does not explicitly state when to use this tool versus alternatives (e.g., face_status for polling) or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_aiem_calculateCalculate AIEM (Arbitrio Importación Canarias)ARead-onlyIdempotent
Calculate the AIEM (Arbitrio sobre Importaciones y Entrega de Mercancias) for goods imported to or produced in the Canary Islands. Returns applicable AIEM rate, tax base, and amount due for the given product. AIEM is a Canarian surcharge on top of IGIC for protected local industries. Example: ncCode='8471', amount=1000, description='Ordenadores portatiles'. / Calcula el AIEM para mercancias importadas o producidas en Canarias. Devuelve tipo aplicable, base imponible y cuota. El AIEM protege la industria local canaria.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Taxable base amount in EUR / Base imponible en EUR | |
| ncCode | Yes | Nomenclatura Combinada (NC) tariff code / Codigo NC (nomenclatura combinada) | |
| description | No | Product description for audit reference / Descripcion del producto (referencia auditoria) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive. The description adds that it returns rate, base, and amount due, and explains the regional context. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences per language plus an example, no fluff. Front-loaded with essential info. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but implied) and full schema coverage, the description is complete enough. It explains the tax, region, returns, and gives an example. Could mention rate source but that's minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented. The description reinforces with an example (ncCode='8471', amount=1000), adding practical value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool calculates AIEM for goods in the Canary Islands, using a specific verb and resource. It distinguishes from siblings (e.g., get_modelo_180_summary) by focusing on a specific tax calculation rather than summary reports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells when to use it (calculate AIEM for a product) and provides context about AIEM being a surcharge over IGIC for protected industries. It lacks explicit when-not-to-use or alternatives, but the purpose is clear and no sibling directly competes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_bank_rule_createCreate Bank Categorization RuleA
Create a new bank auto-categorization rule. Rules apply automatically to matching incoming transactions. A rule has conditions (AND logic) and actions (assign category, tag, or client). Example: name='Mercadona groceries', condition description contains 'MERCADONA', action category='groceries'. / Crea una nueva regla de categorizacion automatica de transacciones bancarias. Las reglas aplican condiciones (logica AND) y acciones (categoria, etiqueta, cliente).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Rule name for identification / Nombre de la regla | |
| actions | Yes | Actions to apply when rule matches / Acciones a aplicar cuando la regla se cumple | |
| isActive | No | Whether the rule is active (default true) / Si la regla esta activa (por defecto true) | |
| conditions | Yes | Rule conditions (AND logic — all must match) / Condiciones (logica AND — todas deben cumplirse) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false) and non-destructiveness. The description adds that rules apply automatically and use AND logic, providing helpful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences and an example. It is front-loaded with purpose. The bilingual version adds no harm but is not essential. Every part serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and full parameter descriptions, the description covers the essential logic and provides an example. It does not mention prerequisites or error cases, but overall is sufficient for use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, baseline is 3. The description adds an example and explains the AND logic for conditions, enhancing understanding beyond schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a bank auto-categorization rule. It distinguishes from siblings like 'frihet_bank_rules_list' by focusing on creation. The example illustrates the purpose well.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool (to create a rule) and provides an example. It does not discuss when not to use or alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_bank_rules_listList Bank Categorization RulesARead-onlyIdempotent
List all bank auto-categorization rules for the workspace. Rules automatically categorize transactions matching conditions (description, amount, counterparty). Returns rule name, conditions, actions (category/tag/client assign), and active status. / Lista las reglas de categorizacion automatica de transacciones bancarias del workspace. Devuelve nombre, condiciones, acciones (categoria/etiqueta/cliente) y estado activo.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results / Resultados maximos | |
| offset | No | Offset / Desplazamiento | |
| isActive | No | Filter by active/inactive rules / Filtrar por reglas activas/inactivas |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context about the auto-categorization logic and return fields but does not significantly extend behavioral disclosure beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences per language (English and Spanish), front-loading the main action. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (listing rules with optional filters), annotations, and output schema (not shown but present), the description covers the main functionality and return values. It could mention pagination behavior, but the schema parameters handle that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter having a description. The tool description does not add additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists bank auto-categorization rules and explains what these rules do (auto-categorize transactions). It distinguishes from siblings like frihet_bank_rule_create (create rules) and categorize_transaction (manual categorize) by focusing on listing existing rules. The return fields are also mentioned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing rules but does not explicitly state when to use this tool versus alternatives (e.g., frihet_bank_rule_create for creating rules, categorize_transaction for manual categorization). No when-not guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_gl_entry_approveApprove GL EntryAIdempotent
Approve a General Ledger journal entry pending review. Sets entry status to 'approved' and records the approver + timestamp in the audit trail. Requires gestor/admin role. This is a TRUST AREA action — double-check entry ID before calling. Example: entryId='gl_2026_q1_042'. / Aprueba un asiento contable pendiente de revision. Requiere rol gestor/admin. Accion de area de confianza.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Optional approval notes / Notas de aprobacion opcionales | |
| entryId | Yes | GL entry ID to approve / ID del asiento contable a aprobar |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (idempotentHint=true, destructiveHint=false) are not contradicted. The description adds important behavioral context: role requirement, trust area, and what the action does (updates status, records audit trail). No 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively short but unnecessarily includes a full Spanish translation after the English part, creating redundancy. It could be more concise by using one language or a shorter format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 parameters, an output schema, and moderately rich annotations, the description fully covers purpose, effect, role requirements, and a usage warning. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds minimal extra meaning. It provides an example entry ID ('gl_2026_q1_042') but otherwise repeats schema info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Approve a General Ledger journal entry'), the resource, and the effect ('Sets entry status to 'approved' and records the approver + timestamp'). It distinguishes from sibling tool 'frihet_gl_entry_reject'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies required role ('gestor/admin'), warns it's a 'TRUST AREA action', and advises to double-check entry ID. It provides context for when to use but does not explicitly list situations when not to use (beyond the trust area warning).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_gl_entry_audit_logGet GL Entry Audit LogARead-onlyIdempotent
Retrieve the full audit trail for a General Ledger entry — all state transitions (created, submitted, approved, rejected), who acted, and when. Use this to investigate approval history or compliance audits. Example: entryId='gl_2026_q1_042'. / Obtiene el historial de auditoría completo de un asiento contable. Muestra todas las transiciones de estado, quien actuo y cuando.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | GL entry ID / ID del asiento contable |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. Description adds valuable context about the content of the audit trail (state transitions, actors, timestamps) and provides an example, going beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a relevant example. No superfluous content. Spanish translation adds little value but does not harm. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter, the description is complete. Annotations cover safety, output schema exists, and the description adequately describes the return value (audit trail).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (entryId) with full schema coverage (100%). The description does not add meaning beyond the schema's description; the example is helpful but not essential. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('Retrieve') and resource ('full audit trail for a General Ledger entry'). Specifies exact data returned (state transitions, actors, timestamps) and provides an example. Distinct from sibling tools like frihet_gl_entry_approve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs use for 'investigate approval history or compliance audits.' No exclusions or alternatives are needed given the tool's uniqueness; the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_gl_entry_rejectReject GL EntryAIdempotent
Reject a General Ledger journal entry pending review with a required reason. Sets entry status to 'rejected' and records the rejector + reason in the audit trail. Requires gestor/admin role. This is a TRUST AREA action. Example: entryId='gl_2026_q1_042', reason='Importe incorrecto, revisar factura F-2026-042'. / Rechaza un asiento contable pendiente con una razon obligatoria. Requiere rol gestor/admin.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Mandatory rejection reason (visible to submitter) / Razon del rechazo (obligatoria, visible al emisor) | |
| entryId | Yes | GL entry ID to reject / ID del asiento contable a rechazar |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (idempotentHint true, destructiveHint false), description explains it sets status to 'rejected' and records rejector+reason in audit trail. Adds TRUST AREA context. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences covering purpose, effect, role, and example. Bilingual without redundancy. Every sentence adds necessary information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and annotations, description covers core aspects: action, effects, requirements, and example. Slight omission of output details, but output schema compensates. Reasonable completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage. Description adds an example (entryId='gl_2026_q1_042', reason='Importe incorrecto...') that clarifies expected formats and usage, adding value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Reject a General Ledger journal entry pending review', specifying the action and resource. Distinguishes from sibling tools like 'frihet_gl_entry_approve' (approve) and 'frihet_gl_entry_audit_log' (audit log).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies role requirement ('gestor/admin role') and mandatory reason. Implicitly contrasts with approve/audit tools by naming the action. Could explicitly state when not to use, but context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_modelo_200_summaryGet Modelo 200 Summary (Corporate Tax — Annual IS)ARead-onlyIdempotent
Get Modelo 200 summary — annual corporate income tax return (Impuesto sobre Sociedades) for Spanish SLs and SAs. Returns taxable base, deductions, tax rate, withholdings, installment payments made (M202), and net payable/refundable. Filing deadline: 25 days after 6 months from fiscal year end (typically 25 July for Dec FY). Example: year='2025'. / Resumen Modelo 200 — declaracion anual del Impuesto sobre Sociedades para SL/SA. Devuelve base imponible, deducciones, tipo, retenciones, pagos fraccionados y cuota.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Fiscal year (e.g. '2025', defaults to last closed year) / Ejercicio fiscal (ej. '2025', por defecto ultimo ejercicio cerrado) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the agent knows it's safe. The description adds value by detailing the returned data fields and providing a usage example (year='2025') and deadline, enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences in English and two in Spanish, front-loaded with purpose and key details. Every sentence adds value (purpose, returned fields, deadline, example). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a simple read tool with one parameter and an output schema (present but not shown). It covers purpose, target users, deadline, example, and parameter meaning. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes the 'year' parameter. The tool description adds an example ('year="2025"') which is helpful but not essential. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Get Modelo 200 summary' for annual corporate income tax return, lists returned fields (taxable base, deductions, tax rate, etc.), and distinguishes from other tax summary tools via the sibling list. The verb and resource are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description identifies the target users (Spanish SLs and SAs) and gives the filing deadline, providing clear context. It does not explicitly state when not to use it, but the sibling list implies alternatives for other tax forms.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_modelo_202_summaryGet Modelo 202 Summary (Corporate Tax — Installment Payments)ARead-onlyIdempotent
Get Modelo 202 summary — installment payments (pagos fraccionados) for Impuesto sobre Sociedades. Three annual payments: April (1P), October (2P), December (3P). Returns each installment amount, due date, payment status, and cumulative total vs M200 projection. Example: year='2026', installment='1P'. / Resumen Modelo 202 — pagos fraccionados del Impuesto sobre Sociedades. Tres plazos: abril (1P), octubre (2P), diciembre (3P). Devuelve importes, plazos y estado de pago.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Fiscal year of the installments (e.g. '2026') / Ejercicio de los pagos fraccionados (ej. '2026') | |
| installment | No | Specific installment (1P=April, 2P=October, 3P=December) or omit for all three / Plazo especifico (1P=abril, 2P=octubre, 3P=diciembre) u omitir para los tres |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, not destructive. Description adds specific behavioral details: returns installment amounts, due dates, payment status, and cumulative total vs M200 projection. Also explains the three payments. This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with purpose and includes an example. The repetition in Spanish is acceptable for a bilingual context but adds length. Overall concise with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, annotations covering safety, and a complete input schema, the description fully explains the tool's behavior and output. It mentions cumulative total vs M200 projection, which is additional useful context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds an example and explains the enum values (1P=April, etc.), but the parameter descriptions in the schema already cover what they do. The description doesn't add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets a summary for Modelo 202 installment payments, specifies the three installments (1P, 2P, 3P) and what is returned (amounts, due dates, status, cumulative total vs M200 projection). Distinguishes from other modelo summaries by naming the specific form.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an example and describes the tool's purpose, but does not explicitly state when to use this tool versus alternatives (e.g., other modelo summaries like 200, 180). No guidelines on prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_modelo_415_summaryGet Modelo 415 Summary (IGIC Annual Operations >€3,005)ARead-onlyIdempotent
Get IGIC Modelo 415 summary — annual declaration of operations with third parties exceeding €3,005. Canary Islands equivalent of Modelo 347 (peninsular Spain). Returns counterparty list, operation totals, and filing deadline. Example: year='2025'. / Resumen del Modelo 415 IGIC — declaracion anual de operaciones con terceros > €3.005. Equivalente canario del Modelo 347. Devuelve listado de contrapartes, totales y plazo.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Tax year (e.g. '2025', defaults to previous year) / Ejercicio fiscal (ej. '2025', por defecto ejercicio anterior) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint, idempotentHint, and not destructiveHint. The description adds that it returns a counterparty list, operation totals, and filing deadline, which aligns with read-only behavior. However, it does not elaborate on other behaviors like data freshness or authentication requirements beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two brief sentences in English followed by a Spanish translation. It is front-loaded with the essential information, though the bilingual duplication adds minor length without extra content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set (1 optional param), annotations, and presence of an output schema, the description adequately covers the tool's behavior: it specifies the return types (counterparty list, totals, deadline) and includes an example. No further context is needed for a read-only summarization tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'year' is fully described in the schema (100% coverage) with an example and default behavior. The description reiterates the example 'year='2025'' but adds no additional semantic meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves an IGIC Modelo 415 summary, an annual declaration of operations with third parties over €3,005 in the Canary Islands, distinguishing it from similar models like Modelo 347 for peninsular Spain. The verb 'Get' and specified resource 'Modelo 415 Summary' provide clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly equates this to the Canary Islands equivalent of Modelo 347, guiding when to use this tool versus other fiscal declaration summaries. It also notes the €3,005 threshold, implying when it applies, but does not explicitly state when not to use it or list direct alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_modelo_418_summaryGet Modelo 418 Summary (IGIC Monthly Large Enterprises)ARead-onlyIdempotent
Get IGIC Modelo 418 summary — monthly IGIC return for large enterprises (grandes empresas) in the Canary Islands. Returns monthly IGIC collected, deductible, net due, and any carryover. Applicable when annual turnover exceeds the grandes empresas threshold. Example: period='2026-04'. / Resumen del Modelo 418 IGIC — declaracion mensual para grandes empresas en Canarias. Devuelve IGIC repercutido, soportado, cuota a ingresar y saldo a compensar.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Period in YYYY-MM format (defaults to last month) / Periodo YYYY-MM (por defecto mes anterior) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. Description adds specific return fields (collected, deductible, net due, carryover), complementing annotations well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise English sentences followed by Spanish translation. Core purpose front-loaded. Bilingual redundancy acceptable; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a single-optional-param read tool with full schema coverage, annotations, and output schema. All necessary information provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers parameter fully with 100% coverage. Description reinforces format with example period='2026-04', but adds no new semantic detail beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource+scope: 'Get IGIC Modelo 418 summary' for large enterprises in Canary Islands. Distinguishes from other tax model tools like get_modelo_303_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States applicable condition: annual turnover exceeds 'grandes empresas' threshold. Provides example period. No explicit alternatives but context implies exclusive use for IGIC large enterprises.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_modelo_425_summaryGet Modelo 425 Summary (IGIC Annual Recap)ARead-onlyIdempotent
Get IGIC Modelo 425 summary — annual IGIC recap for Canary Islands businesses. Returns aggregated IGIC collected, deductible IGIC, net payable, and filing status. Example: year='2025'. / Resumen del Modelo 425 IGIC — resumen anual IGIC para empresas canarias. Devuelve IGIC repercutido, IGIC soportado, cuota neta y estado de presentacion.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Tax year (e.g. '2025', defaults to previous year) / Ejercicio fiscal (ej. '2025', por defecto ejercicio anterior) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, so the description does not need to repeat these. The description adds useful behavioral context by specifying the exact data returned (aggregated IGIC fields), which aligns with the read-only expectation and adds clarity beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two clear sentences in English followed by a Spanish translation. It is front-loaded with purpose and quickly lists outputs. The bilingual content adds length but is appropriate for the target audience.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, output schema present, comprehensive annotations), the description fully covers the necessary context. It specifies the returned fields, providing a complete understanding of what the tool produces without gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents the 'year' parameter. The description only adds an example value ('year='2025''), which is helpful but does not provide additional semantics or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving the annual IGIC Modelo 425 summary for Canary Islands businesses. It lists returned data (IGIC collected, deductible, net payable, filing status) and uses specific verbs ('Get', 'Returns'). The title and name differentiate from sibling summary tools (e.g., modelo_180, modelo_200).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the title and context ('annual IGIC recap'), but it does not explicitly state when to use this tool versus other summary tools (e.g., quarterly models). No guidance on prerequisites or conditions for use is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_portal_domain_addAdd Custom Portal DomainA
Add a custom domain to the Frihet client portal for white-label branding. Returns DNS records (CNAME) that must be configured at the registrar before verification. Example: domain='portal.miempresa.com'. / Agrega un dominio personalizado al portal de clientes Frihet para marca blanca. Devuelve los registros DNS (CNAME) que deben configurarse en el registrador antes de verificar.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Custom domain to add (e.g. 'portal.miempresa.com') / Dominio personalizado (ej. 'portal.miempresa.com') | |
| workspaceId | No | Target workspace ID (defaults to caller's workspace) / ID del workspace destino |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool returns DNS records (CNAME) that must be configured before verification, which adds useful behavioral context beyond the annotations. However, it does not mention idempotency, error handling, or whether the tool can overwrite existing domains. Annotations are all false, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two main sentences in English plus Spanish bilingual repetition. It is front-loaded with the key purpose. The bilingual content is slightly redundant but does not detract significantly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple but could benefit from mentioning next steps after adding (e.g., use frihet_portal_domain_verify to complete configuration). The output schema exists, so return values are covered. The description is adequate but not fully complete regarding the workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters adequately. The description adds an example for the 'domain' parameter but does not mention 'workspaceId' or provide additional semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (add), the resource (custom domain to Frihet client portal), and the purpose (white-label branding). It also distinguishes from sibling tools like frihet_portal_domain_verify and frihet_portal_domain_remove by noting that DNS records must be configured before verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for adding a custom domain, but it does not provide explicit guidance on when to use this tool versus alternatives (e.g., frihet_portal_domain_verify, frihet_portal_domain_remove). It also does not mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_portal_domain_removeRemove Custom Portal DomainADestructiveIdempotent
Remove a custom domain from the Frihet client portal. The portal will revert to the default Frihet subdomain. Example: domain='portal.miempresa.com'. / Elimina un dominio personalizado del portal de clientes Frihet. El portal volverá al subdominio predeterminado de Frihet.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Custom domain to remove / Dominio personalizado a eliminar |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructive and idempotent. Description adds that the portal reverts to default subdomain, providing useful behavioral context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and front-loaded with key action and effect. Bilingual repetition is slightly redundant but acceptable for audience. Every sentence is purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-parameter destructive tool with output schema and clear annotations, the description adequately covers the behavior and result. Example aids understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'domain' with 100% schema description coverage. Baseline is 3; the description includes an example ('domain='portal.miempresa.com''), which adds marginal value but does not significantly enhance meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Remove a custom domain' and specifies the resource (Frihet client portal). Distinguishes from siblings like add and verify by its action and effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use, but the verb and context make usage clear. Sibling names imply alternatives, but there is no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_portal_domain_verifyVerify Custom Portal DomainARead-onlyIdempotent
Verify DNS propagation for a custom portal domain added via frihet_portal_domain_add. Returns verification status (pending/verified/failed) and any DNS errors. DNS propagation can take up to 48 hours — retry if status is 'pending'. Example: domain='portal.miempresa.com'. / Verifica la propagacion DNS de un dominio de portal personalizado. Devuelve estado (pending/verified/failed). La propagacion puede tardar hasta 48h.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Custom domain to verify / Dominio personalizado a verificar |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. Description adds retry guidance and 48-hour propagation timing, adding value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two clear sentences plus an example, front-loaded. Bilingual text adds slight redundancy but remains concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple verification tool: explains prerequisite, retry behavior, statuses, and propagation delay. Output schema exists, so return values are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, description only adds an example domain. Baseline 3 is appropriate as the schema already documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states 'Verify DNS propagation for a custom portal domain', specifies the resource and action, and distinguishes from sibling tool frihet_portal_domain_add by naming it as prerequisite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: use after domain_add, retry if status is pending. Provides an example. No explicit when-not-to-use, but the narrow purpose makes it obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frihet_portal_onboard_link_generateGenerate Portal Self-Onboard LinkA
Generate a time-limited, single-use self-onboard invitation link for a prospective client. The client follows the link to register their company details (CIF, address, contact) without requiring manual data entry by the gestor. Requires gestor/admin role. Example: email='cliente@empresa.com', expiresInHours=72. / Genera un enlace de auto-registro para un cliente potencial. El cliente completa sus datos sin que el gestor tenga que introducirlos manualmente. Requiere rol gestor/admin.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Prospective client name (pre-fills the form) / Nombre del cliente (pre-rellena el formulario) | |
| Yes | Prospective client email address / Email del cliente potencial | ||
| workspaceId | No | Target gestor workspace ID / ID del workspace del gestor | |
| expiresInHours | No | Link expiry in hours, 1-168 (default 72h) / Caducidad del enlace en horas (por defecto 72h) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so this is a non-read, non-destructive operation. The description transparently states the link is time-limited and single-use. It could elaborate on side effects (e.g., no client record created until registration), but overall adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two clear paragraphs with bilingual text. It is front-loaded with the core purpose and includes role requirement and example. Minor redundancy from bilingual text reduces conciseness slightly, but overall it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 4 parameters (1 required) and an output schema (not shown but present). The description covers purpose, role, example, and key behavior (time-limited, single-use). It does not explain the output format, but the output schema presumably covers that. Adequate for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds value by providing a concrete example (email='...', expiresInHours=72) and bilingual context, helping the agent understand typical usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a time-limited, single-use self-onboard invitation link for a prospective client. It distinguishes itself from sibling tools by specifying a unique purpose: client self-registration without manual data entry by the gestor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly requires gestor/admin role and provides a usage example. It does not explicitly list when not to use or alternatives, but the context 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.
frihet_tax_id_vies_lookupLookup Tax ID via VIES (EU VAT Validation)ARead-onlyIdempotent
Validate an EU VAT number (CIF intracomunitario) via the VIES (VAT Information Exchange System). Returns company name, address, and validity status from the official EU registry. Essential for intra-EU invoicing compliance — always validate before adding a EU client. Example: vatNumber='ES12345678A', countryCode='ES'. / Valida un numero de IVA intracomunitario (CIF) via el sistema VIES de la UE. Devuelve nombre, direccion y validez desde el registro oficial europeo.
| Name | Required | Description | Default |
|---|---|---|---|
| vatNumber | Yes | EU VAT number to validate (without country prefix) / Numero de IVA intracomunitario (sin prefijo de pais) | |
| countryCode | Yes | ISO 3166-1 alpha-2 country code (e.g. 'ES', 'DE', 'FR') / Codigo de pais ISO (ej. 'ES', 'DE', 'FR') |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds that it returns company name, address, and validity status from official EU registry, which is consistent. No contradictions; behavioral traits are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences in English followed by Spanish translation (appropriate for bilingual context). Front-loaded with purpose and key usage instruction. No superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with output schema implied, description covers purpose, usage, parameters, and expected output. Mentions intra-EU invoicing compliance context. No gaps given tool complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions. Description adds example values and clarifies that vatNumber is without country prefix, providing additional meaning beyond schema. Lowers cognitive load for agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool validates an EU VAT number via VIES system, with specific verb 'validate' and resource 'EU VAT number'. It distinguishes itself from siblings as the only VAT validation tool among many invoice and accounting tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance: 'always validate before adding a EU client', essential for intra-EU invoicing compliance. Includes an example. Does not explicitly mention when not to use, but context makes usage clear; no direct alternative tool exists among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gestoria_aging_consolidatedConsolidated AR Aging (Gestoria)ARead-onlyIdempotent
Get a cross-client AR aging report for a gestor — totals bucketed by current / 30-60 / 60-90 / 90+ days overdue, a per-workspace breakdown, and the top overdue invoices. Defaults to the authenticated gestor; pass ownerUid to query a specific gestor (requires elevated scope). Useful for dunning prioritisation and end-of-month chase lists. / Obtiene un informe de antiguedad de saldos cruzando todos los clientes del gestor — totales por tramo (al dia / 30-60 / 60-90 / 90+ dias), desglose por espacio y top vencidas. Util para priorizar reclamaciones y listas de cobro de fin de mes.
| Name | Required | Description | Default |
|---|---|---|---|
| ownerUid | No | Gestor UID to query (defaults to authenticated caller; elevated scope required for other UIDs) / UID del gestor (por defecto el llamante) |
Output Schema
| Name | Required | Description |
|---|---|---|
| totals | Yes | |
| topOverdue | Yes | |
| byWorkspace | Yes | |
| generatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, destructiveHint, idempotentHint) are consistent; description adds default behavior and scope requirement, plus output structure details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Bilingual description adds length, though information is front-loaded. Each sentence provides value, but could be more concise if single-language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and tool is read-only, description covers all needed aspects: what it returns, defaults, and usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (ownerUid) with schema description; description adds context about defaulting to caller and elevated scope, enhancing the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a cross-client AR aging report with specific bucketed totals, per-workspace breakdown, and top overdue invoices, distinguishing it from sibling tools like list_invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions use cases (dunning prioritisation, end-of-month chase lists) and provides context on defaults and elevated scope requirement, but does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gestoria_message_sendSend Gestoria MessageB
Send a message in a contextual thread between a gestor (accountant) and a client. Threads attach to a document request, a filing item, or a fiscal obligation — context is preserved so both sides see what the message is about. Useful for chasing a missing document, replying to a client's question, or annotating a presentation. Example: workspaceId='ws_abc', parentType='documentRequest', parentId='dr_q3_iva', body='Falta el extracto bancario de septiembre'. / Envia un mensaje en un hilo contextual entre gestor y cliente. Los hilos se anclan a una solicitud de documento, presentacion o obligacion fiscal — ambas partes ven a que se refiere. Util para pedir documentos, responder dudas o anotar presentaciones.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Message body (plain text, 1-4000 chars) / Cuerpo del mensaje (texto plano) | |
| parentId | Yes | ID of the parent entity (document request / filing item / obligation) / ID de la entidad padre | |
| parentType | Yes | Thread parent kind / Tipo de hilo: documentRequest (solicitud de documento), filingItem (presentacion fiscal), obligation (obligacion fiscal) | |
| workspaceId | Yes | Client workspace ID the thread belongs to / ID del espacio de trabajo del cliente |
Output Schema
| Name | Required | Description |
|---|---|---|
| createdAt | No | |
| messageId | Yes | |
| unreadCounts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide minimal behavioral hints (readOnlyHint=false, destructiveHint=false). The description adds that context is preserved but does not disclose side effects (e.g., notifications, permissions, whether thread is auto-created).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Has two paragraphs (English and Spanish) that repeat the same information. Could be more concise by using one language, but front-loaded with the action and examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the essential purpose, parent types, and use cases. Lacks details on thread creation behavior (if thread doesn't exist) and permissions. Output schema exists but is not shown; description does not need to cover return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage with bilingual explanations. The description adds a concrete example mapping to parameters, reinforcing meaning of enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it sends a message in a contextual thread between gestor and client, and lists the parent types. Distinguishes the send action from list/bulk/template siblings, but does not explicitly mention them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides examples of when to use (chasing documents, replying, annotating) and a concrete example. Does not specify when not to use or mention alternatives like gestoria_messages_list or template tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gestoria_messages_listList Gestoria MessagesARead-onlyIdempotent
List messages in a contextual gestor/cliente thread, newest first. Use before (message ID or ISO timestamp) to paginate backwards through history. Returns up to limit messages plus a hasMore flag so the agent knows when to stop. / Lista los mensajes de un hilo gestor/cliente, mas recientes primero. Usa before (ID o fecha) para paginar hacia atras. Devuelve hasta limit mensajes con flag hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages to return (1-100, default 50) / Mensajes maximos | |
| before | No | Cursor: messages older than this (message ID or ISO date) / Cursor: mensajes anteriores a este | |
| parentId | Yes | ID of the parent entity / ID de la entidad padre | |
| parentType | Yes | Thread parent kind / Tipo de hilo: documentRequest (solicitud de documento), filingItem (presentacion fiscal), obligation (obligacion fiscal) | |
| workspaceId | Yes | Client workspace ID / ID del espacio de trabajo |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | Yes | |
| messages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the tool is safe. The description adds behavioral details such as returning messages newest first, using 'before' for pagination, and providing a 'hasMore' flag, which complements the annotations with useful execution context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The English part is concise and front-loaded with the core purpose and key usage details. The Spanish repetition is somewhat redundant but does not detract significantly. The description efficiently conveys all necessary information in a compact form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not shown), the description appropriately covers the key aspects: what is listed, ordering, pagination, and the hasMore flag. It does not cover error handling or exhaustive parameter explanations, but these are standard for list tools and not required for completeness here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all parameters, so the description adds little beyond the schema. It clarifies the usage of 'before' (message ID or ISO timestamp) and 'limit' (max 100, default 50), but these are also present in the schema descriptions. No additional semantic depth is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists messages in a gestor/cliente thread, with ordering (newest first) and pagination details. It explicitly distinguishes from siblings like 'gestoria_message_send' by specifying the thread context, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (listing messages in a thread) and how to paginate using 'before' and 'hasMore'. However, it does not explicitly state when not to use it or mention alternatives like 'gestoria_message_send', but the distinction is implicit due to the list vs. send nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gestoria_template_bulk_sendBulk Send Gestoria TemplateA
Send the same document request template to up to 500 client workspaces in one call. Each spawned request triggers the per-client notification handler (email + in-app). Honours allowGestoriaCommunications=false on the client user doc (opt-out). Uses periodOverrides to plug runtime values (quarter/year/month) into template variables. Returns a per-client outcome with success count, failures, and total wall-clock duration. Trust Area: RGPD — recipients must already have granted accountant access. Example: templateId='tpl_iva_q', clientWorkspaceIds=['ws_a','ws_b','ws_c'], periodOverrides={quarter:3, year:2026}. / Envia la misma plantilla a hasta 500 espacios cliente en una sola operacion. Respeta opt-out allowGestoriaCommunications=false.
| Name | Required | Description | Default |
|---|---|---|---|
| templateId | Yes | Template ID (from `gestoria_template_create`) / ID de la plantilla | |
| periodOverrides | No | Override template period variables in the bulk send / Sobrescribir variables de periodo (trimestre, ano, mes) | |
| clientWorkspaceIds | Yes | Target client workspace IDs (1-500) / IDs de espacios cliente destino |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | Yes | |
| success | Yes | |
| totalDuration | No | Wall-clock duration in ms |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: triggers per-client notification handler, honours opt-out flag, uses periodOverrides for template variables, returns per-client outcome with success count/failures/duration, and trust area requirement. This provides rich behavioral context that annotations (only readOnlyHint=false, etc.) do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual (English/Spanish), which doubles its length but is necessary for the audience. It front-loads the core action and then adds extra details in a logical order. Every sentence adds value: bulk limit, notification, opt-out, periodOverrides, output, trust, example. No fluff, though bilingual repetition slightly reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (bulk send with overrides, notifications, opt-out, trust area), the description covers all essential aspects: purpose, usage context, behavioral details, parameter semantics with example, and output summary. Since an output schema exists, the description's mention of 'per-client outcome with success count, failures, and total duration' is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter coverage with descriptions. The description adds value by providing a concrete example (templateId='tpl_iva_q', clientWorkspaceIds=['ws_a','ws_b','ws_c'], periodOverrides={quarter:3, year:2026}) that clarifies usage, especially for the nested periodOverrides object. This exceeds the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it sends the same document request template to up to 500 client workspaces. It specifies the verb 'Send', the resource 'document request template', and the scope 'up to 500 client workspaces'. This distinguishes it from siblings like 'gestoria_message_send' (presumably single message) and 'gestoria_template_create' (template creation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that each request triggers notifications, respects opt-out, uses periodOverrides, and requires recipients to have accountant access (RGPD). It provides context for when to use this tool (bulk sending) but does not explicitly list alternatives or when not to use it. The sibling 'gestoria_message_send' is implied as an alternative for single sends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gestoria_template_createCreate Gestoria TemplateA
Create a reusable document request template that the gestor can bulk-send to many client workspaces. Template body supports plain-text variable interpolation (e.g. {{quarter}}, {{year}}). dueDateOffsetDays sets when the request is due relative to the bulk-send date. attachmentRequired=true enforces clients to upload a file before marking complete. Example: name='IVA trimestral', title='Documentacion IVA {{quarter}}/{{year}}', description='Adjunta extractos bancarios y facturas emitidas del {{quarter}}', dueDateOffsetDays=14, attachmentRequired=true. / Crea una plantilla de solicitud de documento reutilizable que el gestor puede enviar en masa a varios espacios cliente.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Internal template name (shown to gestor only) / Nombre interno | |
| title | Yes | Title rendered to the client (supports {{variables}}) / Titulo visible al cliente | |
| variables | No | Variable definitions for interpolation / Definiciones de variables | |
| description | Yes | Description / instructions for the client (supports {{variables}}) / Descripcion e instrucciones | |
| dueDateOffsetDays | Yes | Days from send until due (0-365) / Dias desde envio hasta vencimiento | |
| attachmentRequired | No | Require an uploaded file before completion (default: false) / Requiere archivo |
Output Schema
| Name | Required | Description |
|---|---|---|
| templateId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds details beyond annotations: variable interpolation, dueDateOffsetDays relative to bulk-send, attachmentRequired enforcement. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Contains both English and Spanish versions, which is useful for bilingual contexts but slightly redundant. Front-loaded with purpose, includes example for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and annotations covering non-read, non-destructive nature, description sufficiently explains behavior, parameters, and usage context for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all parameters, but description adds concrete context like variable interpolation and example, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Create' and resource 'reusable document request template'. Differentiates from siblings like gestoria_template_bulk_send and gestoria_message_send by specifying bulk-send purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for creating templates intended for bulk-sending, but lacks explicit guidance on when to use this vs alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bank_accountGet Bank AccountARead-onlyIdempotent
Get a single connected bank account by ID. Returns alias, IBAN (last 4 digits), currency, current balance, and last sync timestamp. / Obtiene una cuenta bancaria conectada por su ID. Devuelve alias, IBAN (ultimos 4 digitos), divisa, saldo actual y ultima sincronizacion.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bank account ID / ID de la cuenta bancaria |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| alias | No | |
| balance | No | |
| currency | No | |
| createdAt | No | |
| ibanLast4 | No | Last 4 digits of IBAN (security masked) |
| updatedAt | No | |
| lastSyncedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds useful context by specifying the exact return fields (alias, IBAN last 4, currency, balance, sync timestamp), enhancing transparency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consists of two sentences (English and Spanish), front-loads the action, and includes only essential information. Every sentence is informative and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one required parameter and an output schema exists. The description provides a list of return fields, further aiding understanding. Despite the presence of many sibling tools, the description is complete for its straightforward purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the parameter 'id' is already well-documented in the schema. The description does not add additional semantic meaning beyond what is in 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'single connected bank account by ID', and lists the return fields, distinguishing it from siblings like list_bank_accounts which retrieves all accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a specific account by ID, which implicitly differentiates it from list_bank_accounts, but it does not explicitly state when to use this tool versus alternatives or provide context for exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_clientGet ClientARead-onlyIdempotent
Get a single client by their ID. Returns full contact details. / Obtiene un cliente por su ID. Devuelve todos los datos de contacto.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Client ID / ID del cliente |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| No | ||
| phone | No | |
| taxId | No | |
| address | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's addition of 'Returns full contact details' adds some context but not critical behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, bilingual, and 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, output schema present), the description is complete enough for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'id', and the description does not add extra meaning beyond what the schema provides, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a single client by ID and returns full contact details, distinguishing it from sibling tools like list_clients or update_client.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and description, but there is no explicit guidance on when to use or not use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_depositGet DepositARead-onlyIdempotent
Get a single deposit by its ID. / Obtiene un deposito por su ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deposit ID / ID del deposito |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| date | No | |
| notes | No | |
| amount | Yes | |
| status | No | |
| clientId | Yes | |
| currency | No | |
| createdAt | No | |
| reference | No | |
| updatedAt | No | |
| clientName | No | |
| description | No | |
| paymentMethod | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds 'Get' which is consistent, but provides no further behavioral details (e.g., authorization requirements, rate limits). With annotations covering the safety aspects, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (two sentences in two languages) and gets straight to the point. It could be slightly more efficient by dropping the Spanish duplicate, but it remains clear and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (not shown but indicated true), the description does not need to explain return values. For a simple retrieval tool, the description covers the essential purpose. No mention of edge cases or prerequisites, but the tool's simplicity makes this acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a bilingual description for the single required parameter 'id'. The description merely restates 'by its ID', adding no extra meaning. Baseline 3 is correct when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a single deposit by its ID', using a specific verb and resource. It distinguishes from sibling tools like list_deposits (which retrieves multiple) and create/update/delete_deposit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., list_deposits for multiple deposits, get_invoice for invoices). Context is implied by the tool name, but explicit usage conditions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_einvoice_statusGet E-Invoice StatusARead-onlyIdempotent
Poll the status of an e-invoice dispatch workflow. Returns current step, ack ID (network confirmation), and download URLs once complete. Poll every 5–10 seconds until status is 'succeeded', 'failed', or 'cancelled'.
If the status backend is not deployed for this workspace, returns an honest 'unavailable' response — never a fabricated status. / Consulta el estado de un flujo de envio de factura electronica.
| Name | Required | Description | Default |
|---|---|---|---|
| workflowRunId | Yes | Hatchet workflow run ID returned by send_einvoice / ID del run de workflow |
Output Schema
| Name | Required | Description |
|---|---|---|
| step | Yes | Current or last workflow step name |
| ackId | No | Network acknowledgement ID (PEPPOL SBDH / SDI protocol ID / etc.) |
| error | No | Error message if status is 'failed' |
| status | Yes | |
| xmlUrl | No | Signed URL to download the raw XML file |
| pdfA3Url | No | Signed URL to download the PDF/A-3 envelope (Factur-X only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds significant context beyond annotations (read-only, idempotent, non-destructive): polling behavior, honest unavailability, and return fields. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The English portion is concise and front-loaded with key purpose and behavior. The Spanish duplicate adds no value for English agents and could be omitted, but overall the description is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, the description covers polling behavior, expected response fields, and honest error handling. Missing details on invalid workflowRunId or rate limits, but generally sufficient for a polling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter (workflowRunId) is well-described in the schema. The description does not add new parameter semantics beyond contextualizing the polling process. Baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool polls the status of an e-invoice dispatch workflow, specifying what is returned (current step, ack ID, download URLs). This verb+resource combination distinguishes it from sibling tools like send_einvoice and other status endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit polling interval (5-10 seconds) and termination conditions ('succeeded', 'failed', 'cancelled'). Also notes honest 'unavailable' response. Lacks explicit alternatives or when-not-to-use, but given context of e-invoice, usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceGet InvoiceARead-onlyIdempotent
Get a single invoice by its ID. Returns the full invoice including line items, totals, and status. / Obtiene una factura por su ID. Devuelve la factura completa con conceptos, totales y estado.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Invoice ID / ID de la factura |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| items | No | |
| notes | No | |
| total | No | |
| status | No | |
| dueDate | No | |
| taxRate | No | |
| createdAt | No | |
| issueDate | No | |
| updatedAt | No | |
| clientName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds that it returns full invoice including line items, totals, and status, providing useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences in English and Spanish, front-loaded with the key action, and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description adequately explains the return value (full invoice with line items, totals, status). It is complete for a get-by-ID tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter 'id' is well-described. The description does not add additional meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a single invoice by its ID', specifying the action and resource. It distinguishes from sibling tools like list_invoices (multiple invoices) and get_invoice_pdf (returns PDF).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when needing a single invoice by ID, but does not explicitly mention when not to use or alternatives. Given the simplicity and name, it's clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoice_pdfGet Invoice PDFARead-onlyIdempotent
Get the PDF for an invoice. Returns a URL to download the PDF or binary info. / Obtiene el PDF de una factura. Devuelve una URL de descarga o informacion del binario.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Invoice ID / ID de la factura |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | |
| contentType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive). Description adds that it returns URL or binary info, but no additional behavioral context (e.g., size limits, auth needs).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences (bilingual) with no unnecessary words. Front-loaded with the core action. Every sentence provides value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one parameter and existing output schema; description sufficiently conveys function and output. Minor lack of error handling mention but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only parameter 'id' is documented in schema with description 'Invoice ID / ID de la factura'. Description does not add extra meaning beyond schema, so baseline 3 applies due to 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states that the tool retrieves the PDF for an invoice, specifying the output as a URL or binary info. Distinguishes from sibling 'get_invoice' which returns invoice data, not PDF.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit 'when to use' or alternatives, but the context of siblings (only tool to get PDF) and description implying PDF retrieval makes usage clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_kitchen_ticketGet Kitchen TicketARead-onlyIdempotent
Get a single kitchen ticket by ID. Returns full ticket details including all items, their individual statuses, station assignment, and table reference. / Obtiene un ticket de cocina por ID. Devuelve todos los detalles: items, estados individuales, estacion asignada y referencia de mesa.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Ticket ID / ID del ticket |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| items | No | |
| status | No | queued | preparing | ready | served | cancelled |
| tableRef | No | |
| createdAt | No | |
| stationId | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, covering the safety profile. The description adds context about the return content (items, statuses, station, table) but no additional behavioral traits. This is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey the purpose and return content, including a Spanish translation. No wasted words; front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter, output schema exists) and rich annotations, the description covers all necessary context: what the ticket includes, and the fact it's a single retrieval. The output schema handles detailed structure, so this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single 'id' parameter, which is clearly described. The overall description adds meaning about what the tool returns, but does not enhance the parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets a single kitchen ticket by ID and returns full details including items, statuses, station, and table reference. This distinguishes it from sibling tools like list_kitchen_tickets and update_kitchen_ticket.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives like list_kitchen_tickets. While the operation is straightforward, no when-not or alternative usage is mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modelo_130_summaryGet Modelo 130 Summary (IRPF Estimated Payment)ARead-onlyIdempotent
Get IRPF estimated payment summary for Modelo 130 filing (freelancers/self-employed in Spain). Returns quarterly net income, deductible expenses, previous payments, and amount due. Example: period='2026-Q1' / Obtiene el resumen del pago fraccionado IRPF para el Modelo 130 (autonomos). Devuelve rendimiento neto, gastos deducibles, pagos previos y cuota a ingresar.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Period in format YYYY-QN (e.g. '2026-Q1') / Periodo en formato YYYY-QN |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| model | No | |
| months | No | Months covered by the period (YYYY-MM) |
| period | No | YYYY-QN (303/130) or YYYY (390) |
| summary | No | |
| deadline | No | |
| readonly | No | Marks the payload as an informational summary, never filed to AEAT |
| totalDue | No | |
| modelo130 | No | |
| modelo303 | No | |
| modelo390 | No | |
| modeloCode | No | |
| totalsByRate | No | |
| totalDeductible | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, nondestructive. Description adds specific return fields (net income, expenses, payments, amount due) and an example, enhancing understanding of behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus example; front-loaded with purpose. Bilingual content is justified for context. No filler, but example could be integrated more tightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple tool (1 param, no required) and existence of output schema, description sufficiently explains purpose, return values, and usage context. No gaps for agent to select and invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes the single parameter with format and example. Description repeats the example but adds no new meaning beyond schema. Baseline 3 due to 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states verb 'Get' and resource 'IRPF estimated payment summary for Modelo 130 filing' with target users and returned fields. Distinguishes from sibling tax form tools by naming specific tax and audience.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context (quarterly IRPF for Spanish freelancers) but lacks explicit when-to-use, when-not-to-use, or alternatives guidance. Implied differentiation from other tax models via name, but no direct comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modelo_180_summaryGet Modelo 180 Summary (IRPF Rentals Annual)ARead-onlyIdempotent
Get IRPF annual informative summary for rental income withholdings (Modelo 180, Spain). Returns total retentions per tenant, property, and annual aggregate. Example: period='2025' / Obtiene el resumen anual de retenciones sobre alquileres para el Modelo 180. Devuelve retenciones totales por inquilino, inmueble y agregado anual.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Year in format YYYY (e.g. '2025') / Ejercicio en formato YYYY |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| model | No | |
| months | No | Months covered by the period (YYYY-MM) |
| period | No | YYYY-QN (303/130) or YYYY (390) |
| summary | No | |
| deadline | No | |
| readonly | No | Marks the payload as an informational summary, never filed to AEAT |
| totalDue | No | |
| modelo130 | No | |
| modelo303 | No | |
| modelo390 | No | |
| modeloCode | No | |
| totalsByRate | No | |
| totalDeductible | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, so the description's role is lighter. It adds value by describing what data is returned (retentions per tenant, property, annual aggregate) and includes an example, fully aligning with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences plus an example) and front-loaded with the essential purpose. Every sentence contributes meaning, and the bilingual format is a minor addition that does not harm conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, full annotation coverage, and an output schema, the description provides complete context: what the tool does, what it returns, and an example. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and describes the parameter 'period' as 'Year in format YYYY'. The description adds an example ('period='2025'') but does not provide significant additional semantics beyond the schema, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves the IRPF annual summary for rental income withholdings (Modelo 180 in Spain), specifying it returns retentions per tenant, property, and annual aggregate. This distinguishes it from sibling tools like get_modelo_130_summary which target different tax forms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates this tool is for rental income withholdings under Modelo 180, providing clear context. However, it does not explicitly state when to use it versus other modelo summaries, though the naming and context make the distinction apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modelo_303_summaryGet Modelo 303 Summary (IVA Quarterly)ARead-onlyIdempotent
Get IVA (VAT) quarterly summary for Modelo 303 filing in Spain. Returns aggregated totals by tax rate, deductible IVA, net amount due, and filing deadline. Example: period='2026-Q1' / Obtiene el resumen trimestral del IVA para el Modelo 303 en Espana. Devuelve totales por tipo impositivo, IVA deducible, cuota a ingresar y plazo.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Period in format YYYY-QN (e.g. '2026-Q1') or YYYY for annual / Periodo en formato YYYY-QN o YYYY |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| model | No | |
| months | No | Months covered by the period (YYYY-MM) |
| period | No | YYYY-QN (303/130) or YYYY (390) |
| summary | No | |
| deadline | No | |
| readonly | No | Marks the payload as an informational summary, never filed to AEAT |
| totalDue | No | |
| modelo130 | No | |
| modelo303 | No | |
| modelo390 | No | |
| modeloCode | No | |
| totalsByRate | No | |
| totalDeductible | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's a safe read operation. The description adds value by specifying return fields (totals by tax rate, deductible IVA, net amount due, filing deadline) and providing an example period.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences in English and a Spanish translation, plus an example. It is front-loaded with essential information, though the Spanish repetition adds minor redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is simple (one parameter, read-only, output schema exists), the description covers the main purpose, return fields, and example input. It does not mention whether the period parameter is optional (required: 0), but overall it is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'period' is fully described in the schema (format YYYY-QN or YYYY) and the description gives an example value ('2026-Q1'). Since schema coverage is 100%, the description adds marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get IVA (VAT) quarterly summary for Modelo 303 filing in Spain', providing a specific verb and resource. It distinguishes from sibling tools like get_modelo_130_summary by explicitly naming the form number and country.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool over alternatives (e.g., other tax summary tools like get_modelo_130_summary). The context signals show many similar tools, but the description does not differentiate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modelo_347_summaryGet Modelo 347 Summary (Operations >€3,005 Annual Recap)ARead-onlyIdempotent
Get annual informative summary of operations exceeding €3,005 per counterparty (Modelo 347, Spain). Returns per-party totals for clients and vendors above the threshold. Example: period='2025' / Obtiene el resumen anual de operaciones con terceros superiores a 3.005€ (Modelo 347). Devuelve totales por cliente/proveedor que superen el umbral.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Year in format YYYY (e.g. '2025') / Ejercicio en formato YYYY |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| model | No | |
| months | No | Months covered by the period (YYYY-MM) |
| period | No | YYYY-QN (303/130) or YYYY (390) |
| summary | No | |
| deadline | No | |
| readonly | No | Marks the payload as an informational summary, never filed to AEAT |
| totalDue | No | |
| modelo130 | No | |
| modelo303 | No | |
| modelo390 | No | |
| modeloCode | No | |
| totalsByRate | No | |
| totalDeductible | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds that it returns per-party totals, but does not clarify the default behavior if the optional 'period' parameter is omitted, leaving ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with key details, but it repeats the same information in Spanish, increasing length unnecessarily. Still efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only summary with one optional parameter and an output schema, the description covers purpose, threshold, return content, and an example. Missing default behavior for 'period' is a minor gap, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the 'period' parameter already described as a year in YYYY format. The description repeats the example but adds no additional meaning or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves an annual summary of operations exceeding €3,005 per counterparty (Modelo 347, Spain), specifying it returns per-party totals for clients and vendors. The title reinforces the threshold and annual nature, distinguishing it from other Modelo summaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for Spanish annual operations reporting but does not explicitly compare to sibling Modelo summaries (e.g., 303, 130) or provide when-not-to-use guidance. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modelo_390_summaryGet Modelo 390 Summary (IVA Annual Recap)ARead-onlyIdempotent
Get IVA annual summary for Modelo 390 filing in Spain. Returns full-year totals by rate, total deductible IVA, and annual balance. Example: period='2025' / Obtiene el resumen anual del IVA para el Modelo 390. Devuelve totales anuales por tipo, IVA deducible total y resultado anual.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Year in format YYYY (e.g. '2025') / Ejercicio en formato YYYY |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| model | No | |
| months | No | Months covered by the period (YYYY-MM) |
| period | No | YYYY-QN (303/130) or YYYY (390) |
| summary | No | |
| deadline | No | |
| readonly | No | Marks the payload as an informational summary, never filed to AEAT |
| totalDue | No | |
| modelo130 | No | |
| modelo303 | No | |
| modelo390 | No | |
| modeloCode | No | |
| totalsByRate | No | |
| totalDeductible | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true, so the description adds minimal behavioral context beyond confirming it returns totals. It does not mention potential error conditions, authentication needs, or rate limits. The description adds value by describing return content but not behavioral traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences in English followed by a bilingual Spanish repetition. Every sentence serves a purpose: defining the tool, specifying outputs, and providing an example. No superfluous words. The most important information comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no enums, output schema exists) and the richness of annotations and schema, the description covers the essential aspects. It explains the purpose, return values, and parameter usage. No significant gaps; the example aids understanding. The presence of an output schema compensates for any missing detail on return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the 'period' parameter with a description and format. The description adds an explicit example ('period='2025'') and repeats the format in Spanish. This provides concrete usage guidance, raising the score above baseline 3. No other parameters exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: getting the IVA annual summary for Modelo 390 filing in Spain. It specifies the returned data (full-year totals by rate, deductible IVA, annual balance) and includes an example with 'period'. This distinguishes it from similar annual models (like Modelo 180, 347, etc.) by naming 'Modelo 390' and 'annual'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for annual IVA summary through the term 'annual recap' and the example with a year. However, it does not explicitly state when to use this tool versus other modelo summaries (e.g., quarterly). No exclusion criteria or alternatives are mentioned, but the context of 'annual' provides sufficient guidance for a knowledgeable user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_monthly_summaryGet Monthly SummaryARead-onlyIdempotent
Get complete monthly financial summary — revenue, expenses, profit, tax liability, invoice stats, expense breakdown by category. Defaults to current month. Use this to answer questions about financial performance, cash flow, or monthly P&L. / Resumen financiero mensual completo — ingresos, gastos, beneficio, impuestos, estadisticas de facturas, desglose de gastos por categoria. Por defecto el mes actual.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month in YYYY-MM format (defaults to current month). Example: '2026-03' / Mes en formato YYYY-MM (por defecto el mes actual) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds that it defaults to the current month, which is useful but not extensive. No behavioral contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary purpose. It includes bilingual text (English and Spanish) which, while doubling length, is justified for a multilingual audience. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations provide safety traits, the description adequately covers the tool's inputs and outputs. It lists the summary contents and default behavior. No major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'month' has a description in the schema with format and default note. The description adds minimal extra meaning beyond the schema, just the mention of current month default. Schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides a complete monthly financial summary with specific items (revenue, expenses, profit, etc.). The verb 'Get' and resource 'monthly summary' are specific, and the tool is distinct from siblings like get_modelo_303_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to answer questions about financial performance, cash flow, or monthly P&L.' This provides clear context. However, it does not mention when not to use it or list alternative tools for more granular queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productGet ProductARead-onlyIdempotent
Get a single product/service by its ID. / Obtiene un producto/servicio por su ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Product ID / ID del producto |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| taxRate | No | |
| createdAt | No | |
| unitPrice | Yes | |
| updatedAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false. Description adds no extra behavioral context (e.g., auth requirements, rate limits). The annotations sufficiently cover safety and idempotency, so a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, one in English and one in Spanish. Concise and front-loaded with the core action. Could be slightly tighter (e.g., drop Spanish if not needed), but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a complete output schema and minimal required input, the description is sufficient for a simple get-by-id operation. It is complete enough given the tool's low complexity and existing metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter (id). Description says 'by its ID' which merely repeats the schema description. No additional meaning or constraints are added beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get a single product/service by its ID', specifying a specific verb (Get) and resource (product/service). It distinguishes from siblings like list_products (which lists all) and create_product (which creates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool vs alternatives (e.g., list_products for multiple products). The description does not mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quoteGet QuoteARead-onlyIdempotent
Get a single quote/estimate by its ID. Returns the full quote with line items and totals. / Obtiene un presupuesto por su ID. Devuelve el presupuesto completo con conceptos y totales.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Quote ID / ID del presupuesto |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| items | No | |
| notes | No | |
| total | No | |
| status | No | |
| createdAt | No | |
| updatedAt | No | |
| clientName | No | |
| validUntil | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds that it returns full quote with line items and totals, which is beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences in English, then Spanish repetition. Slightly redundant but front-loaded and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with single parameter, output schema present, and description clearly states what is returned. Fully adequate for retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (id parameter described). Description adds no additional meaning or examples beyond the schema field description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb ('Get'), specific resource ('quote/estimate by its ID'), and distinguishes from siblings like list_quotes or create_quote. Also specifies what is returned (full quote with line items and totals).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this vs alternatives (e.g., list_quotes). It's implied but not stated. Lacks when-not or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recurring_invoiceGet Recurring InvoiceARead-onlyIdempotent
Get full details of a recurring invoice template by ID. Returns template name, frequency, next run date, recipient, line items, and active/paused status. / Obtiene los detalles completos de una plantilla de factura recurrente por ID. Devuelve nombre, frecuencia, proxima ejecucion, destinatario, lineas y estado.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Recurring invoice template ID / ID de la plantilla de factura recurrente |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | No | |
| nextRun | No | |
| createdAt | No | |
| frequency | No | |
| lineItems | No | |
| recipient | No | |
| updatedAt | No | |
| templateName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds value by specifying the fields returned, but does not disclose additional behavioral traits such as authorization requirements, rate limits, or response size. Given strong annotations, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loads the primary action, and lists return fields. The bilingual text (English/Spanish) adds some redundancy but is justified for a multilingual audience. It is efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with annotations and output schema present, the description adequately conveys the purpose and returned data. It could mention that the output schema details the full structure, but that is already implied. The description is complete enough given the contextual signals.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a description for the 'id' parameter. The description only restates 'by ID', adding no new semantics beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves full details of a recurring invoice template by ID, and enumerates the returned fields (name, frequency, next run date, etc.), distinguishing it from sibling tools like list, create, update, delete, pause, resume, and run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool vs alternatives like list_recurring_invoices. It does not state prerequisites, exclusion criteria, or scenarios where this tool is preferred. The implicit context ('by ID') is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reservationGet ReservationARead-onlyIdempotent
Get a single reservation by ID. Returns full booking details: guest, property, dates, channel, payment status, and notes. / Obtiene una reserva por ID. Devuelve todos los detalles de la reserva.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Reservation ID / ID de reserva |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| notes | No | |
| nights | No | |
| status | Yes | |
| checkIn | Yes | |
| guestId | No | |
| checkOut | Yes | |
| currency | No | |
| channelId | No | |
| createdAt | No | |
| updatedAt | No | |
| guestCount | Yes | |
| propertyId | Yes | |
| totalAmount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds that it returns booking details, but does not disclose other behaviors like auth requirements or rate limits. Given annotations cover the safety profile, description adds minimal extra behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two clear English sentences with a Spanish translation that is redundant. Concise and front-loaded, but the bilingual duplication slightly reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description lists return fields, which is sufficient given the existence of an output schema. The tool is simple with one parameter and clear purpose, so the description is complete enough for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single 'id' parameter described as 'Reservation ID / ID de reserva.' Description mentions 'by ID' but adds no further semantic meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states action: 'Get a single reservation by ID.' It specifies verb and resource, and lists return fields. It distinguishes from siblings like list_reservations (list) and create_reservation (create).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage context: use when you have a reservation ID and need details. No explicit when-not or alternatives, but the purpose 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.
get_saleGet POS SaleARead-onlyIdempotent
Get a single POS sale by ID. Returns full sale details: terminal, items, payment method, amounts, and status. / Obtiene una venta POS por ID. Devuelve todos los detalles: terminal, articulos, metodo de pago, importes y estado.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sale ID / ID de venta |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| items | No | |
| status | No | |
| currency | No | |
| createdAt | No | |
| updatedAt | No | |
| terminalId | No | |
| amountCents | No | |
| paymentMethod | No | |
| refundedAmountCents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds details on return content but no new behavioral traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, though it duplicates content in Spanish. The key information is front-loaded, but the bilingual redundancy slightly reduces efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, the description adequately explains what is returned (full sale details with key fields), covering all necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the 'id' parameter already described as 'Sale ID / ID de venta'. The description's mention of 'by ID' adds no new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a single POS sale by ID' and lists the returned fields (terminal, items, etc.), making it distinct from sibling tools like list_sales or refund_sale.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (requires an ID) and specifies the scope (single sale), but does not explicitly mention when not to use it or suggest alternatives like list_sales for finding IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_time_entryGet Time EntryARead-onlyIdempotent
Get full details of a single time tracking entry by ID. Returns project, user, hours, description, billable flag, date and status. / Obtiene los detalles completos de una entrada de tiempo por su ID. Devuelve proyecto, usuario, horas, descripcion, facturabilidad, fecha y estado.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Time entry ID / ID de la entrada de tiempo |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| date | No | |
| hours | Yes | |
| status | No | |
| userId | No | |
| billable | No | |
| createdAt | No | |
| projectId | No | |
| updatedAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds return field details but no further behavioral context beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences (English and Spanish), front-loaded with purpose, and no wasted words. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple retrieval tool with output schema, annotations, and single parameter. No gaps in explaining what the tool does and returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'id' parameter, and description does not add additional meaning beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets full details of a single time tracking entry by ID and lists the returned fields (project, user, hours, etc.). Distinguishes from sibling tools like list_time_entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly suggests use for retrieving one entry, but does not explicitly mention alternatives or when not to use. Could be improved by referencing list_time_entries for multiple entries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_time_summaryGet Time SummaryARead-onlyIdempotent
Get aggregated time tracking summary for a workspace or specific team member. Returns total hours, billable hours, non-billable hours, and estimated cost for the period. Filter by date range and optionally by user ID for per-member breakdowns. / Obtiene el resumen agregado de seguimiento de tiempo para el espacio de trabajo o un miembro. Devuelve horas totales, facturables, no facturables y coste estimado del periodo. Filtra por rango de fechas y opcionalmente por usuario para desglose por miembro.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date ISO 8601 (YYYY-MM-DD) / Fecha fin | |
| from | Yes | Start date ISO 8601 (YYYY-MM-DD) / Fecha inicio | |
| userId | No | Filter to a specific member (omit for workspace total) / Filtrar a un miembro concreto (omitir para total workspace) | |
| groupBy | No | Group results by user, project, or day (default: no grouping) / Agrupar resultados por usuario, proyecto o dia | |
| projectId | No | Filter to a specific project / Filtrar a un proyecto concreto |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | |
| from | Yes | |
| groups | No | |
| totalHours | Yes | |
| billableHours | Yes | |
| estimatedCostEur | No | |
| nonBillableHours | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds details about returned fields (hours, costs) and filtering behavior, providing useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two terse sentences in English followed by Spanish translation. No extraneous words; front-loads purpose and key details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and 100% parameter coverage, description covers core functionality. Missing explicit mention of grouping option, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context about 'date range' (from/to) and 'user ID for per-member breakdowns', but does not cover groupBy or projectId beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'get', resource 'aggregated time tracking summary', and scope 'workspace or specific team member'. Distinguishes from sibling 'list_time_entries' which returns raw entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for aggregated data with date filtering and optional user filter, but does not explicitly contrast with alternatives like 'list_time_entries' or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vendorGet VendorARead-onlyIdempotent
Get a single vendor/supplier by their ID. Returns full contact details. / Obtiene un proveedor por su ID. Devuelve todos los datos de contacto.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Vendor ID / ID del proveedor |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| No | ||
| phone | No | |
| taxId | No | |
| address | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. Description adds that it returns contact details, which is beyond annotations but not rich behavioral context. No mention of auth, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences in English and Spanish, front-loaded with purpose and return info. No superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with an output schema (present), the description adequately covers purpose, parameter, and return value hint. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the 'id' parameter described. Description adds no additional meaning beyond the schema's description of 'Vendor ID'. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves a single vendor/supplier by ID and returns full contact details. Verb 'Get' and resource 'vendor/supplier' are specific. Differentiates from sibling tools like list_vendors, create_vendor, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Does not explicitly state when to use this tool versus alternatives (e.g., list_vendors for multiple vendors). Usage is implied by the tool's simple nature, but no explicit guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_webhookGet WebhookARead-onlyIdempotent
Get a single webhook configuration by its ID. / Obtiene la configuracion de un webhook por su ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID / ID del webhook |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| active | No | |
| events | Yes | |
| secret | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds no behavioral traits beyond these, missing opportunities to mention output format or that it returns a single object.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences (English and Spanish) with zero unnecessary words. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool with full annotations and output schema, the description is complete. No missing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter description. The description only restates 'by its ID', adding no new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Get), the resource (webhook configuration), and the method (by its ID). It effectively distinguishes from the sibling tool list_webhooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like list_webhooks. Usage is implied (when you know the ID), but no context or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invite_team_memberInvite Team MemberA
Invite a new member to the workspace by email address. An invitation email is sent — the member must accept before gaining access. Roles: owner (full access), admin (manage account, no billing), member (operational access), viewer (read-only). Example: email='ana@example.com', role='member' / Invita a un nuevo miembro al espacio de trabajo por correo electronico. Se envia un email de invitacion — el miembro debe aceptar antes de acceder. Roles: owner (acceso total), admin (gestion sin facturacion), member (acceso operativo), viewer (solo lectura).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name for the invitation (optional) / Nombre para la invitacion (opcional) | |
| role | Yes | Role to assign (owner cannot be invited, must be transferred) / Rol a asignar (owner no se puede invitar, debe transferirse) | |
| Yes | Email address of the invitee / Email del invitado |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| role | No | |
| Yes | ||
| status | No | |
| joinedAt | No | |
| createdAt | No | |
| invitedAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: an invitation email is sent, the member must accept before gaining access, and lists available roles. Annotations confirm a write operation with no destructive or idempotent traits, and the description adds context beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Reasonably concise but includes bilingual text that duplicates information. The key details are front-loaded, but the repetition reduces efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the invitation flow, role options, and example. Assumes output schema explains return values. Missing prerequisites (e.g., required permissions) and fails to mention that the invitee must not already be a member, but overall adequate for a simple invite action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by providing an example and expanding role meanings (e.g., 'admin (manage account, no billing)'), which helps the agent understand parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'invite a new member to the workspace by email address', using a specific verb and resource. Distinguishes from sibling tools like list_team_members and remove_team_member, though fails to explicitly note that inviting an existing member is not allowed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions that an invitation email is sent and acceptance is required, but does not specify when to use this tool over alternatives (e.g., update_team_member_role for role changes) or include prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kitchen_flow_summaryKitchen Flow SummaryARead-onlyIdempotent
Slow-station detection: aggregates open kitchen tickets per station and flags the bottleneck (station with the highest open-ticket count). Returns per-station openTickets count, oldest wait time in seconds, and an isBottleneck flag. Call this first to diagnose kitchen throughput issues before drilling into individual tickets. / Deteccion de cuello de botella: agrega tickets abiertos por estacion y marca la mas saturada. Devuelve openTickets, tiempo de espera mas antiguo y flag isBottleneck por estacion. Llamar primero para diagnosticar problemas de rendimiento de cocina.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| stations | Yes | |
| generatedAt | Yes | |
| totalOpenTickets | Yes | |
| bottleneckStationId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context: it aggregates data, returns a bottleneck flag, and provides wait times. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The English portion is concise and front-loaded. However, the Spanish duplicate makes the description longer than necessary. It's still readable and efficient enough for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, a relatively simple output, and comprehensive annotations, the description fully explains the tool's purpose, usage, and return values, making it complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the schema fully covers them. The description adds no parameter information, but none is needed. Baseline for 0 params is 4, but the description's clarity on output compensates for the lack of param details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool aggregates open kitchen tickets per station and flags the bottleneck. It specifies the returned fields (openTickets, oldest wait, isBottleneck). This distinguishes it from siblings like list_kitchen_tickets or get_kitchen_ticket.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit instruction: 'Call this first to diagnose kitchen throughput issues before drilling into individual tickets.' Provides a clear when-to-use and implies not to use for other purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ksef_submitSubmit to KSeF (Poland)A
Submit an invoice to the Polish KSeF (Krajowy System e-Faktur) national e-invoicing system. Poland requires e-invoicing for B2B transactions (mandatory phase rolling out 2025).
Modes: • mock — local simulation (no network call, safe for dev/test) • sandbox — KSeF test environment (demo.ksef.mf.gov.pl) • production — live KSeF endpoint (ksef.mf.gov.pl)
NOTE: This tool is a forward-compatible stub. The KSeF transport is infra-ready in Frihet-ERP but not yet exposed as a live public endpoint (production gated on KSeF cert issuance). Until activated, all calls return a NotImplementedYet error with guidance. / NOTA: Este tool es un stub anticipatorio. El transporte KSeF está infra-ready en Frihet-ERP pero aún no expuesto como endpoint público (producción pendiente del certificado KSeF). Hasta su activación, todas las llamadas devuelven un error NotImplementedYet con instrucciones.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Submission mode: mock (local sim), sandbox (KSeF test), production (live KSeF). Default: production. / Modo de envío: mock (simulación), sandbox (test KSeF), production (KSeF real). | |
| invoiceId | Yes | Frihet invoice ID to submit to KSeF / ID de la factura a enviar a KSeF |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| _note | No | Guidance on when the tool activates |
| invoiceId | No | |
| _notImplemented | No | Always true — KSeF endpoint not yet exposed as a live API |
| _plannedEndpoint | No | Planned REST endpoint path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (which show non-readonly, non-destructive), description reveals the tool is a forward-compatible stub that returns NotImplementedYet until certificates are issued, plus mode behaviors. This fully prepares the agent for expected behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections, but includes redundant bilingual content (English and Spanish) which nearly doubles length. Front-loaded with purpose, but the duplication could be trimmed without loss of clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and only 2 parameters, the description fully covers tool behavior, current limitations, and mode environments. No gaps in information needed for correct agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for both parameters (mode enum, invoiceId). Description repeats mode explanations already present in schema, adding no new semantic value beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool submits invoices to Polish KSeF system, with explicit modes (mock, sandbox, production). Distinguishes from generic einvoice tools by specifying the national system.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context for each mode and discloses that the production endpoint is not yet active, guiding agents to use mock/sandbox for testing. Lacks explicit alternatives for other e-invoicing systems, but the tool name implies Poland-specific usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leave_approveApprove Leave RequestAIdempotent
TRUST AREA — HR DECISION. Approve a pending leave request. Logs decision with timestamp and approver. Idempotent: re-approving an already approved leave is a no-op. / AREA DE CONFIANZA — DECISION RRHH. Aprueba una solicitud de permiso pendiente. Registra la decision.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional approval note / Nota de aprobacion opcional | |
| leaveId | Yes | Leave request ID / ID de la solicitud |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| type | No | Leave type slug (vacation, sick, personal, etc.) |
| reason | No | |
| status | No | |
| endDate | No | |
| createdAt | No | |
| decidedAt | No | |
| decidedBy | No | |
| startDate | No | |
| updatedAt | No | |
| employeeId | No | |
| durationDays | No | |
| decisionReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation idempotentHint is reinforced by explicit statement 'Idempotent: re-approving an already approved leave is a no-op.' Additionally, it discloses logging behavior (timestamp, approver) not covered by annotations. Adds valuable context beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief but includes redundant bilingual text, doubling the length without adding unique information. It front-loads the purpose, which is good, but the redundancy reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations, the description covers idempotency and logging. However, it does not mention conditions (e.g., cannot approve if already rejected) or return values. Adequate but leaves room for more completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline score is 3. The description does not add any parameter-specific meaning beyond the schema's brief descriptions. It mentions logging but does not connect to parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Approve a pending leave request' using a clear verb+resource structure. It distinguishes from siblings like leave_reject and leave_cancel, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via 'TRUST AREA — HR DECISION' but does not explicitly specify when to use or alternatives. The idempotency note is a behavioral hint, not a usage guideline. Lacks direct mention of when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leave_cancelCancel Leave RequestAIdempotent
Cancel a leave request. Typically used by the requesting employee before approval, or by HR after approval (which may trigger schedule rollback). / Cancela una solicitud de permiso (por el empleado o RRHH).
| Name | Required | Description | Default |
|---|---|---|---|
| leaveId | Yes | Leave request ID / ID de la solicitud |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| type | No | Leave type slug (vacation, sick, personal, etc.) |
| reason | No | |
| status | No | |
| endDate | No | |
| createdAt | No | |
| decidedAt | No | |
| decidedBy | No | |
| startDate | No | |
| updatedAt | No | |
| employeeId | No | |
| durationDays | No | |
| decisionReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context beyond annotations: mentions potential schedule rollback after approval. Annotations already indicate idempotency and non-destructive nature; description enriches with use-case-specific behavior. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with verb, includes bilingual text. No unnecessary words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one parameter. Annotations cover idempotency; description covers usage scenarios and side effects. Output schema exists for return values. Complete and sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (leaveId) with full schema coverage (100%). Description adds no extra meaning beyond what the schema already provides, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (cancel), the resource (leave request), and distinguishes between use cases (employee before approval or HR after approval). Differentiates from sibling tools like leave_approve, leave_reject, and leave_request_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context on when to use (by employee before approval, by HR after approval) and mentions a consequence (schedule rollback). Lacks explicit comparison to alternatives like leave_reject, but still offers clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leave_listList Leave RequestsARead-onlyIdempotent
List leave/PTO requests with optional filters. Filter by employee, status (pending/approved/rejected/cancelled), or period (date range). Useful for HR dashboards, calendar views, balance tracking. / Lista solicitudes de permisos con filtros opcionales (empleado, estado, periodo).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Period end ISO 8601 (YYYY-MM-DD) / Fin periodo | |
| from | No | Period start ISO 8601 (YYYY-MM-DD) / Inicio periodo | |
| after | No | Cursor for cursor-based pagination / Cursor | |
| limit | No | Max results (1-100) / Resultados maximos | |
| offset | No | Offset / Desplazamiento | |
| status | No | Filter by status / Filtrar por estado | |
| employeeId | No | Filter by employee ID / Filtrar por empleado |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds little beyond stating 'List'. The description does not disclose pagination behavior (cursor-based via 'after' parameter) or other traits. With annotations present, the bar is lower, but the description provides minimal additional behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences in English plus a bilingual note. It is front-loaded with the action, no redundant words, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, optional filters, and an output schema, the description covers the essential purpose and filter options. It does not mention pagination explicitly, but the parameters cover that. For a read-only list tool with output schema, the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all parameters. The description mentions some filters but adds no new semantics beyond what's in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', resource 'leave/PTO requests', and scoping 'with optional filters'. It lists specific filter dimensions (employee, status, period), distinguishing it from sibling list tools. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions use cases ('HR dashboards, calendar views, balance tracking') which implies when to use, but it does not explicitly state when not to use this tool or compare it to alternatives among siblings. However, the context is sufficiently clear for a listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leave_rejectReject Leave RequestAIdempotent
TRUST AREA — HR DECISION. Reject a pending leave request with a required reason. Reason is mandatory for transparency and labor-law compliance. / AREA DE CONFIANZA — DECISION RRHH. Rechaza una solicitud con motivo obligatorio.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Required rejection reason / Motivo obligatorio de rechazo | |
| leaveId | Yes | Leave request ID / ID de la solicitud |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| type | No | Leave type slug (vacation, sick, personal, etc.) |
| reason | No | |
| status | No | |
| endDate | No | |
| createdAt | No | |
| decidedAt | No | |
| decidedBy | No | |
| startDate | No | |
| updatedAt | No | |
| employeeId | No | |
| durationDays | No | |
| decisionReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: 'TRUST AREA — HR DECISION' signals permission level, and labor-law compliance emphasizes regulatory implications. Annotations confirm idempotentHint=true, and description aligns by noting reason is mandatory for each rejection. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences in English followed by Spanish translation. Front-loaded with trust area and purpose. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with 2 required params and output schema. Description covers purpose, mandatory nature of reason, and compliance context. Could briefly state that only pending requests can be rejected, but implied by 'pending leave request'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have clear descriptions. The description merely reiterates that reason is mandatory, adding minimal value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Reject' and the specific resource 'pending leave request'. Distinguishes from siblings like leave_approve, leave_cancel, and leave_request_create by emphasizing rejection with mandatory reason.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Indicates 'TRUST AREA — HR DECISION' suggesting HR role, but does not explicitly state when to use versus alternatives like leave_cancel or leave_approve. No exclusions or when-not scenarios provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leave_request_createCreate Leave RequestA
Create a new leave/PTO request for an employee. Types: 'vacation', 'sick', 'personal', 'parental', 'unpaid', 'training'. Dates must be ISO 8601 (YYYY-MM-DD). Status starts as 'pending' awaiting manager approval. / Crea una nueva solicitud de vacaciones/permiso. Estado inicial 'pending' pendiente aprobacion.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Leave type slug (vacation, sick, personal, parental, unpaid, training) / Tipo de permiso | |
| reason | No | Optional reason / Motivo opcional | |
| endDate | Yes | End date ISO 8601 (YYYY-MM-DD) / Fecha fin | |
| startDate | Yes | Start date ISO 8601 (YYYY-MM-DD) / Fecha inicio | |
| employeeId | Yes | Employee ID / ID del empleado |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| type | No | Leave type slug (vacation, sick, personal, etc.) |
| reason | No | |
| status | No | |
| endDate | No | |
| createdAt | No | |
| decidedAt | No | |
| decidedBy | No | |
| startDate | No | |
| updatedAt | No | |
| employeeId | No | |
| durationDays | No | |
| decisionReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a mutating operation (readOnlyHint: false) but not destructive. The description adds that status starts as 'pending' awaiting approval. However, it does not disclose other side effects like notifications or required permissions. Given minimal annotations, the description adds moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences in English and Spanish, conveying essential info efficiently. The bilingual content is somewhat redundant but does not harm clarity. It is front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward creation tool, the description covers purpose, types, date format, and initial status. It does not explain return values (though output schema exists), error handling, or prerequisites, but remains adequate given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description reiterates the date format and lists types, but adds little beyond what the schema provides. Baseline 3 is appropriate as the description does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Create a new leave/PTO request for an employee.' It mentions specific leave types, date format, and initial status, clearly distinguishing it from sibling tools like leave_approve, leave_cancel, leave_list, and leave_reject.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on leave types and date formatting, but fails to specify when to use this tool versus alternatives (e.g., when to create vs. list or approve requests). It does not offer explicit usage or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bank_accountsList Bank AccountsARead-onlyIdempotent
List all connected bank accounts for the workspace. Returns alias, IBAN (last 4 digits only for security), currency, balance, and last sync timestamp. / Lista todas las cuentas bancarias conectadas al espacio de trabajo. Devuelve alias, IBAN (solo ultimos 4 digitos por seguridad), divisa, saldo y ultima sincronizacion.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) / Resultados maximos | |
| offset | No | Offset / Desplazamiento |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds behavioral details such as security masking of IBAN and the specific fields returned, which is useful beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences in English followed by the same in Spanish. While efficient, the bilingual repetition may be unnecessary for an AI agent, but it remains clear and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a full output schema (implied) and complete annotation coverage, the description adequately rounds out the tool's behavior. It mentions returned fields and security, but does not cover potential edge cases like empty results or rate limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full coverage (100%) with descriptions for both 'limit' and 'offset'. The description does not add additional semantic meaning or usage guidance for these parameters beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool lists all connected bank accounts for the workspace, specifying the exact fields returned (alias, IBAN with masking, currency, balance, timestamp). This distinguishes it from the sibling tool 'get_bank_account', which likely retrieves a single account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates usage for listing all bank accounts, but does not mention when not to use it or provide alternatives like 'get_bank_account' for single account retrieval. No explicit guidance on prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_client_activitiesList Client ActivitiesARead-onlyIdempotent
List all CRM activities for a client with optional pagination. Returns calls, emails, meetings, and tasks logged against the client. / Lista todas las actividades CRM de un cliente con paginacion opcional.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) / Resultados maximos | |
| offset | No | Offset / Desplazamiento | |
| clientId | Yes | Client ID / ID del cliente |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint, etc.), the description adds that pagination is optional and details what is returned (calls, emails, etc.). However, it omits potential constraints like date range or sorting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise English sentences with a Spanish translation. No fluff, front-loaded with the primary action. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately covers purpose, resource, and pagination. Missing details like ordering or error scenarios, but overall sufficient for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each parameter. The description only adds context about optional pagination, which is already implied by limit and offset, so little extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'all CRM activities for a client', and specifies the types of activities returned (calls, emails, meetings, tasks). It distinguishes from siblings like log_client_activity (create) and list_client_notes (notes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides the general use case (listing CRM activities) but lacks explicit guidance on when to use this tool versus alternatives, no when-not-to-use or context-specific instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_client_contactsList Client ContactsARead-onlyIdempotent
List all contacts for a client with optional pagination. Returns name, email, phone, role, and primary flag. / Lista todos los contactos de un cliente con paginacion opcional.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) / Resultados maximos | |
| offset | No | Offset / Desplazamiento | |
| clientId | Yes | Client ID / ID del cliente |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by mentioning optional pagination and the fields returned, which is consistent and helpful but not extensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences in English and Spanish, no wasted words, front-loaded with key information. Highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (expected to cover return format), the description sufficiently mentions returned fields. Missing ordering info, but overall adequate for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are described. The description adds 'optional pagination' but does not provide new details beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'contacts for a client', and specifies the returned fields. It distinguishes well from siblings like list_clients or list_invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage is clear (when you need contacts for a client), but no explicit guidance on when not to use this tool or alternatives. Siblings include delete_client_contact but no creation/update tool, so no direct alternative is mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_client_notesList Client NotesARead-onlyIdempotent
List all notes for a client with optional pagination. / Lista todas las notas de un cliente con paginacion opcional.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) / Resultados maximos | |
| offset | No | Offset / Desplazamiento | |
| clientId | Yes | Client ID / ID del cliente |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, non-destructive, and idempotent. The description adds the optional pagination detail but doesn't disclose any other behavioral traits (e.g., sorting, rate limits). This is adequate given the annotations cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two languages but still efficient) and front-loaded with the English version. It could be more succinct but is not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, all parameters are documented in schema, and there is an output schema. The description covers the core function. It could mention ordering or that it returns all notes for a client, but it's complete enough for a listing operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all parameters described). The description only mentions 'optional pagination' which aligns with limit/offset but adds no deeper semantic meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists notes for a client with optional pagination. It uses a specific verb ('list') and resource ('notes'), and distinguishes itself from sibling tools like create_client_note or list_client_activities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives, no exclusions, and no context about prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_clientsList ClientsARead-onlyIdempotent
List all clients/customers with optional pagination. Returns contact info, tax IDs, and addresses. / Lista todos los clientes con paginacion opcional. Devuelve informacion de contacto, NIF/CIF y direcciones.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by name or email / Buscar por nombre o email | |
| after | No | Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor | |
| limit | No | Max results (1-100) / Resultados maximos | |
| stage | No | Filter by CRM stage / Filtrar por etapa del CRM | |
| fields | No | Comma-separated field names to return (e.g. 'id,name,email') / Campos a devolver | |
| offset | No | Offset / Desplazamiento |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description aligns with annotations (readOnly, idempotent, non-destructive) and adds value by specifying return content (contact info, tax IDs, addresses). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences in English and Spanish, no wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks mention of field selection ('fields' parameter) and filtering ('stage'), which are important for agent to know. Output schema exists but description could be more comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add significant insight beyond schema, e.g., omitting mention of 'fields' or 'stage' parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'List', resource 'clients/customers', and scope 'all with optional pagination', distinguishing it from sibling tools like get_client.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions optional pagination and return fields, but lacks explicit guidance on when to use this vs. get_client for a single client or other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_depositsList DepositsARead-onlyIdempotent
List all deposits with optional pagination and date range filters. Returns deposits sorted by date (newest first). Example: from='2026-01-01', to='2026-03-31', clientId='abc', limit=50 / Lista todos los depositos con paginacion y filtros de fecha opcionales.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date filter (YYYY-MM-DD) / Fecha fin | |
| from | No | Start date filter (YYYY-MM-DD) / Fecha inicio | |
| after | No | Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor | |
| limit | No | Max results (1-100) / Resultados maximos | |
| fields | No | Comma-separated field names to return (e.g. 'id,amount,status') / Campos a devolver | |
| offset | No | Offset / Desplazamiento | |
| status | No | Filter by status (e.g. 'pending', 'applied', 'refunded') / Filtrar por estado | |
| clientId | No | Filter by client ID / Filtrar por ID de cliente |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds sorting order (newest first) and pagination methods (cursor/offset), going beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with an example, front-loaded. Bilingual text adds length but is acceptable. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, return values are covered. Description covers purpose, pagination, sorting, and filters. Adequate for an 8-parameter list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions for all parameters. The description adds an example but no new semantic meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states "List all deposits" with verb and resource, specifies sorting order (newest first), and distinguishes from sibling tools like get_deposit or create_deposit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides example usage and mentions optional pagination/date filters, but does not explicitly compare to sibling tools. However, as the only list tool for deposits, context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_expensesList ExpensesARead-onlyIdempotent
List all expenses with optional pagination and date range filters. Returns expenses sorted by date (newest first). Example: from='2026-01-01', to='2026-03-31', limit=50 / Lista todos los gastos con paginacion y filtros de fecha opcionales.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date filter (YYYY-MM-DD) / Fecha fin | |
| from | No | Start date filter (YYYY-MM-DD) / Fecha inicio | |
| after | No | Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor | |
| limit | No | Max results (1-100) / Resultados maximos | |
| fields | No | Comma-separated field names to return (e.g. 'id,description,amount') / Campos a devolver | |
| offset | No | Offset / Desplazamiento | |
| category | No | Filter by expense category (e.g. 'office', 'travel') / Filtrar por categoria | |
| vendorId | No | Filter by vendor ID / Filtrar por ID de proveedor |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds that results are sorted newest first and provides an example, which is useful but doesn't conflict with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences with core functionality, an example, and bilingual information. No redundant content, key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers major features (pagination, date range, sorting). Output schema exists, so return values are documented. Missing mention of category/vendor filters, but they are in schema. Adequate for a read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptions in the schema (100% coverage). The description adds an example showing common parameter usage, but no additional semantic meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists expenses with optional pagination and date range filters, and returns results sorted by date. It is specific to expenses and distinguishes from sibling list tools like list_invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., search for expenses, other expense actions). Users must infer from the name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invoicesList InvoicesARead-onlyIdempotent
List all invoices with optional pagination and filters. Returns a paginated list sorted by issue date (newest first). Supports filtering by status (draft/sent/paid/overdue/cancelled) and date range. Example: status='paid', from='2026-01-01', to='2026-03-31', limit=20 / Lista facturas con paginacion y filtros opcionales. Soporta filtrado por estado y rango de fechas.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date filter in ISO 8601 (YYYY-MM-DD) / Fecha fin | |
| from | No | Start date filter in ISO 8601 (YYYY-MM-DD) / Fecha inicio | |
| after | No | Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor | |
| limit | No | Max results per page (1-100, default 50) / Resultados por pagina | |
| fields | No | Comma-separated field names to return (e.g. 'id,clientName,total') / Campos a devolver | |
| offset | No | Number of results to skip / Resultados a saltar | |
| status | No | Filter by invoice status / Filtrar por estado | |
| clientId | No | Filter by client ID / Filtrar por ID de cliente | |
| seriesId | No | Filter by invoice series ID / Filtrar por ID de serie |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds specifics: paginated results, sorting by issue date, and filtering capabilities. It does not contradict annotations and provides useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus an example; front-loaded with key functionality. The bilingual text adds length but is still relatively concise. Could be slightly trimmed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters, full schema coverage, and output schema, the description covers the main aspects: purpose, filtering, pagination, sorting, and an example. It is complete enough for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-defined. The description adds an example and clarifies that pagination is optional. It repeats some schema info but provides clear context beyond raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists invoices with optional pagination and filters, and specifies the sort order (newest first). This distinguishes it from related tools like 'get_invoice' (single) and 'search_invoices' (likely more extensive).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what filters are available but does not explicitly state when to use this over siblings like 'search_invoices' or 'get_invoice'. Usage context is implied but no when-not or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_kitchen_stationsList Kitchen StationsARead-onlyIdempotent
List all kitchen stations. Returns station id, name, and active status. Use kitchen_flow_summary to see per-station ticket load and bottlenecks. / Lista todas las estaciones de cocina. Devuelve id, nombre y estado activo. Usa kitchen_flow_summary para ver carga por estacion y cuellos de botella.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) | |
| offset | No | Offset / Desplazamiento |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so safety is covered. Description adds no additional behavioral traits beyond what annotations provide, which is adequate but not enhanced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two effective sentences in English, front-loaded with purpose and usage. However, the entire description is duplicated in Spanish, which adds unnecessary length for English-speaking agents. Still, the structure is clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool, the description covers purpose, return fields, and alternative usage. Annotations cover safety, schema covers params, and output schema exists. No critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 2 parameters (limit, offset) with 100% description coverage. The tool description does not add any additional meaning or context about parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List all kitchen stations' and specifies returned fields (id, name, active status). Explicitly distinguishes from sibling tool kitchen_flow_summary by directing users there for ticket load and bottlenecks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool for listing stations, and when to use kitchen_flow_summary instead for per-station load/bottlenecks. Provides clear alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_kitchen_ticketsList Kitchen TicketsARead-onlyIdempotent
List all kitchen order tickets for the live order board, with optional filters by status or station. Returns ticket id, station, status, table ref, and items. / Lista todos los tickets de cocina del panel en vivo, con filtros opcionales por estado o estacion. Devuelve id, estacion, estado, mesa e items.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Cursor for cursor-based pagination / Cursor de paginacion | |
| limit | No | Max results (1-100) | |
| offset | No | Offset / Desplazamiento | |
| status | No | Filter by ticket status: on_hold, queued, preparing, ready, served, voided. / Filtrar por estado: on_hold, queued, preparing, ready, served, voided. | |
| stationId | No | Filter by station ID / Filtrar por ID de estacion |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. Description adds value by specifying returned fields (id, station, status, table ref, items), providing clarity beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, bilingual, front-loaded with main action. No redundant information; every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has 5 optional parameters, output schema exists, annotations present. Description covers purpose, filters, and return fields; pagination parameters are adequately documented in schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter has full description. The description reiterates optional filters by status/station but does not add new semantic information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Descriptions states 'List all kitchen order tickets for the live order board', clearly specifying verb and resource. It distinguishes from siblings like get_kitchen_ticket (single ticket), update_kitchen_ticket (mutation), and list_kitchen_stations (different entity).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for viewing live board tickets with optional filters. It does not explicitly state when not to use or suggest alternatives, but the context of filters and the sibling tools list provides enough differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsList ProductsARead-onlyIdempotent
List all products/services with optional pagination. Products are reusable items that can be added to invoices and quotes. / Lista todos los productos/servicios con paginacion opcional. Los productos son conceptos reutilizables para facturas y presupuestos.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by product name / Buscar por nombre de producto | |
| after | No | Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor | |
| limit | No | Max results (1-100) / Resultados maximos | |
| fields | No | Comma-separated field names to return (e.g. 'id,name,unitPrice') / Campos a devolver | |
| offset | No | Offset / Desplazamiento | |
| isActive | No | Filter by active status / Filtrar por estado activo |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds minimal extra behavioral context (optional pagination, product reusability). Annotations carry the transparency burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences per language, front-loaded with English. Efficient but bilingual repetition slightly reduces conciseness. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists to document return values. Description covers purpose and core behavior. Missing details like default ordering or full response structure, but adequate for a list tool with good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description mentions 'optional pagination' but does not add specific parameter details beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists all products/services with optional pagination, and defines products as reusable items for invoices/quotes. This distinguishes it from sibling tools like get_product (single) and create_product.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives like search_invoices or get_product. The purpose is clear but lacks when-not or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_propertiesList PropertiesBRead-onlyIdempotent
List all rental properties for the workspace. Returns name, address, capacity, owner info, and license number. / Lista todas las propiedades de alquiler vacacional. Devuelve nombre, direccion, capacidad, datos del propietario y numero de licencia.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by name or address / Buscar por nombre o direccion | |
| after | No | Cursor for cursor-based pagination / Cursor de paginacion | |
| limit | No | Max results (1-100) | |
| fields | No | Comma-separated fields to return / Campos a devolver | |
| offset | No | Offset / Desplazamiento | |
| isActive | No | Filter by active status / Filtrar por activas |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds the returned fields (capacity, owner info, license number), which provides some context beyond annotations but no additional behavioral traits like rate limits or state changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two sentences) and front-loaded with purpose. The bilingual text adds length but is not excessive. Could be more concise by dropping one language, but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description adequately covers the tool's purpose and main returned fields. For a read-only list tool with annotations, it provides sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all 6 parameters. The description does not add any meaning beyond the schema; it only mentions returned fields, not parameter details. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists rental properties with specific fields (name, address, etc.). The verb 'list' and resource 'properties' are explicit. However, it does not differentiate from sibling list tools (e.g., list_invoices) other than by name, which is acceptable but not exemplary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives, nor when not to use it. The description only states what it does, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_quotesList QuotesARead-onlyIdempotent
List all quotes/estimates with optional pagination and filters. Quotes are proposals sent to clients before they become invoices. Supports filtering by status (draft/sent/accepted/rejected/expired) and date range. Example: status='sent', from='2026-01-01', limit=20 / Lista todos los presupuestos con paginacion y filtros opcionales. Soporta filtrado por estado y rango de fechas.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date filter (YYYY-MM-DD) / Fecha fin | |
| from | No | Start date filter (YYYY-MM-DD) / Fecha inicio | |
| after | No | Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor | |
| limit | No | Max results (1-100) / Resultados maximos | |
| fields | No | Comma-separated field names to return (e.g. 'id,clientName,total') / Campos a devolver | |
| offset | No | Offset / Desplazamiento | |
| status | No | Filter by quote status / Filtrar por estado | |
| clientId | No | Filter by client ID / Filtrar por ID de cliente | |
| seriesId | No | Filter by quote series ID / Filtrar por ID de serie |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that quotes are 'proposals sent to clients before they become invoices' and lists supported statuses. No contradictions; description complements annotations well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with purpose. It includes both English and Spanish, which adds length but provides clarity for multilingual users. No wasted sentences, though the bilingual repetition could be slightly trimmed for English-only agents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with 9 optional parameters and an output schema, the description explains the business context (quotes are proposals), supported filters, and pagination. It is complete enough for an AI agent to select and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with bilingual descriptions. The description adds value by grouping functionality ('optional pagination and filters') and providing a concrete example (status='sent', from='2026-01-01', limit=20). The example helps clarify usage beyond schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'list all quotes/estimates' with optional pagination and filters. It distinguishes quotes as proposals before invoices, differentiating from sibling tools like list_invoices and get_quote. The verb 'list' and resource 'quotes' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to list quotes with filters and pagination) and gives an example. It does not explicitly state when not to use or mention alternatives, but the context of sibling tools and the detailed description make usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recurring_invoicesList Recurring InvoicesARead-onlyIdempotent
List all recurring invoice templates. Returns template name, frequency, next scheduled run date, recipient, line items, and active/paused status. / Lista todas las plantillas de facturas recurrentes. Devuelve nombre de la plantilla, frecuencia, proxima fecha de ejecucion, destinatario, lineas y estado.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) / Resultados maximos | |
| offset | No | Offset / Desplazamiento | |
| status | No | Filter by status / Filtrar por estado |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds output fields but no additional behavioral context beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences in English and Spanish, front-loading purpose and listing return fields without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the description mentions returned fields, it is largely complete. Slight room for noting pagination implicit in limit/offset but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add parameter information; all parameter semantics are already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all recurring invoice templates' with a specific verb and resource, and lists the returned fields. It distinguishes from siblings like list_invoices by focusing on recurring templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. The name and description imply usage for listing recurring invoice templates, but lacks exclusions or comparisons to alternatives like get_recurring_invoice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reservationsList ReservationsARead-onlyIdempotent
List all reservations for the workspace, with optional filters by property, status, or date range. Returns guest, dates, channel, and total. / Lista todas las reservas del espacio de trabajo, con filtros opcionales por propiedad, estado o rango de fechas.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Cursor for cursor-based pagination / Cursor de paginacion | |
| limit | No | Max results (1-100) | |
| fields | No | Comma-separated fields to return / Campos a devolver | |
| offset | No | Offset for pagination / Desplazamiento | |
| status | No | Filter by reservation status / Filtrar por estado | |
| checkInTo | No | Check-in to date YYYY-MM-DD / Entrada hasta (YYYY-MM-DD) | |
| propertyId | No | Filter by property ID / Filtrar por propiedad | |
| checkInFrom | No | Check-in from date YYYY-MM-DD / Entrada desde (YYYY-MM-DD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate those. The description adds the return fields (guest, dates, channel, total) but does not disclose pagination behavior, defaults, or other side effects. It provides adequate but minimal behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence in English and Spanish. It is front-loaded with the main purpose and uses no filler. Every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and 8 parameters, the description covers the most common use cases and return fields. It lacks explicit mention of pagination or field selection, but the schema fills those gaps. Slightly above adequate for a list tool with comprehensive structured documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description groups filters (property, status, date range) which adds some semantic grouping, but does not explain pagination parameters (after, limit, offset) or fields. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List all reservations'), the resource ('for the workspace'), and the scope with optional filters. It also mentions the returned fields (guest, dates, channel, total). This sets it apart from sibling tools like get_reservation or list_properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does and lists optional filters, but it does not explicitly indicate when to use this tool versus alternatives like get_reservation for a single reservation. Usage is implied but not contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_salesList POS SalesARead-onlyIdempotent
List POS sales with optional filters by date range, terminal, or status. / Lista las ventas POS con filtros opcionales por fecha, terminal o estado.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD / Fecha de fin | |
| from | No | Start date YYYY-MM-DD / Fecha de inicio | |
| after | No | Cursor for cursor-based pagination / Cursor de paginacion | |
| limit | No | Max results (1-100) | |
| offset | No | Offset / Desplazamiento | |
| status | No | Filter by sale status / Filtrar por estado | |
| terminalId | No | Filter by terminal ID / Filtrar por terminal |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true, so the tool is safe and idempotent. The description adds only that it lists sales with filters, which is obvious from the tool name, and does not provide additional behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence (plus Spanish translation) that is concise, front-loaded, and contains no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a complete output schema, full annotation coverage, and 100% schema description coverage, the description is adequate. It mentions the filter types but does not explain pagination behavior, which is partially covered in schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description mentions filters by date range, terminal, or status, which adds some context beyond the parameter descriptions in the schema, but not significantly more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'List' and the resource 'POS sales', and mentions optional filters by date range, terminal, or status, which distinguishes it from related tools like get_sale.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing sales with filters but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_team_membersList Team MembersARead-onlyIdempotent
List all members in the workspace. Returns member ID, name, email, role, and invite status (pending/active). Useful for access management and auditing who has access to the account. / Lista todos los miembros del espacio de trabajo. Devuelve ID, nombre, email, rol y estado de invitacion (pendiente/activo). Util para gestion de accesos y auditoria de quien tiene acceso a la cuenta.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Filter by role / Filtrar por rol | |
| limit | No | Max results (1-100) / Resultados maximos | |
| offset | No | Offset / Desplazamiento | |
| status | No | Filter by invite status / Filtrar por estado de invitacion |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds value by specifying the exact return fields and invite status categories (pending/active), but does not discuss pagination, rate limits, or error handling beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is split into English and Spanish, doubling length unnecessarily. While the English part is efficient, the duplication reduces conciseness. No structural aids like bullet points are used.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, and description covers basic return fields and utility. However, it lacks explanation of filtering behavior (role/status) and pagination (limit/offset defaults or ordering). For a simple list tool, it is adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear descriptions for all 4 parameters (role, status, limit, offset) including enums and constraints. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all workspace members and specifies the return fields (ID, name, email, role, invite status). It distinguishes from sibling tools like invite_team_member, remove_team_member, and update_team_member_role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it is 'useful for access management and auditing,' providing some context but lacks explicit guidance on when to use this tool vs alternatives or exclusions. No when-not or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_terminalsList POS TerminalsARead-onlyIdempotent
List all configured POS terminals (Stripe Terminal readers) for the workspace. Returns terminal label, device type, location, and connection status. / Lista todos los terminales de punto de venta (lectores Stripe Terminal). Devuelve etiqueta, tipo de dispositivo, ubicacion y estado de conexion.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) | |
| offset | No | Offset / Desplazamiento | |
| locationId | No | Filter by location ID / Filtrar por ubicacion |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. Description adds the returned data fields (label, device type, location, connection status), which is useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences (English and Spanish), no wasted words. Front-loaded with key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema and annotations, description is adequate. Could mention pagination behavior but not necessary given schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 3 parameters. Description does not add additional meaning to parameters beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States 'list all configured POS terminals (Stripe Terminal readers) for the workspace' with specific fields returned. Clearly differentiates from sibling tools like list_invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs alternatives, but the tool's function is straightforward and implied by the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_time_entriesList Time EntriesARead-onlyIdempotent
List time tracking entries with optional filters. Filter by user, project, date range, or billable status. Useful for generating timesheets, billing reports, and project cost analysis. / Lista entradas de tiempo con filtros opcionales. Filtra por usuario, proyecto, rango de fechas o facturabilidad. Util para partes de trabajo, informes de facturacion y analisis de costes por proyecto.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date ISO 8601 (YYYY-MM-DD) / Fecha fin | |
| from | No | Start date ISO 8601 (YYYY-MM-DD) / Fecha inicio | |
| after | No | Cursor for cursor-based pagination / Cursor para paginacion | |
| limit | No | Max results (1-100) / Resultados maximos | |
| offset | No | Offset / Desplazamiento | |
| userId | No | Filter by user ID / Filtrar por ID de usuario | |
| billable | No | Filter by billable flag / Filtrar por facturabilidad | |
| projectId | No | Filter by project ID / Filtrar por ID de proyecto |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, fully covering safety and idempotency. The description adds filter context but does not reveal additional behavioral traits (e.g., pagination behavior, sorting defaults). With strong annotations, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual (English and Spanish), which doubles its length but is a common pattern for multilingual tools. It is front-loaded with the English purpose and use cases, then repeats in Spanish. While not excessively long, it could be more concise by omitting the Spanish if a single language suffices for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (as indicated by context), the description does not need to explain return values. It covers purpose, filters, and use cases adequately. For a simple list tool with strong annotations, it provides sufficient context to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 8 parameters have descriptions in the input schema (100% coverage), so the tool description does not need to add parameter-level details. The description merely mentions filter categories, which aligns with the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'time tracking entries', specifies optional filters (user, project, date range, billable status), and lists use cases (timesheets, billing, cost analysis). This differentiates it from sibling tools like get_time_entry and get_time_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool (generating timesheets, billing reports, project cost analysis) but does not explicitly state when not to use it or mention alternative tools. However, the purpose 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.
list_transactionsList Bank TransactionsARead-onlyIdempotent
List bank transactions with optional filters. Filter by account, date range, status (pending/posted/excluded), or category. Useful for reconciliation, expense matching, and cash flow analysis. / Lista movimientos bancarios con filtros opcionales. Filtra por cuenta, rango de fechas, estado (pendiente/contabilizado/excluido) o categoria. Util para conciliacion, asignacion de gastos y analisis de flujo de caja.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date ISO 8601 (YYYY-MM-DD) / Fecha fin | |
| from | No | Start date ISO 8601 (YYYY-MM-DD) / Fecha inicio | |
| after | No | Cursor for cursor-based pagination / Cursor para paginacion | |
| limit | No | Max results (1-100) / Resultados maximos | |
| offset | No | Offset / Desplazamiento | |
| status | No | Filter by transaction status / Filtrar por estado | |
| category | No | Filter by category slug / Filtrar por categoria | |
| accountId | No | Filter by bank account ID / Filtrar por ID de cuenta |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, non-destructive read operation. The description adds no behavioral information beyond what annotations provide. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is duplicated in English and Spanish, making it twice as long as necessary. While it is front-loaded with English, the bilingual content is inefficient and reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the tool's purpose and common filters. Given that an output schema exists and schema coverage is 100%, the description does not need to explain return values. However, it lacks details about pagination behavior (cursor vs offset) and ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and all parameters have descriptions in the schema. The description mentions filter types but does not add semantic meaning beyond what the schema already provides. It is appropriate to give a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List bank transactions with optional filters.' It specifies the resource (bank transactions) and the action (list), and mentions the available filter dimensions. It distinguishes from sibling tools like categorize_transaction or match_transaction_to_invoice which perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context by listing use cases: 'useful for reconciliation, expense matching, and cash flow analysis.' However, it does not explicitly state when not to use this tool or contrast it with alternatives such as search_invoices or list_expenses, which could also be used for financial analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vendorsList VendorsARead-onlyIdempotent
List all vendors/suppliers with optional pagination and search. Returns contact info, tax IDs, and addresses. / Lista todos los proveedores con paginacion y busqueda opcional. Devuelve informacion de contacto, NIF/CIF y direcciones.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query (name, email, etc.) / Busqueda por texto | |
| after | No | Cursor for pagination / Cursor de paginacion | |
| limit | No | Max results (1-100) / Resultados maximos | |
| fields | No | Comma-separated fields to return / Campos a devolver separados por coma | |
| offset | No | Offset / Desplazamiento |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. The description adds value by specifying that it returns contact info, tax IDs, and addresses, and mentions optional pagination and search, providing context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with key information, and provides bilingual support (English/Spanish) without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and 5 optional parameters, the description covers the main purpose and return fields. It could be more complete by mentioning that pagination uses cursor or offset, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. The description adds no new information about parameters beyond stating 'optional pagination and search'; it does not explain how to use parameters like 'after' vs 'offset' for pagination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all vendors/suppliers with optional pagination and search' and specifies return fields (contact info, tax IDs, addresses). This distinguishes it from sibling tools like get_vendor (single vendor) and other list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as get_vendor for a single vendor or search_invoices. The description only implies usage for listing with optional filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksList WebhooksBRead-onlyIdempotent
List all configured webhooks. Webhooks send HTTP POST notifications when events occur in Frihet. / Lista todos los webhooks configurados. Los webhooks envian notificaciones HTTP POST cuando ocurren eventos en Frihet.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) / Resultados maximos | |
| offset | No | Offset / Desplazamiento |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the tool's safety profile is clear. The description adds general context about webhooks (HTTP POST notifications) but does not disclose additional behavioral traits like pagination or ordering. This adds minimal value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences per language. It front-loads the main action. The bilingual text is slightly redundant but not excessive. Overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are documented externally. The description covers the tool's purpose and basic context. It does not mention pagination or filtering, but given the schema covers those, it is adequate for a simple list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema_description_coverage is 100%, meaning all parameters have descriptions in the schema. The tool description adds no further explanation of parameters beyond what the schema provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List all configured webhooks') and the resource. It is a specific verb+resource. Although there are sibling tools like get_webhook, create_webhook, etc., the description does not explicitly differentiate from them, but the intent is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., get_webhook). It simply states what it does. There is no mention of context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_client_activityLog Client ActivityB
Log a CRM activity against a client. Use to track calls, emails, meetings, or tasks. Example: clientId='abc123', type='call', title='Discussed Q2 proposal', description='Client interested in upgrade' / Registra una actividad CRM para un cliente. Usa para rastrear llamadas, emails, reuniones o tareas.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Activity date (ISO 8601, defaults to now) / Fecha de la actividad | |
| type | Yes | Activity type / Tipo de actividad | |
| title | Yes | Activity title / Titulo de la actividad | |
| clientId | Yes | Client ID / ID del cliente | |
| description | No | Detailed description / Descripcion detallada |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| date | No | |
| type | Yes | |
| title | Yes | |
| createdAt | No | |
| updatedAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (write operation) and destructiveHint=false (non-destructive). The description adds context that it logs CRM activities, which is consistent. No additional behavioral details like permissions or side effects are provided, but annotations cover the basics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a repeated bilingual version. It is reasonably concise but includes Spanish repetition, making it slightly longer than necessary. Front-loading is good with a clear action statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters (3 required) and an output schema (not shown). The description doesn't explain return values, but the output schema covers that. For a logging tool, the description is adequate but could mention response behavior (e.g., returns created activity ID).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are documented in the schema. The description provides an example that demonstrates parameter usage (clientId, type, title, description) but does not add meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Log' and resource 'CRM activity against a client', making the purpose clear. It provides examples of activity types (calls, emails, meetings, tasks) and distinguishes from siblings like list_client_activities (listing vs creating) and create_client_note (notes vs activities). However, it does not explicitly differentiate from all similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states 'Use to track calls, emails, meetings, or tasks', which implies when to use. It gives an example but lacks explicit guidance on when not to use or alternatives. Among siblings, create_client_note is a related alternative, but not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_transaction_to_invoiceMatch Transaction to InvoiceAIdempotent
TRUST AREA — RECONCILIATION. Link a bank transaction to an invoice or expense document. This affects fiscal reconciliation records. Requires confirm=true to proceed. Idempotent: re-matching to same document is a no-op. Example: transactionId='tx_abc', documentId='inv_xyz', documentType='invoice', confirm=true / AREA DE CONFIANZA — CONCILIACION. Vincula un movimiento bancario a una factura o gasto. Afecta registros de conciliacion fiscal. Requiere confirm=true para ejecutar.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Optional reconciliation notes / Notas de conciliacion opcionales | |
| confirm | Yes | Must be true to confirm fiscal reconciliation / Debe ser true para confirmar conciliacion fiscal | |
| documentId | Yes | Invoice or expense ID to link / ID de la factura o gasto a vincular | |
| documentType | Yes | Type of document being matched / Tipo de documento | |
| transactionId | Yes | Bank transaction ID / ID del movimiento bancario |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| amount | Yes | |
| status | No | |
| category | No | |
| currency | No | |
| postedAt | No | |
| accountId | No | |
| createdAt | No | |
| updatedAt | No | |
| description | No | |
| matchedDocId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations: it affects fiscal reconciliation records and is idempotent (re-matching same document is a no-op). Annotations already provide idempotentHint=true, so this reinforces it. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with key information and is reasonably concise. The bilingual content adds length but does not hinder clarity. Could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters (100% schema coverage), annotations, and an output schema, the description adequately covers its purpose, requirement (confirm=true), and idempotency. No major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters have descriptions. The description provides an example but does not add significant new semantic meaning beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Link a bank transaction to an invoice or expense document.' This is a specific verb+resource pairing that distinguishes it from sibling tools like categorize_transaction which serves a different purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates this tool is for reconciliation ('TRUST AREA — RECONCILIATION') and explicitly requires 'confirm=true' to proceed. However, it does not explicitly state when not to use it or mention alternative tools, which would provide stronger guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_persona_setSet Onboarding PersonaAIdempotent
Set the workspace persona. Drives module visibility, default chart-of-accounts, and onboarding checklist. Personas:
'autonomo' — self-employed (autonomo Spain)
'empresa' — small/medium business
'agencia' — agency / consultancy
'gestoria' — accounting firm (manages multiple client workspaces)
Idempotent: setting the same persona again is a no-op. / Define la persona del workspace. Determina modulos visibles, plan contable y checklist.
| Name | Required | Description | Default |
|---|---|---|---|
| persona | Yes | Workspace persona / Persona del workspace |
Output Schema
| Name | Required | Description |
|---|---|---|
| persona | Yes | |
| updatedAt | No | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by explaining what the setting affects (module visibility, chart-of-accounts, checklist). Annotations already provide idempotentHint; description confirms and elaborates on consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
English portion is front-loaded and clear, but the Spanish duplicate adds roughly 50% more text unnecessarily. Still overall concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one enum parameter, idempotent, no destructive effects), the description covers purpose, behavior, and parameter meaning fully. Output schema exists to handle return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning to the single parameter by explaining each persona with real-world context (e.g., 'autonomo' means self-employed in Spain). Schema coverage is 100% but description enriches understanding significantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it sets the workspace persona and enumerates the four supported personas with descriptions. Differentiates from sibling 'onboarding_status' which likely reads rather than writes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states idempotent behavior (no-op on repeated calls) but does not compare with alternatives like 'onboarding_status'. The description implies when to use but lacks explicit when-not context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_statusOnboarding StatusARead-onlyIdempotent
Return the current workspace onboarding state — persona, completed steps, pending steps, percent complete. Useful to drive in-app guidance, sales follow-up triggers, and partner program tracking. / Devuelve el estado actual del onboarding del workspace (persona, pasos completados/pendientes).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| persona | No | |
| startedAt | No | |
| completedAt | No | |
| workspaceId | No | |
| pendingSteps | No | |
| completedSteps | No | |
| percentComplete | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds context beyond annotations (readOnly, idempotent) by listing returned fields and use cases. No contradiction; annotations confirm safe 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. Bilingual addition (Spanish) slightly increases length but still focused. Would benefit from removing duplicate if not needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema present, description fully covers what the tool does and why it's useful. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in schema; description doesn't need to cover them. Baseline 4 for zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Return' with specific resource 'current workspace onboarding state' and detailed fields (persona, steps, percent). Distinct from sibling 'onboarding_persona_set' which sets persona.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states use cases (in-app guidance, sales follow-up triggers, partner program tracking). Doesn't specify exclusions or alternatives, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overtime_reportOvertime ReportARead-onlyIdempotent
Generate an overtime report for a period. Aggregates regular vs overtime hours per employee + total estimated cost in EUR. Useful for payroll prep and labor-law audits. Period format: 'YYYY-MM' (monthly) or 'YYYY-QN' (quarterly) or 'YYYY' (annual). / Informe de horas extra por periodo. Agrega horas regulares vs extra por empleado + coste estimado.
| Name | Required | Description | Default |
|---|---|---|---|
| period | Yes | Period (YYYY-MM, YYYY-QN, or YYYY) / Periodo | |
| employeeId | No | Optional filter by employee / Filtrar por empleado opcional |
Output Schema
| Name | Required | Description |
|---|---|---|
| period | Yes | |
| byEmployee | No | |
| generatedAt | No | |
| estimatedCostEur | No | |
| totalRegularHours | No | |
| totalOvertimeHours | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, consistent with a report generation tool. The description adds behavioral context: it aggregates hours and estimates cost in EUR, and implies it is non-destructive. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two short sentences in English and one in Spanish. Every sentence adds information: purpose, aggregation details, use cases, and format examples. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not needed in description), the description fully covers the tool's purpose, usage, parameter format examples, and use cases. It is complete for a report generation tool with good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for both parameters. The description adds value by providing concrete format examples for the period parameter ('YYYY-MM', 'YYYY-QN', 'YYYY') and bilingual labels, which helps the agent understand expected input beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates an overtime report, aggregates regular vs overtime hours per employee and total cost in EUR. It specifies the resource (overtime report) and action (generate), and distinguishes from sibling tools like list_time_entries or get_time_summary by focusing on overtime aggregation and cost.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states it is 'Useful for payroll prep and labor-law audits,' providing clear context for when to use. It does not explicitly mention when not to use or name alternatives, but the use cases are well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_recurring_invoicePause Recurring InvoiceAIdempotent
Pause an active recurring invoice template. No new invoices are generated while paused. The template is preserved — use resume_recurring_invoice to restart. / Pausa una plantilla de factura recurrente activa. No se generan nuevas facturas mientras esta pausada. Usa resume_recurring_invoice para reanudarla.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Recurring invoice template ID / ID de la plantilla de factura recurrente |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| data | No | |
| meta | No | |
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-destructive and idempotent behavior. The description adds context that no invoices are generated while paused and that the template is preserved, which goes beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (two sentences in English) with no unnecessary words. It is front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one param, no nested objects, has output schema), the description completely explains the purpose, effect, and relationship to sibling. No missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'id' has a clear description in the schema. The description adds no additional meaning beyond the schema, which already covers 100% of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Pause an active recurring invoice template') and the effect ('No new invoices are generated while paused'). It also distinguishes the tool from its sibling 'resume_recurring_invoice' by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (pausing an active template) and explicitly names the alternative for resuming. No exclusions or 'when not to use' are given, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_checklistPayroll Readiness ChecklistARead-onlyIdempotent
List all employees for a given month with their payroll readiness status. Status values:
'ready' — all required data present, ready to export
'missing_data' — some required fields missing (see missingFields[])
'blocked' — manually blocked or data inconsistency detected
Use BEFORE payroll_export to identify gaps. Month format: 'YYYY-MM'. / Lista empleados con estado de preparacion para nomina. Usar antes de payroll_export.
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Month in 'YYYY-MM' format / Mes formato 'YYYY-MM' |
Output Schema
| Name | Required | Description |
|---|---|---|
| month | Yes | |
| employees | No | |
| generatedAt | No | |
| readyEmployees | No | |
| totalEmployees | No | |
| missingEmployees | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to mention it. However, it adds value by describing status values and the missingFields array, which gives insight into behavior beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: purpose first, then bullet-pointed statuses, then usage note and format. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one param, output schema exists), the description covers purpose, usage, status meanings, and format. It is complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, so baseline is 3. The description reiterates month format but doesn't add new semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all employees for a given month with payroll readiness status, which is specific and distinct from siblings like payroll_export. It includes status values and usage hint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use BEFORE payroll_export to identify gaps', providing clear guidance on when to use this tool instead of alternatives. Also specifies month format.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_exportExport Payroll (Gestoria Format)ARead-onlyIdempotent
Export payroll data for a month in gestoria-compatible format. Supported formats:
'a3' — Wolters Kluwer A3 (CSV with Spanish payroll columns)
'contasol' — Sage Contasol
'sage' — Sage 50/200
'holded' — Holded import format
'siltra' — SILTRA Seguridad Social XML
Frihet does NOT calculate payroll — it exports staged data for the gestoria. Month format: 'YYYY-MM'. / Exporta datos de nominas en formato compatible con gestoria. Mes en formato 'YYYY-MM'.
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Month in 'YYYY-MM' format / Mes formato 'YYYY-MM' | |
| format | Yes | Gestoria payroll software format / Formato del software de gestoria |
Output Schema
| Name | Required | Description |
|---|---|---|
| month | Yes | |
| format | Yes | |
| fileUrl | No | |
| filename | No | |
| rowCount | No | |
| generatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, idempotent, non-destructive, and closed-world. The description adds that the tool exports staged data and does not calculate payroll, which aligns with annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with bullet points for formats. The final Spanish sentence is redundant as the rest of the description is already bilingual. Slightly more wordy than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, formats, date format, and what the tool does not do. Since there is an output schema, it need not explain return values. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and parameter descriptions are already bilingual and detailed in the schema. The tool description adds minimal new info (e.g., the note about not calculating payroll) but largely repeats the schema content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description clearly state the tool's purpose: exporting payroll data in gestoria-compatible format. It lists five specific formats and emphasizes that Frihet does not calculate payroll, distinguishing it from other payroll tools like payroll_checklist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use (export staged data) and what it does not do (no payroll calculation). It specifies supported formats and date format. However, it does not mention alternatives among sibling tools for 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.
period_closeClose Accounting PeriodADestructiveIdempotent
TRUST AREA — FISCAL CLOSE. Close a monthly or quarterly accounting period. Freezes invoices, expenses, journal entries and bank reconciliations for the period. Requires confirm=true. Idempotent: re-closing an already closed period is a no-op. Closed periods can be reopened with period_reopen + audit reason. / AREA DE CONFIANZA — CIERRE FISCAL. Cierra un periodo contable mensual o trimestral. Congela facturas, gastos, asientos. Requiere confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Period type: monthly or quarterly / Tipo: mensual o trimestral | |
| confirm | Yes | Must be true to perform the close / Debe ser true para ejecutar el cierre |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| type | No | |
| status | No | |
| endDate | No | |
| closedAt | No | |
| closedBy | No | |
| createdAt | No | |
| startDate | No | |
| updatedAt | No | |
| reopenedAt | No | |
| reopenReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant behavioral info beyond annotations: lists what gets frozen (invoices, expenses, journal entries, bank reconciliations), requires confirm=true, and notes idempotency. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Relatively concise with key info front-loaded. Bilingual duplication adds some length but not excessive. Could be slightly tighter by dropping the Spanish repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, behavioral effects, requirements, idempotency, and relationship to sibling. Output schema exists so return values not needed. Complete for a destructive, idempotent tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions. Description reinforces that confirm must be true and mentions type, but adds no new parameter-level detail beyond what schema provides. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool closes a monthly or quarterly accounting period, freezing invoices, expenses, etc. Distinguishes from sibling period_reopen by noting reopened periods can be opened with that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly requires confirm=true and states idempotency. Gives context for when to use and hints at alternatives (period_reopen for reopening). Could be more explicit about when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
period_close_statusPeriod Close StatusARead-onlyIdempotent
Get the current accounting period state (open / closing / closed / reopened). Without periodId returns the current open or most recently closed period. / Devuelve el estado del periodo contable actual (abierto/cerrando/cerrado/reabierto).
| Name | Required | Description | Default |
|---|---|---|---|
| periodId | No | Specific period ID (default: current) / ID periodo especifico |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| type | No | |
| status | No | |
| endDate | No | |
| closedAt | No | |
| closedBy | No | |
| createdAt | No | |
| startDate | No | |
| updatedAt | No | |
| reopenedAt | No | |
| reopenReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint, confirming safety. The description adds the specific behavior of returning the current open or most recently closed period when periodId is omitted, which goes beyond the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The English portion is two concise sentences that immediately convey the purpose and default behavior. There is no fluff; the Spanish translation is auxiliary. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with comprehensive annotations and an output schema, the description fully covers the necessary information: what it returns, possible states, and default behavior. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for periodId with a description. The description adds critical context: 'Without periodId returns the current open or most recently closed period', explaining the parameter's optionality and default behavior, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'Get', the resource 'current accounting period state', and lists possible states (open/closing/closed/reopened). It distinguishes from sibling tools period_close and period_reopen by being read-only. The default behavior without periodId is clearly stated, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use: to check the accounting period state. Although it does not explicitly state when not to use or mention alternatives, the read-only nature and default behavior provide sufficient context. The sibling tools for mutating operations (period_close, period_reopen) are evident from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
period_reopenReopen Accounting PeriodADestructive
TRUST AREA — FISCAL REOPEN. Reopen a closed accounting period. Requires a compliance reason (audit log) and confirm=true. Reopening allows backdated edits to invoices/expenses — use with extreme caution. / AREA DE CONFIANZA — REAPERTURA FISCAL. Reabre un periodo cerrado. Requiere motivo (auditoria) y confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Required audit reason (logged) / Motivo obligatorio (auditoria) | |
| confirm | Yes | Must be true to reopen / Debe ser true para reabrir | |
| periodId | Yes | Closed period ID to reopen / ID del periodo cerrado |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| type | No | |
| status | No | |
| endDate | No | |
| closedAt | No | |
| closedBy | No | |
| createdAt | No | |
| startDate | No | |
| updatedAt | No | |
| reopenedAt | No | |
| reopenReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, and the description adds context about audit logging and backdated edits, reinforcing the behavioral implications. It doesn't contradict annotations and adds value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with front-loaded context ('TRUST AREA — FISCAL REOPEN') and clear sentences. Bilingual content adds some redundancy but is acceptable for the intended use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the purpose, required parameters, and warns about consequences. An output schema exists, so return values are covered. It's mostly complete, though prerequisites like 'period must be closed' are implied not explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description's mention of reason for audit and confirm=true aligns with schema descriptions but doesn't add substantial new meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Reopen a closed accounting period' with a specific verb and resource. It also mentions 'allows backdated edits to invoices/expenses', distinguishing it from the sibling 'period_close' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly requires a compliance reason and 'confirm=true', and warns 'use with extreme caution'. It provides clear context for when to use, though it doesn't explicitly list alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
permissions_matrixPermissions MatrixARead-onlyIdempotent
Return the full role-to-permission matrix for the workspace. Lists every role with the permissions it grants and every protected resource. Useful for security audits, role design, and compliance reporting. / Devuelve la matriz completa de roles y permisos del workspace.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| roles | No | |
| resources | No | |
| generatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=false. The description adds that it returns the matrix but does not disclose additional behavioral traits beyond what annotations convey. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences plus a Spanish translation. Every sentence adds value and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no inputs) and has an output schema. The description fully covers its purpose and usage scenarios. No missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters and schema description coverage is 100%. The description does not need to add parameter information, and the baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the full role-to-permission matrix for the workspace, listing every role, its permissions, and protected resources. It is distinct from sibling tools like 'permissions_me' and uses specific verbs and resource naming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions use cases: security audits, role design, and compliance reporting. However, it does not specify when not to use this tool or differentiate it from similar permission-related tools like 'permissions_me'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
permissions_meMy PermissionsARead-onlyIdempotent
Return the caller's effective role + permissions in the current workspace. Useful for client-side UI gating, debugging access errors, and capability discovery. / Devuelve el rol efectivo y los permisos del llamante en el workspace actual.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| role | No | |
| userId | No | |
| permissions | No | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds that it returns effective role+permissions, providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences in English plus Spanish translation. The Spanish is redundant but not detrimental. Could be slightly more streamlined, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes return value (effective role + permissions). Output schema exists to provide structure. No mention of error cases or authentication, but adequate for a safe read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters. Schema coverage is 100%. Description adds no parameter info, which is appropriate. Baseline 4, but score 5 for perfect handling of zero-param case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'Return the caller's effective role + permissions in the current workspace', with a specific verb, resource, and context. Distinguishes from sibling `permissions_matrix` which likely returns broader permissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states use cases: client-side UI gating, debugging access errors, capability discovery. Does not explicitly mention when not to use or alternatives, but the context is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refund_depositRefund DepositBIdempotent
Refund a deposit back to the client. Transitions the deposit status to 'refunded'. Example: id='dep_abc123', reason='Project cancelled' / Devuelve un deposito al cliente.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deposit ID / ID del deposito | |
| notes | No | Refund notes / Notas de la devolucion | |
| reason | No | Reason for the refund / Motivo de la devolucion |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| data | No | |
| meta | No | |
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive. Description adds status transition detail. No mention of permissions, reversibility, or side effects, but consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short, includes essential information. Spanish translation adds length but not excessive. Could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers action and status change. Lacks error scenarios, prerequisites, or return value explanation, but output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with bilingual descriptions. Description references id and reason in example but adds minimal meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Refund a deposit'), the target resource ('the client'), and the effect ('transitions status to refunded'). It distinguishes from sibling tools like delete_deposit or create_deposit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives like delete_deposit or create_deposit. The example gives context but not decision rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refund_saleRefund POS SaleADestructiveIdempotent
Refund a POS sale in full or partially. This action is irreversible — the customer will receive a refund to their original payment method. You MUST pass confirm=true to proceed. Optionally specify amountCents for a partial refund (defaults to full refund). / Reembolsa una venta POS total o parcialmente. Accion irreversible. Debes pasar confirm=true. Pasa amountCents para reembolso parcial.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sale ID to refund / ID de venta a reembolsar | |
| reason | No | Refund reason / Motivo del reembolso | |
| confirm | Yes | Must be true to proceed. Safety gate for destructive action. / Debe ser true para continuar. Confirmacion obligatoria. | |
| amountCents | No | Partial refund amount in cents. Omit for full refund. / Importe parcial en centimos. Omitir para reembolso completo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| reason | No | |
| saleId | Yes | |
| status | Yes | |
| currency | Yes | |
| createdAt | Yes | |
| amountCents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true), the description adds key behavioral details: the action is irreversible, funds return to the original payment method, and confirm is a mandatory safety check. This fully informs the agent 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two clear sentences in English and a Spanish translation. It front-loads the core action and key requirements. The bilingual content is necessary but adds length; still efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive action, the description covers irreversibility, payment method, confirm requirement, and partial refund. It does not detail return values, but an output schema exists. Sibling differentiation (e.g., refund_deposit) is missing but the tool name and description sufficiently narrow context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description reiterates the purpose of 'confirm' and 'amountCents' but adds no new meaning beyond the schema. The 'reason' parameter is not mentioned, though its enum values are clear in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Refund a POS sale'), resource ('POS sale'), and scope ('in full or partially'), distinguishing it from sibling tools like refund_deposit. The verb 'refund' and resource 'POS sale' are precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to use this tool (for refunding POS sales) and includes a critical prerequisite ('MUST pass confirm=true'). However, it does not explicitly contrast with alternatives like refund_deposit or state when not to use, leaving room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_team_memberRemove Team MemberADestructiveIdempotent
Remove a member from the workspace. The member immediately loses access. Their created records (invoices, expenses) are preserved. Cannot remove the workspace owner — transfer ownership first. Requires confirm=true to prevent accidental removal. / Elimina un miembro del espacio de trabajo. El miembro pierde acceso inmediatamente. Sus registros creados (facturas, gastos) se conservan. No se puede eliminar al propietario — transfiere la propiedad primero. Requiere confirm=true para evitar eliminaciones accidentales.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to confirm removal / Debe ser true para confirmar la eliminacion | |
| memberId | Yes | Team member ID / ID del miembro del equipo |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| data | No | |
| meta | No | |
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behavioral traits beyond annotations: immediate loss of access, preservation of created records, restriction on removing owner, and confirmation requirement. Annotations already indicate destructive and idempotent, but description adds concrete details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: 4 sentences in English, front-loaded with the main action. Bilingual inclusion is justified for audience. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (2 params), annotations, and presence of output schema (context signal), the description covers all essential behavioral aspects: access loss, record preservation, owner restriction, confirmation requirement. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers 100% of parameters with descriptions. The description reinforces confirm as a safety measure but does not add significant new meaning beyond the schema for either parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Remove a member from the workspace' with specific verb and resource. It distinguishes from sibling tools like invite_team_member and update_team_member_role by focusing on removal and noting preservation of records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: removing a member, immediate loss of access, cannot remove owner (requires transfer first), and requires confirm=true. Lacks explicit alternatives or prerequisites like permissions, but gives strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_recurring_invoiceResume Recurring InvoiceAIdempotent
Resume a paused recurring invoice template. The next invoice will be generated on the next scheduled cycle date after resumption. / Reanuda una plantilla de factura recurrente pausada. La proxima factura se generara en el siguiente ciclo programado tras la reanudacion.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Recurring invoice template ID / ID de la plantilla de factura recurrente |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| data | No | |
| meta | No | |
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: 'The next invoice will be generated on the next scheduled cycle date after resumption.' Annotations provide idempotentHint=true, and description confirms non-destructive, non-readOnly behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two short sentences (English and Spanish) that front-load the key action and effect. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 required param, high schema coverage, annotations present), the description adequately explains the effect. It could mention prerequisites (e.g., template must be paused) but is still sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description covers the single parameter 'id' 100% (with bilingual explanation). The description does not add new meaning beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Resume a paused recurring invoice template') and the resource ('recurring invoice template'), with a specific verb. It distinguishes from siblings like 'pause_recurring_invoice' and 'create_recurring_invoice'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly tells when to use (when a template is paused), but does not explicitly mention when not to use or provide alternative tools. However, the context from the name and sibling tools makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_recurring_nowRun Recurring Invoice NowA
Manually trigger immediate generation of the next invoice instance from a recurring template. Useful for billing ahead of schedule or recovering from a missed automated run. The generated invoice is created as a draft; review and send separately. Example: templateId='rec_abc123' / Genera manualmente la siguiente instancia de una factura recurrente. Util para facturar antes de lo programado o recuperar un ciclo perdido. La factura generada se crea como borrador; revisar y enviar por separado.
| Name | Required | Description | Default |
|---|---|---|---|
| draftOnly | No | If true, create as draft only (default true). Set false to create and mark as sent immediately. / Si true, crea como borrador. Set false para crear y marcar como enviada. | |
| templateId | Yes | Recurring invoice template ID / ID de la plantilla de factura recurrente |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| data | No | |
| meta | No | |
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the generated invoice is a draft, requiring separate review and sending. Annotations already indicate non-read-only and non-destructive; description adds context on the draft nature and manual trigger. Missing effects on the template's schedule or idempotency, but adequate given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus an example, front-loaded with the action. Bilingual text adds length but serves international users. Could be more concise, but structure is logical and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values are covered. Description covers main action and use case but omits parameter option (draftOnly=false) and possible side effects on the recurring template schedule. Adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds only an example for templateId but no extra meaning for draftOnly beyond what the schema already provides. No additional semantic depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (manually trigger immediate generation) and resource (recurring template). Includes specific use cases (billing ahead, recovering missed runs) and an example. Distinguishes from sibling tools like create_invoice and send_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (billing ahead, recovering missed runs). Implies when not to use by noting the invoice is a draft and must be sent separately, hinting that send_invoice is for sending. Does not fully exclude other scenarios or detail prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_invoicesSearch InvoicesARead-onlyIdempotent
Search and filter invoices. Supports filtering by status and date range. The query parameter searches across client names and invoice content. Example: query='Acme', status='paid', from='2026-01-01', to='2026-03-31' / Busca y filtra facturas. Soporta filtrado por estado y rango de fechas. El parametro query busca en nombres de clientes y contenido de facturas.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date filter (YYYY-MM-DD) / Fecha fin | |
| from | No | Start date filter (YYYY-MM-DD) / Fecha inicio | |
| after | No | Cursor for cursor-based pagination (document ID) / Cursor para paginacion | |
| limit | No | Max results (1-100) / Resultados maximos | |
| query | No | Search text (client name, etc.) / Texto de busqueda | |
| fields | No | Comma-separated field names to return / Campos a devolver | |
| offset | No | Offset / Desplazamiento | |
| status | No | Filter by status / Filtrar por estado |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds that it supports filtering and search across content, and gives an example. No contradictions. The description provides useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with purpose. The example is helpful. The bilingual text adds length but is not excessive. Could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and detailed annotations, the description covers the main capabilities and provides an example. It does not explicitly mention pagination, but the schema handles that. Overall adequate for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning for the 'query' parameter (searches across client names and invoice content) and provides a concrete example. Other parameters are adequately described in the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches and filters invoices, with specific capabilities like status and date range filtering, and the query parameter searches across client names and content. However, it doesn't explicitly differentiate from sibling 'list_invoices', which may cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example but does not specify when to use this tool vs alternatives like 'list_invoices' or 'get_invoice'. No guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_einvoiceSend E-InvoiceA
Dispatch an e-invoice to the recipient via the selected transport channel. Returns immediately with a workflowRunId — use get_einvoice_status to poll until completion.
Supported formats (11 total): • xrechnung-cii — XRechnung CII syntax (Germany B2G mandatory) • xrechnung-ubl — XRechnung UBL 2.1 syntax (Germany B2G alternative) • facturx-en16931 — Factur-X EN16931 PDF/A-3 (France, EU) • facturx-extended — Factur-X Extended with trade/logistics fields (France, EU) • facturx-basic — Factur-X Basic reduced field set (France, EU) • facturx-minimum — Factur-X Minimum for summary invoices (France, EU) • fatturapa — FatturaPA XML via SDI hub (Italy mandatory) • ubl — Generic UBL 2.1 XML (EU/global) • cii — Generic CII Cross Industry Invoice (EU/global) • peppol-bis-3 — PEPPOL BIS Billing 3.0 network (EU/Nordic/AU/SG) • facturae — Facturae 3.2.x (Spain B2G via FACe/AEAT mandatory)
Dispatch modes: • email — attach XML/PDF and send via Resend to client email on file • chorus_pro — submit to French Chorus Pro portal (facturx-* only) • sdi — submit to Italian SDI hub (fatturapa only) • peppol — transmit via PEPPOL access point (peppol-bis-3 only) • download — generate and return a signed download URL only
If the dispatch backend is not deployed for this workspace, returns an honest 'unavailable' response — never fabricated workflow data. / Envia una factura electronica al destinatario mediante el canal de transporte seleccionado. Devuelve de forma asincrona — consultar get_einvoice_status para seguimiento.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | E-invoice format. Choose based on recipient country and channel: DE→xrechnung-cii/ubl, FR→facturx-*, IT→fatturapa, ES B2G→facturae, EU PEPPOL→peppol-bis-3, generic→ubl or cii / Formato de factura electronica. | |
| invoiceId | Yes | Frihet invoice ID to dispatch / ID de la factura a enviar | |
| dispatchMode | Yes | Transport channel: email=send via Resend, chorus_pro=French portal, sdi=Italian SDI hub, peppol=PEPPOL network, download=generate URL only / Canal de transporte. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | Always 'queued' for async dispatch |
| workflowRunId | Yes | Hatchet workflow run ID for polling status |
| estimatedCompletionSec | Yes | Estimated seconds until the workflow completes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, aligning with the dispatch action. The description reveals key behavior: returns immediately with a workflowRunId, async nature requiring polling, and honest 'unavailable' response. This adds value beyond the minimal annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points for formats and modes, making it scannable. The bilingual text adds length but serves dual-language users. The first sentence is clear and action-oriented. Minor redundancy in the Spanish section but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers async behavior, format mapping, dispatch mode constraints, and error handling. An output schema exists but is not shown; the description does not explain return values, but the emphasis is on the workflowRunId. Given the tool's complexity (3 required params, many enums), the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds context for format enums (e.g., which format for which country) and dispatch modes (e.g., 'chorus_pro=French portal'). This helps the agent choose appropriate values, going beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('Dispatch an e-invoice') and resource ('e-invoice'). Distinguishes from sibling tools like send_invoice (sends a regular invoice) and get_einvoice_status (polls for completion). The description includes specific formats and dispatch modes, making the purpose precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when to use (dispatching e-invoices with specific formats) and mentions async polling via get_einvoice_status. It also notes the 'unavailable' response if the backend is not deployed. However, it does not explicitly contrast with send_invoice or other invoice-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_invoiceSend InvoiceAIdempotent
Send an invoice to the client via email. Optionally override the recipient email address. The invoice must exist and should not already be cancelled. / Envia una factura al cliente por email. Opcionalmente se puede cambiar el email destinatario.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Invoice ID / ID de la factura | |
| to | No | Override recipient email / Email destinatario alternativo |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| data | No | |
| meta | No | |
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive nature. Description adds minimal behavioral context beyond stating the email action. No additional traits disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two clear English sentences followed by Spanish translation. Could be more concise by dropping the duplicate translation, but not excessively long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers main action and precondition. Output schema exists, so return values are covered. Could mention error cases like invoice not found, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description's mention of optional recipient override repeats the schema. Baseline 3 maintained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send'), resource ('invoice'), and method ('via email'). It distinguishes from siblings like get_invoice and update_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides precondition: 'The invoice must exist and should not already be cancelled.' Does not explicitly mention when not to use, but the precondition implies avoidance for cancelled invoices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_quoteSend QuoteAIdempotent
Send a quote/estimate to the client via email. Optionally override the recipient email address. The quote must exist and should not already be expired or rejected. / Envia un presupuesto al cliente por email. Opcionalmente se puede cambiar el email destinatario.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Quote ID / ID del presupuesto | |
| to | No | Override recipient email / Email destinatario alternativo |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| data | No | |
| meta | No | |
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (idempotentHint=true, destructiveHint=false), the description adds prerequisites and optional behavior. It does not explicitly confirm idempotency but the annotation covers that. The mention of prerequisites adds value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences in English and Spanish, front-loaded with the core purpose, and contains no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, output schema exists), the description covers prerequisites and optional parameters. It does not explain the output, but that is handled by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description adds meaning by explaining the 'to' parameter as an optional override and the 'id' parameter's constraints (must exist, not expired/rejected), which are not fully captured in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (send), the resource (quote/estimate), and the method (via email). It distinguishes itself from siblings like send_invoice by targeting quotes specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for usage: the quote must exist and not be expired/rejected. It also mentions the optional recipient override, but does not explicitly exclude alternatives like send_invoice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_channelSync ChannelAIdempotent
Trigger a manual sync of a booking channel (Airbnb, Booking.com, etc.). Pulls new reservations and/or pushes calendar updates. Returns sync status and counts. / Dispara sincronizacion manual de un canal de reservas. Importa reservas nuevas y/o envia actualizaciones de calendario.
| Name | Required | Description | Default |
|---|---|---|---|
| channelId | Yes | Channel ID / ID de canal | |
| direction | No | Sync direction: pull (import reservations), push (export calendar), or both (default). / Direccion: pull (importar), push (exportar) o both (ambas, por defecto). |
Output Schema
| Name | Required | Description |
|---|---|---|
| errors | No | |
| status | Yes | |
| channelId | Yes | |
| lastSyncAt | Yes | |
| pulledCount | Yes | |
| pushedCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false. The description adds that it triggers a sync, with direction (pull/push/both) and returns sync status/counts. This goes beyond annotations by clarifying the effect on data (pulls reservations, pushes calendar). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences in English and then Spanish, no fluff. It is front-loaded with the key purpose and actions. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has two params, output schema exists, and the description explains sync direction and return values (status/counts). No critical gaps; it covers purpose, parameters, and output well. Could mention that sync may take time or that it is an async operation, but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: channelId and direction are described in the schema. The description mentions pulling and pushing, which aligns with the direction parameter but adds no new details beyond the schema. With full schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool triggers a manual sync of a booking channel, specifying it pulls new reservations and/or pushes calendar updates. This distinguishes it from sibling tools (no other sync tool exists), so it is a specific verb+resource pair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly communicates when to use: when you need to manually sync a channel (pull/push). There are no alternative sync tools among siblings, so explicit when-not or alternatives are not necessary, but it could briefly mention that automatic syncs exist or that this is for manual triggers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_webhookTest WebhookA
Fire a synthetic test event to the webhook endpoint and return the delivery result. Useful to verify endpoint reachability, signature validation, and TLS configuration. Optionally specify the eventType to simulate (default: 'webhook.test'). Example: id='wh_abc', eventType='invoice.paid' / Envia un evento de prueba sintetico al endpoint del webhook. Util para verificar accesibilidad, validacion de firma y configuracion TLS.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID / ID del webhook | |
| eventType | No | Event type to simulate (default: 'webhook.test') / Tipo de evento a simular |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| delivered | Yes | |
| eventType | No | |
| webhookId | Yes | |
| statusCode | No | |
| attemptedAt | No | |
| responseTimeMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety profile. Description adds default eventType and example, but doesn't explicitly state the test event is actually sent to endpoint or discuss permissions/errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences (plus translation) that front-load action and purpose with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values are covered. Description provides sufficient context for a simple test tool, including parameter details and use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both params with descriptions. Description adds value with example usage and default for eventType, exceeding baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'fire' and resource 'webhook endpoint', clearly distinguishing from other webhook tools (get, create, update, delete) by being a test action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes usefulness for verifying reachability, signature, TLS. Lacks explicit when-not-to-use or prerequisites (webhook must exist), but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ticketbai_statusGet TicketBAI Submission StatusARead-onlyIdempotent
Poll the hacienda acknowledgement status for a TicketBAI submission. Returns the TBAI identifier, territory, and hacienda's confirmation or rejection state.
Common status values: • submitted — sent, awaiting hacienda response (check again in 30-60s) • accepted — hacienda confirmed the submission (AEAT/foral treasury received) • rejected — hacienda rejected (check rejectionReason for correction guidance) • error — internal processing error (see error field)
/ Consulta el estado de acuse de recibo de la hacienda foral para un envío TicketBAI. Devuelve el identificador TBAI, territorio y estado de confirmación o rechazo.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | Frihet invoice ID (same as used in ticketbai_submit) / ID de la factura |
Output Schema
| Name | Required | Description |
|---|---|---|
| csv | Yes | CSV (Código Seguro de Verificación) for the submission |
| qrUrl | Yes | QR code URL to print on the invoice (null if not yet available) |
| errors | Yes | Hacienda error messages if rejected (null if none) |
| estado | Yes | Current submission status stored server-side (e.g. 'accepted', 'rejected') |
| accepted | Yes | Whether the submission has been accepted by the hacienda foral |
| submittedAt | Yes | ISO 8601 timestamp the submission was recorded (null if unknown) |
| tbaiIdentifier | Yes | TicketBAI identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by detailing status values and their meanings, especially the polling recommendation for 'submitted' state, which goes beyond basic annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and status list. The bilingual Spanish section is redundant but not excessively long. It is generally efficient, though a single language would improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, 100% schema coverage, and existence of an output schema, the description covers the key behaviors (polling, status values). It doesn't need to explain return values as the output schema exists. Adequate for a polling status tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (invoiceId) with schema description already explaining it's the Frihet invoice ID. The description adds that it's the same ID used in ticketbai_submit, providing helpful cross-reference. Baseline 3 is appropriate as schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it polls the hacienda acknowledgment status for a TicketBAI submission, returning the TBAI identifier, territory, and confirmation/rejection state. It uses specific verbs and resource, and distinguishes from related tools like ticketbai_submit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after submission and provides polling intervals for the 'submitted' status. While it doesn't explicitly state when not to use, the context is clear. It could mention alternatives like get_einvoice_status but isn't required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ticketbai_submitSubmit TicketBAI (Basque Country)A
Submit an invoice to the Basque Country TicketBAI e-invoicing system. Territory is auto-detected from the workspace address (Bizkaia → BATUZ/LROE, Gipuzkoa → Gipuzkoa TicketBAI, Araba → Araba TicketBAI). Returns the submission TicketBAI ID (TBAI identifier) and QR code URL for printing on the invoice.
Use sandbox=true for test submissions against the hacienda test endpoints. Production submissions require a valid TicketBAI certificate configured in workspace settings.
/ Envía una factura al sistema TicketBAI del País Vasco. El territorio se detecta automáticamente (Bizkaia→BATUZ/LROE, Gipuzkoa, Álava). Devuelve el identificador TBAI y URL del código QR para imprimir en la factura.
| Name | Required | Description | Default |
|---|---|---|---|
| sandbox | No | If true, submits to the hacienda test endpoint instead of production. Default: false. / Si true, envía al entorno de pruebas de la hacienda. Por defecto: false. | |
| invoiceId | Yes | Frihet invoice ID to submit / ID de la factura a enviar |
Output Schema
| Name | Required | Description |
|---|---|---|
| csv | Yes | CSV (Código Seguro de Verificación) returned by the hacienda foral |
| qrUrl | Yes | QR code URL to print on the invoice (TBAI compliance) |
| accepted | Yes | Whether the hacienda foral accepted the submission |
| idempotent | No | True if this echoes a prior already-accepted submission (no resubmission occurred) |
| tbaiIdentifier | Yes | TicketBAI identifier (TBAI-XXXXX) returned by the hacienda foral |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (which only show non-readOnly, non-destructive), the description adds key behaviors: territory auto-detection from workspace address, return of TBAI ID and QR code URL, and sandbox vs production distinction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is efficient with two short paragraphs (English and Spanish). It front-loads key actions and outputs. The bilingual repetition costs some conciseness but is justified for the region.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (territory detection, sandbox, production requirements, output fields), the description covers all critical aspects. It mentions return values (TBAI ID, QR URL) even though output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with basic descriptions. The description adds meaning: sandbox is for test endpoints, invoiceId is a Frihet invoice ID. It also notes territory auto-detection, which is not in schema but is relevant context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool submits an invoice to the Basque Country TicketBAI system, a specific verb+resource. It distinguishes from siblings like 'ticketbai_status' and other e-invoicing tools by naming the system and territory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains when to use sandbox=true for tests and notes production requires a valid certificate. It implies usage context (Basque Country invoicing) but does not explicitly state when not to use or compare with alternatives like 'ksef_submit'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_clientUpdate ClientAIdempotent
Update an existing client using PATCH semantics. Only the provided fields will be changed. Example: id='abc123', email='new@acme.com', phone='+34600123456' / Actualiza un cliente existente. Solo se modifican los campos proporcionados.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Client ID / ID del cliente | |
| name | No | Name / Nombre | |
| No | Email / Correo | ||
| phone | No | Phone / Telefono | |
| taxId | No | Tax ID / NIF/CIF | |
| address | No | Client address / Direccion del cliente |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| No | ||
| phone | No | |
| taxId | No | |
| address | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false. The description adds that PATCH semantics are used and only provided fields change, aligning with idempotency. No contradictions, and it adds context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with key information in two English sentences, followed by a Spanish repetition. While efficient, the bilingual aspect adds length; each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested address object), output schema existence, and annotation coverage, the description is reasonably complete. It explains the update semantics and provides an example, though it does not detail nested parameter behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description includes an example (id, email, phone) and bilingual notes about modifying only provided fields, adding practical guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and the resource 'client,' specifying PATCH semantics and that only provided fields change. This distinguishes it from sibling tools like create_client or delete_client.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for updating existing clients but does not explicitly state when to use versus alternatives like create_client or get_client. No when-not conditions or alternative tool names are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_depositUpdate DepositAIdempotent
Update an existing deposit using PATCH semantics. Only the provided fields will be changed. Example: id='abc123', amount=750, notes='Updated retainer amount' / Actualiza un deposito existente. Solo se modifican los campos proporcionados.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deposit ID / ID del deposito | |
| date | No | Date (YYYY-MM-DD) / Fecha | |
| notes | No | Notes / Notas | |
| amount | No | Amount / Importe | |
| status | No | Status / Estado | |
| clientId | No | Client ID / ID del cliente | |
| currency | No | Currency code / Moneda | |
| reference | No | Reference / Referencia | |
| clientName | No | Client name / Nombre del cliente | |
| description | No | Description / Descripcion | |
| paymentMethod | No | Payment method / Metodo de pago |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| date | No | |
| notes | No | |
| amount | Yes | |
| status | No | |
| clientId | Yes | |
| currency | No | |
| createdAt | No | |
| reference | No | |
| updatedAt | No | |
| clientName | No | |
| description | No | |
| paymentMethod | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false, destructiveHint=false, idempotentHint=true. The description adds 'PATCH semantics' and 'Only the provided fields will be changed', which is consistent but does not significantly expand on behavioral aspects like permissions, side effects, or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise with two sentences in English and a Spanish translation. It is front-loaded with the key purpose and behavior. Could be slightly shorter without the redundant Spanish text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple update tool with an output schema present, the description covers the essential update behavior and provides an example. It does not explain return values, but the output schema likely covers that. Adequate for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The description only adds an example ('id='abc123', amount=750, notes='Updated retainer amount') but does not provide additional semantics beyond what the schema already describes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and the resource 'deposit', and specifies 'PATCH semantics' and 'Only the provided fields will be changed', which distinguishes it from other tools like delete_deposit or refund_deposit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an example but does not explicitly state when to use this tool versus alternatives (e.g., create_deposit, delete_deposit). The guidance is minimal, only indicating that only provided fields are changed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_expenseUpdate ExpenseAIdempotent
Update an existing expense using PATCH semantics. Only the provided fields will be changed. Example: id='abc123', amount=75.00, category='travel' / Actualiza un gasto existente. Solo se modifican los campos proporcionados.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Expense ID / ID del gasto | |
| date | No | Date (YYYY-MM-DD) / Fecha | |
| amount | No | Amount in EUR / Importe | |
| vendor | No | Vendor / Proveedor | |
| category | No | Category / Categoria | |
| description | No | Description / Descripcion | |
| taxDeductible | No | Tax deductible / Deducible |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| date | No | |
| amount | Yes | |
| vendor | No | |
| category | No | |
| createdAt | No | |
| updatedAt | No | |
| description | Yes | |
| taxDeductible | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given that annotations already indicate idempotentHint=true and non-destructive, the description adds value by specifying PATCH semantics and partial update behavior ('Only the provided fields will be changed'). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and an example, but includes redundant bilingual text. It is front-loaded with clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters (1 required) and an output schema, the description covers essential behavior (partial update) and usage. It does not detail error handling or validation, but given the output schema exists, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all parameters. The description adds an example of usage (id, amount, category) and clarifies that only provided fields are changed, adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update an existing expense using PATCH semantics' and provides an example with id, amount, and category. It distinguishes from sibling tools like list_expenses, delete_expense, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for updating an expense but does not explicitly state when to use this tool vs alternatives (e.g., other update tools). No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_invoiceUpdate InvoiceAIdempotent
Update an existing invoice using PATCH semantics. Only the provided fields will be changed. Example: id='abc123', status='paid' to mark an invoice as paid. / Actualiza una factura existente. Solo se modifican los campos proporcionados.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Invoice ID / ID de la factura | |
| items | No | Line items / Conceptos | |
| notes | No | Notes / Notas | |
| status | No | Invoice status / Estado | |
| dueDate | No | Due date (YYYY-MM-DD) / Fecha de vencimiento | |
| taxRate | No | Tax rate % / IVA % | |
| clientId | No | Existing client ID — server back-fills taxId/address / ID de cliente existente | |
| irpfRate | No | IRPF withholding % (retencion autonomo ES, e.g. 15 or 7) / Retencion IRPF % | |
| poNumber | No | Client purchase-order reference / Numero de pedido del cliente | |
| seriesId | No | Invoice numbering series ID / ID de serie de numeracion | |
| issueDate | No | Issue date (YYYY-MM-DD) / Fecha de emision | |
| clientName | No | Client name / Nombre del cliente | |
| prepayment | No | Prepaid/advance amount already collected in EUR / Anticipo cobrado en EUR | |
| clientTaxId | No | Client tax ID (NIF/CIF/VAT) shown on the invoice / NIF/CIF del cliente | |
| discountRate | No | Global discount % applied to the invoice / Descuento global % | |
| clientAddress | No | Client billing address shown on the invoice / Direccion fiscal del cliente | |
| operationType | No | Operation type (service or goods) / Tipo de operacion | |
| clientLocation | No | Fiscal zone driving IVA vs IGIC vs exempt / Zona fiscal (IVA/IGIC/exento) | |
| documentNumber | No | Externally-issued number for import (honored verbatim) / Numero externo para importacion | |
| equivalenceSurchargeRate | No | Recargo de equivalencia % (ES retail regime) / Recargo de equivalencia % |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| items | No | |
| notes | No | |
| total | No | |
| status | No | |
| dueDate | No | |
| taxRate | No | |
| createdAt | No | |
| issueDate | No | |
| updatedAt | No | |
| clientName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) cover the key behavioral traits; the description reinforces PATCH semantics but adds no major new insights beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two clear sentences and an example; the bilingual duplication slightly impacts conciseness but is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high parameter count and full schema/ output schema, the description provides sufficient context for an update tool, though it could mention any field-specific constraints (e.g., status transitions).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are fully documented. The description adds an example and general PATCH behavior but does not elaborate on individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update an existing invoice using PATCH semantics' and provides a concrete example, distinguishing it from create or delete invoice tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains partial update behavior ('Only the provided fields will be changed') and gives an example, but does not explicitly state when not to use it or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_kitchen_ticketUpdate Kitchen TicketAIdempotent
Advance a kitchen ticket through the workflow — update its status (e.g. queued → preparing → ready → served) or reassign it to a different station. / Avanza un ticket de cocina en el flujo: actualiza estado (queued → preparing → ready → served) o reasigna a otra estacion.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Ticket ID to update / ID del ticket a actualizar | |
| status | No | New ticket status: on_hold, queued, preparing, ready, served, voided. / Nuevo estado: on_hold, queued, preparing, ready, served, voided. | |
| stationId | No | Reassign to station ID / Reasignar a estacion |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| items | No | |
| status | No | queued | preparing | ready | served | cancelled |
| tableRef | No | |
| createdAt | No | |
| stationId | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already indicating non-destructive and idempotent behavior, the description adds value by specifying the workflow status progression (queued → preparing → ready → served) and listing the exact statuses and station reassignment, which goes beyond the annotation fields. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: two sentences in English and Spanish, front-loading the key action and purpose, with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 params, 1 required), an output schema exists, and the description covers the essential purpose and usage. There is no missing information that would hinder correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with bilingual descriptions for each parameter. The description adds marginal value by listing the status progression examples, but the meaning is already fully conveyed by the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Advance' and the resource 'kitchen ticket', and distinguishes it from sibling tools like get_kitchen_ticket and list_kitchen_tickets by stating the key actions: updating status and reassigning station.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (to advance a ticket through the workflow) and lists specific use cases (status change or reassignment). It doesn't explicitly mention when not to use it, but the purpose is unambiguous and no alternative tool exists among siblings for the same action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_productUpdate ProductAIdempotent
Update an existing product using PATCH semantics. Only the provided fields will be changed. Example: id='abc123', unitPrice=2000, taxRate=21 / Actualiza un producto existente. Solo se modifican los campos proporcionados.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Product ID / ID del producto | |
| name | No | Name / Nombre | |
| taxRate | No | Tax rate % / IVA % | |
| unitPrice | No | Unit price / Precio unitario | |
| description | No | Description / Descripcion |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| taxRate | No | |
| createdAt | No | |
| unitPrice | Yes | |
| updatedAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes PATCH semantics and partial update behavior, adding value beyond annotations. Aligns with idempotentHint=true and destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded key info. Bilingual content is a minor overhead but does not hinder clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately covers partial update semantics. Output schema (present but not shown) would handle return values, so no gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 5 parameters (100% coverage). Description includes an example that adds concrete usage context, elevating above baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (update), resource (product), and method (PATCH semantics), distinguishing it from create and delete siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states that only provided fields are changed, giving a clear usage pattern. However, it does not explicitly compare with alternatives like create_product or delete_product.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_quoteUpdate QuoteAIdempotent
Update an existing quote using PATCH semantics. Only the provided fields will be changed. Example: id='abc123', status='accepted' to mark a quote as accepted. / Actualiza un presupuesto existente. Solo se modifican los campos proporcionados.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Quote ID / ID del presupuesto | |
| items | No | Line items / Conceptos | |
| notes | No | Notes / Notas | |
| status | No | Status / Estado | |
| dueDate | No | Due date in ISO 8601 (YYYY-MM-DD) / Fecha de vencimiento | |
| taxRate | No | Tax rate % (e.g. 21 IVA, 7 IGIC) / Porcentaje de impuesto | |
| clientId | No | Existing client ID — server back-fills taxId/address / ID de cliente existente | |
| irpfRate | No | IRPF withholding % (retencion autonomo ES) / Retencion IRPF % | |
| issueDate | No | Issue date in ISO 8601 (YYYY-MM-DD), defaults to today / Fecha de emision | |
| clientName | No | Client name / Nombre del cliente | |
| validUntil | No | Expiry date (YYYY-MM-DD) / Fecha de validez | |
| clientTaxId | No | Client tax ID (NIF/CIF/VAT) / NIF/CIF del cliente | |
| clientAddress | No | Client billing address / Direccion fiscal del cliente | |
| clientLocation | No | Fiscal zone driving IVA vs IGIC vs exempt / Zona fiscal | |
| equivalenceSurchargeRate | No | Recargo de equivalencia % / Recargo de equivalencia % |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| items | No | |
| notes | No | |
| total | No | |
| status | No | |
| createdAt | No | |
| updatedAt | No | |
| clientName | No | |
| validUntil | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that only provided fields change (PATCH semantics) and gives an example, consistent with idempotentHint annotation. However, it does not disclose potential side effects like triggers upon status change or validation constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with two clear sentences in English (plus a Spanish translation that doesn't harm). The example is front-loaded, making the purpose immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high parameter count and presence of an output schema, the description is somewhat complete but lacks details on behavioral nuances like updating nested objects or side effects. The relationship to sibling tools is not explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all parameters. The description only adds an example for id and status, providing marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and resource 'existing quote' with 'PATCH semantics', and provides an example. It distinguishes from sibling tools like create_quote and delete_quote by specifying the update method and behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying existing quotes but does not explicitly state when to use this tool versus others or provide exclusions. The example gives a common use case but lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_recurring_invoiceUpdate Recurring InvoiceAIdempotent
Update an existing recurring invoice template using PATCH semantics. Only provided fields are changed. Changing lineItems or taxRate affects future generated invoices only, not already-created ones. / Actualiza una plantilla de factura recurrente existente. Solo se modifican los campos proporcionados. Cambiar lineas o tipo impositivo afecta solo a futuras facturas generadas.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Recurring invoice template ID / ID de la plantilla | |
| notes | No | Updated notes / Notas actualizadas | |
| taxRate | No | Updated tax rate percentage / Tipo impositivo actualizado | |
| frequency | No | Updated frequency / Frecuencia actualizada | |
| lineItems | No | Updated line items (replaces all) / Lineas actualizadas (reemplaza todas) | |
| templateName | No | Updated template name / Nombre actualizado |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | No | |
| nextRun | No | |
| createdAt | No | |
| frequency | No | |
| lineItems | No | |
| recipient | No | |
| updatedAt | No | |
| templateName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by explaining PATCH semantics and the side effect that changes to lineItems/taxRate only affect future invoices. No contradiction with annotations (idempotentHint=true, readOnlyHint=false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The English portion is concise and front-loaded, with two sentences covering key points. The inclusion of a Spanish translation doubles length but is a business requirement. Overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential behavioral aspects (partial update, future-only effect) and is sufficient given the presence of an output schema and annotations. Could mention error conditions or prerequisites, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds specific behavioral notes for lineItems and taxRate parameters, clarifying their future-only impact, which provides additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('update'), the resource ('recurring invoice template'), and the specific semantics ('PATCH', partial update). It distinguishes this tool from siblings like create, delete, pause, resume, and run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about partial update and future-only effect, but does not explicitly state when to use vs alternatives or exclude certain scenarios. The agent can infer usage from sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_team_member_roleUpdate Team Member RoleAIdempotent
Change the role of an existing team member. Only workspace admins or owners can change roles. Cannot change the owner's role — use a dedicated ownership transfer flow. Example: memberId='mbr_abc123', role='admin' / Cambia el rol de un miembro existente del espacio de trabajo. Solo administradores o propietarios pueden cambiar roles. No se puede cambiar el rol del propietario — usa el flujo de transferencia de propiedad.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | New role to assign / Nuevo rol a asignar | |
| memberId | Yes | Team member ID / ID del miembro del equipo |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| data | No | |
| meta | No | |
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false. The description adds behavioral context: it is a role change operation requiring specific permissions (admin/owner) and cannot target the owner. While it doesn't detail side effects like notifications or audit logs, it sufficiently 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise English sentences with no redundant information. Key info is front-loaded: purpose, permissions, exception, and example. The structure is clean and efficient, earning its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with an output schema, the description covers purpose, permissions, exception, and provides an example. It doesn't explain return values (handled by output schema). Minor gap: potential downstream effects of role change, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description provides a concrete example (memberId='mbr_abc123', role='admin') which adds slight value, but not substantially beyond the schema's parameter descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Change the role of an existing team member', specifying the verb and resource. It distinguishes from siblings like 'invite_team_member' and 'remove_team_member' by focusing on role changes, and explicitly mentions the owner role exception, differentiating from an ownership transfer flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (to change a role) and who can use it (workspace admins or owners). Also provides a clear exclusion: cannot change the owner's role, directing to a dedicated ownership transfer flow. This offers complete guidance on usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_time_entryUpdate Time EntryAIdempotent
Update an existing time entry using PATCH semantics. Only provided fields are changed. Example: id='te_abc123', hours=3.0, description='Frontend review + testing' / Actualiza una entrada de tiempo existente. Solo se modifican los campos proporcionados.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Time entry ID / ID de la entrada de tiempo | |
| date | No | Updated date ISO 8601 / Fecha actualizada | |
| hours | No | Updated hours / Horas actualizadas | |
| billable | No | Updated billable flag / Facturabilidad actualizada | |
| projectId | No | Reassign to different project / Reasignar a otro proyecto | |
| description | No | Updated description / Descripcion actualizada |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| date | No | |
| hours | Yes | |
| status | No | |
| userId | No | |
| billable | No | |
| createdAt | No | |
| projectId | No | |
| updatedAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark idempotentHint=true and destructiveHint=false. The description adds PATCH behavior and an example but no further behavioral context (e.g., permissions, error states). Annotations cover the safety profile, so a mid-range score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences plus an example. The bilingual duplication slightly reduces efficiency, but the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and 100% parameter coverage, the description adequately explains the tool's partial update behavior. It could mention error handling or prerequisites, but it is complete enough for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds marginal value. The example illustrates usage of id, hours, description, but does not clarify parameter syntax beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update an existing time entry using PATCH semantics' and provides a concrete example. This distinguishes it from sibling tools like create_time_entry, delete_time_entry, and list_time_entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains PATCH semantics ('Only provided fields are changed'), which informs when to use this tool for partial updates. It does not explicitly exclude scenarios or name alternatives, but the context is clear for this resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_vendorUpdate VendorAIdempotent
Update an existing vendor using PATCH semantics. Only the provided fields will be changed. Example: id='abc123', email='new@supplier.com', phone='+34600123456' / Actualiza un proveedor existente. Solo se modifican los campos proporcionados.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Vendor ID / ID del proveedor | |
| name | No | Name / Nombre | |
| No | Email / Correo | ||
| phone | No | Phone / Telefono | |
| taxId | No | Tax ID / NIF/CIF | |
| address | No | Vendor address / Direccion del proveedor |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| No | ||
| phone | No | |
| taxId | No | |
| address | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true. The description adds useful context: PATCH semantics, only provided fields change, and an example. This goes beyond annotations to clarify non-destructive, partial update behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and includes an example, but the bilingual text (English and Spanish) adds length. Still, every sentence serves a purpose and the example is valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 params, nested object, output schema present), the description covers the core operation. It does not detail return values or error cases, but the output schema likely covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with individual parameter descriptions. The description adds an example and clarifies that only submitted fields are updated, which enhances understanding of how parameters behave together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update an existing vendor using PATCH semantics' with a specific verb and resource. It distinguishes from sibling tools like create_vendor or delete_vendor by emphasizing that only provided fields change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_vendor (to read first) or create_vendor (if vendor doesn't exist). The description does not state prerequisites or scenarios where this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_webhookUpdate WebhookAIdempotent
Update an existing webhook configuration using PATCH semantics. Only provided fields change. Example: id='abc123', active=false to disable a webhook. / Actualiza la configuracion de un webhook. Solo se modifican los campos proporcionados.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID / ID del webhook | |
| url | No | Endpoint URL / URL | |
| active | No | Active / Activo | |
| events | No | Events / Eventos | |
| secret | No | Signing secret / Secreto |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| active | No | |
| events | Yes | |
| secret | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses PATCH semantics and partial update behavior, aligning with idempotentHint; no contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences (plus Spanish translation) front-load the key behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete given 5 params, output schema present, and simple semantics; example aids understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters at 100%, description adds an example using id and active but no further meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'update an existing webhook configuration using PATCH semantics', distinguishing it from create, delete, and test webhook siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for updating and gives an example (disabling a webhook), but lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_einvoice_xmlValidate E-Invoice XMLARead-onlyIdempotent
Validate an e-invoice XML document against the specified format's schema and schematron rules. Returns a list of errors with severity, XPath location, message, and rule ID. Runs KOSIT validator (XRechnung), Mustang (EN16931), XSD, or Schematron depending on format.
Use before dispatch to catch errors early without incurring network transmission costs. A valid=true response means the document passes all schema + business rule checks.
If the validation backend is not deployed for this workspace, returns an honest 'unavailable' response — never a fabricated valid=true. / Valida un documento XML de factura electronica contra el esquema y reglas schematron del formato especificado.
| Name | Required | Description | Default |
|---|---|---|---|
| xml | Yes | Raw XML string of the e-invoice document to validate / Contenido XML de la factura electronica | |
| format | Yes | Format to validate against. Determines which validator and ruleset to apply. / Formato a validar. Determina el validador y conjunto de reglas a aplicar. |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | Yes | Whether the XML passes all validation rules |
| errors | Yes | List of validation findings (empty if valid) |
| validator | Yes | Validation engine used |
| durationMs | Yes | Validation duration in milliseconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds specific behavioral details beyond annotations: the validators used (KOSIT, Mustang, etc.) and the return format (errors with severity, XPath, message, rule ID). It also clarifies the honesty policy for unavailable backends. Annotations already indicate read-only and idempotent, but the description enriches transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded with the core purpose. However, it includes bilingual content (English and Spanish) which adds length; while not excessive, it could be streamlined for an AI agent. Overall, it remains concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (2 parameters, output schema exists), the description is fully adequate. It covers the purpose, usage timing, edge cases (unavailable backend), and validation process. With output schema present, return values need no further explanation. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so each parameter is already explained. The tool description adds extra context for the 'format' parameter, stating it 'determines which validator and ruleset to apply', which aids understanding beyond the enum list. This incremental value merits a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates e-invoice XML against schema and schematron rules, specifying the verb 'validate' and resource 'e-invoice XML'. It distinguishes from sibling tools like 'send_einvoice' and 'get_einvoice_status' by focusing on pre-dispatch validation, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using the tool 'before dispatch to catch errors early', providing a clear use case. It also warns about the 'unavailable' response when the backend is not deployed, setting expectations. Although it does not compare with alternatives, the guidance is sufficient for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verifactu_resubmitRe-submit VeriFactu SubmissionAIdempotent
TRUST AREA — COMPLIANCE. Re-submit a failed or rejected VeriFactu submission to AEAT. Idempotent: uses the same hash chain; AEAT deduplicates by hash. Creates an audit trail entry for every resubmission attempt. Requires confirm=true. Only use on invoices with status='failed'. / AREA DE CONFIANZA — COMPLIANCE. Reenvio de una factura VeriFactu fallida a AEAT. Idempotente: misma cadena hash. Registra entrada de auditoria en cada intento. Requiere confirm=true. Solo para facturas con status='failed'.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to confirm VeriFactu resubmission / Debe ser true para confirmar el reenvio | |
| invoiceId | Yes | Invoice ID to resubmit / ID de la factura a reenviar |
Output Schema
| Name | Required | Description |
|---|---|---|
| csv | No | |
| hash | No | |
| qrUrl | No | |
| status | No | |
| sandbox | No | |
| accepted | No | |
| invoiceId | Yes | |
| lastError | No | |
| retryCount | No | |
| submittedAt | No | |
| aeatResponse | No | |
| lastSubmissionAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false. Description adds that it creates an audit trail entry per attempt and requires confirm=true, which is useful beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is bilingual (English and Spanish), doubling length but serving a multilingual user base. Key info is front-loaded: purpose, idempotency, audit trail, requirement. Could be more concise by dropping the trust area tag, but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given annotations (idempotentHint) and required params, the description covers the essential behavioral points: idempotency, audit trail, confirm requirement, and invoice status condition. Lacks error scenarios or response details, but output schema may cover return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds the constraint that confirm must be true and that invoiceId must belong to a failed invoice. This provides meaningful behavioral context beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool re-submits a failed or rejected VeriFactu submission to AEAT. The phrase 'TRUST AREA — COMPLIANCE' sets domain context. Distinguishes from siblings like 'send_invoice' (new submission) and 'verifactu_status' (status check).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Only use on invoices with status="failed".' and 'Requires confirm=true.' Provides clear when-to-use context. Lacks explicit when-not-to-use or alternatives, but condition is precise enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verifactu_statusGet VeriFactu Submission StatusARead-onlyIdempotent
Get the VeriFactu (AEAT Spanish e-invoice chain) submission status for a specific invoice. Returns last submission timestamp, hash, AEAT response code, and QR verification URL. / Obtiene el estado de envio VeriFactu (AEAT) para una factura especifica. Devuelve timestamp del ultimo envio, hash, respuesta AEAT y URL del codigo QR.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | Invoice ID / ID de la factura |
Output Schema
| Name | Required | Description |
|---|---|---|
| csv | No | |
| hash | No | |
| qrUrl | No | |
| status | No | |
| sandbox | No | |
| accepted | No | |
| invoiceId | Yes | |
| lastError | No | |
| retryCount | No | |
| submittedAt | No | |
| aeatResponse | No | |
| lastSubmissionAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds specific return fields (timestamp, hash, response code, QR URL), providing useful behavioral detail beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences in bilingual format, each earning its place. Front-loaded with key information, no fluff. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (single parameter, annotations, output schema present), the description is complete enough to understand the tool's behavior without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter invoiceId has full schema description coverage (100%). The tool description does not add additional semantics beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves VeriFactu submission status for a specific invoice, listing returned fields. This distinguishes it from sibling tools like send_invoice, get_einvoice_status, ticketbai_status, and verifactu_resubmit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking status after submission but provides no explicit guidance on when to use this tool versus alternatives like get_einvoice_status or ticketbai_status. Context is implied but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes, but with 148 tools, some overlap exists (e.g., send_invoice vs send_einvoice, list_invoices vs search_invoices). Overall, the actions and targets differentiate tools sufficiently.
Many tools follow verb_noun pattern, but there are inconsistencies like 'leave_request_create' (noun_noun_verb) and prefixes (frihet_, gestoria_) that break uniformity. Still readable overall.
148 tools is excessive for an MCP server. While the server covers a broad ERP scope, the count is far beyond the typical 3-15 range, making the surface overwhelming.
Covers many domains comprehensively (invoicing, e-invoicing, tax models, HR), but missing basic CRUD for clients (no create_client or delete_client), which is a notable gap in the client lifecycle.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Send invoices from Claude and ChatGPT. One sentence becomes a PDF with a Stripe payment link.
34-tool CRM server — contacts, pipeline, quotes, invoices, scheduling, email, and AI scoring.
Chilean DTE/SII invoicing — issue invoices, reconcile payments and manage clients with AI agents.
Form companies, manage bank accounts, cards, invoices and more — directly from your AI coding tools.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with the Finizi B4B platform through 15 comprehensive tools for managing business entities, invoices, vendors, and products. Features secure JWT authentication, automatic retries, and full business-to-business workflow integration through natural language commands.-
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with the Finizi B4B platform through 15 comprehensive tools for managing business entities, invoices, vendors, and products. Features secure JWT authentication, automatic retries, and comprehensive business data operations through natural language commands.-
- AlicenseNot gradedqualityAmaintenanceComplete Swiss accounting integration for Bexio via MCP. Works with Claude Desktop, n8n, and any MCP client. 221 tools for invoices, contacts, projects & more. Created by Lukas Hertig.29MIT
- AlicenseAqualityCmaintenanceAI-powered freelance business manager for Claude Code. Proposals, invoices, time tracking, scope management, and follow-ups - 37 tools, 5 coaching skills.3722MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Frihet-io/frihet-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server