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 indicate read-only, idempotent, non-destructive behavior. The description adds value by specifying what anomalies are included and the available filters, going 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 front-loaded with the purpose and filters. It is relatively concise, though the bilingual repetition adds some redundancy. 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?
Given the tool's simplicity, the description covers the essential use cases. With an output schema present, return values are handled. Could mention pagination behavior, but offset/limit parameters imply 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 parameters are described in the schema. The description adds no additional parameter-level information; it only lists filter types 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 the verb 'List' and the resource 'anomalies', specifies the domains (HR/operational/financial), and lists example types. It distinguishes itself from sibling list tools by focusing on anomalies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 daily HR review and compliance audits', giving clear context for use. However, it does not explicitly state when not to use it or mention alternative tools.
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 provide no special hints, so description carries full burden. It discloses that the tool records a clock-in and returns an entry with status='open', but does not mention potential side effects like duplicate clock-in prevention or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, consisting of two English sentences and a Spanish repetition. It is front-loaded with the main purpose. The bilingual aspect slightly increases length but is not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 covers purpose, optional parameters, return status, and pairing with clock_out. Given that output schema exists (so return details are not needed here) and schema covers parameters, this is fairly complete. Missing details about error conditions but 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 descriptions already cover all three parameters. The tool description adds minimal context by labeling mood as 'employee well-being tracking' and location as 'remote/office/site'. With 100% schema coverage, baseline is 3; description adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records a clock-in, optionally captures mood and location, and returns an attendance entry with status='open'. It distinguishes from sibling attendance_clock_out by mentioning 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 gives context by stating 'Pair with attendance_clock_out to close the entry,' implying when to use this tool (to start a shift) and that clock_out is the complementary tool. However, it does not explicitly state when not to use (e.g., if already clocked in).
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?
Discloses idempotency (closing an already-closed entry is a no-op) which adds beyond the idempotentHint annotation. Also explains it stamps clockOutAt and computes durationMinutes.
Agents need to know what a tool does to the 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 the primary action, includes idempotency note, and a Spanish translation. 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?
Complete for a simple tool: explains action, idempotency, and output calculation. Output schema exists to cover return values. Could mention prerequisites (entry must be open) but it's implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description does not add additional meaning beyond what the schema provides for the only parameter (entryId).
Input schemas describe structure but not intent. Descriptions should explain 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 an open attendance entry, stamps clockOutAt and computes duration. Distinguishes from sibling attendance_clock_in by being the clock-out counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool is for closing an open attendance entry, but does not explicitly exclude scenarios or mention alternatives. However, the complementary relationship with attendance_clock_in is clear.
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?
The description discloses key behavioral traits: template creation (not immediate invoice) and scheduling ('first invoice instance generated on next scheduled run date'). Annotations already indicate non-readonly and non-destructive, so the description adds scheduling context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual, doubling length without essential additional info. While the English part is concise, the Spanish repetition adds redundancy. Still, key information is front-loaded, but not maximally 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 an output schema (not provided but indicated), the description adequately covers creation behavior and scheduling. It doesn't address error cases or active status, but for a template creation tool with 100% schema coverage, 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 the description adds limited value beyond the schema. It reiterates frequency options and provides an example, but the schema already describes all parameters clearly. 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 'Create a new recurring invoice template,' specifying the verb (create), resource (recurring invoice template), and key fields (frequency, client, line items, start date). It distinguishes from one-time invoice creation via sibling tools like create_invoice and update_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 provides clear context: specify frequency, client, line items, and optional start date, with an example. It implies use for recurring billing but lacks explicit when-to-use vs alternatives or exclusions. Still, the context is well communicated.
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 adds that the deletion is permanent and irreversible, which goes beyond the destructiveHint annotation. However, it does not disclose other behavioral traits like error handling, idempotency behavior, or authorization 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?
The description is concise, with two short sentences (plus bilingual repetition). It is front-loaded and contains minimal waste, though it could be slightly more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 required parameters and an output schema, the description covers the core purpose and irreversibility. However, it lacks details on prerequisites, success/failure behavior, and edge cases.
Complex tools with many parameters or behaviors need more documentation. 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 covers both parameters with bilingual descriptions, achieving 100% coverage. The description does not add any additional meaning or constraints beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Permanently delete a contact from a client.' It uses a specific verb and resource, and distinguishes from siblings like delete_client or delete_client_note by specifying 'contact'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It only states what it does, leaving the agent to infer usage from the context of sibling tools.
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?
Annotations already mark destructiveHint=true and readOnlyHint=false; description adds nuance: 'Permanently delete... only the template and future scheduled runs. Requires confirm=true to prevent accidental deletion.' Adds 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 short, front-loaded sentences. Bilingual but no waste. Every sentence earns its place – scope, exclusions, safety requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deletion tool with output schema, description covers scope (template only), permanence, safety (confirm flag). No gaps given annotations and 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 both parameters. Description reinforces the confirm parameter's purpose ('Requires confirm=true') and implicitly links id to the template. Adds 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 'Permanently delete a recurring invoice template' – specific verb+resource. Also clarifies scope (does not delete generated invoices), distinguishing it from delete_invoice and other delete tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains what it does and does not do (template vs generated invoices) and notes the required confirm=true. Provides clear context, though no explicit alternatives or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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?
Beyond annotations (destructiveHint, idempotentHint), the description reveals it's a soft-delete, that deleted entries are excluded from billing reports but retained for audit. This adds valuable behavioral context not captured by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual, doubling its length, but each sentence adds value: defines the operation, the requirement, and the impact. It is front-loaded with purpose and concisely explains consequences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 need not cover return values. It explains the core effect (soft-delete) and relevant business impact (exclusion from billing, audit retention), making it fully informative for a delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with bilingual descriptions. The description adds meaning by explaining confirm=true's purpose (prevent accidental deletion), which is not in the schema descriptions. This goes beyond the baseline for full 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 clearly states 'Soft-delete a time entry by ID', specifying the action (soft-delete), resource (time entry), and scope (by ID). This distinguishes it from sibling tools like create_time_entry, update_time_entry, and other delete_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Requires confirm=true to prevent accidental deletion', guiding the agent to always set confirm=true. While it doesn't contrast with alternatives, the requirement is clear and contextually sufficient.
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 declare readOnlyHint and idempotentHint, covering safety. The description adds that it lists all rules (no default filter) and describes return fields, which is useful but not extensive 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 English sentences front-load the purpose and output, followed by a Spanish translation. No wasted words; ideal structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description adds useful context about return fields. For a list tool with clear parameters and annotations, this is fully 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?
All three parameters are fully described in the schema (100% coverage). The description does not add parameter-specific semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('List all') and the resource ('bank auto-categorization rules for the workspace'). It distinguishes from sibling 'frihet_bank_rule_create' and other list tools by focusing on workspace rules. The bilingual text adds no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: use when you need to view existing auto-categorization rules. However, there is no explicit 'when not to use' or comparison with alternatives. The output description helps but lacks direct guidance on selection among siblings.
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 already mark it as read-only and idempotent. Description adds specifics like return structure (buckets, breakdown, top invoices) and scope requirement for different ownerUid. Adds context 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 bilingual sentences front-load key functionality and parameters. Every word is informative. No 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 tool's moderate complexity and existence of an output schema, the description covers purpose, parameter usage, behavioral notes, and expected output structure. Sufficient for an agent to correctly 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 coverage is 100% for the single parameter. Description explains default behavior and scope requirement, adding significant meaning beyond the schema definition.
Input schemas describe structure but not intent. Descriptions should explain 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 for a gestor, with details on bucketing (current, 30-60, 60-90, 90+ days) and breakdowns (per-workspace and top invoices). It distinguishes from siblings as no other tool provides this specific report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 default behavior (authenticated gestor) and how to query a specific gestor via ownerUid with elevated scope. Clear when to use each mode, though no explicit mention of alternatives among siblings.
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 MessageA
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 already indicate mutation (readOnlyHint=false) and non-destructive (destructiveHint=false). Description adds that the message appears in a threaded context visible to both parties. Does not disclose potential errors, permissions, or notification behaviors.
Agents need to know what a tool does to the 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 is front-loaded with English then Spanish. Appropriate length for clarity. Could be slightly more concise by merging repeated parts, but overall efficient for bilingual users.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Explains threading concept, parent types, and typical use cases. Output schema exists so return format is handled elsewhere. Missing mention that the parent entity must already exist, but otherwise complete for a message sending 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?
Input schema covers all 4 parameters with descriptions. Description adds a concrete example with values, enhancing understanding. However, schema already provides clear parameter meaning, so description is supplementary rather than essential.
Input schemas describe structure but not intent. Descriptions should explain 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 sends a message in a contextual thread between gestor and client, with specific parent types. Distinguishes from sibling tools like gestoria_messages_list (list) and gestoria_template_bulk_send (bulk). Includes example usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 specific use cases: chasing missing documents, replying to client questions, annotating presentations. Does not explicitly state when not to use or alternatives, but the context implies it's for ad-hoc individual messages as opposed to bulk or template-based sending.
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 read-only, idempotent, non-destructive. The description adds behavioral details: returns messages newest first, supports cursor-based pagination, and includes a `hasMore` flag. 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 concise sentences in English followed by a Spanish translation. No wasted words; purpose, ordering, and pagination are front-loaded. 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 purpose, ordering, pagination, and the `hasMore` flag. All required parameters are explained in schema, and the description adds the necessary usage context 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 parameters are well-documented. The description adds semantic value by explaining `before` accept both message ID and ISO timestamp, and by clarifying the pagination behavior with `limit` and `hasMore`.
Input schemas describe structure but not intent. Descriptions should explain 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 (messages), and scope (contextual gestor/cliente thread). It specifies ordering (newest first) and distinguishes from sibling tools like gestoria_message_send.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (listing messages in a thread) and provides pagination guidance with `before` and `hasMore`. It doesn't explicitly mention 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.
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?
Discloses notification handler trigger, opt-out respect, period variable plugging, and per-client outcome return. Annotations are minimal (not read-only, not destructive), so description carries burden and adds value with RGPD trust area mention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficiently structured with clear front-loading. Bilingual (English/Spanish) adds length but serves dual audience. Each sentence contributes useful 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?
Covers main aspects: target, limits, opt-out, period overrides, notification, return type, and RGPD. Output schema exists so return value detail is not required. Adequate for its 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 covers 100% of parameters with descriptions. Description adds context: periodOverrides used for runtime values, example provided, and max 500 limit for clientWorkspaceIds. Enhances understanding 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 it sends the same document request template to up to 500 client workspaces in one call. Distinguishes from siblings like gestoria_message_send (individual message) and gestoria_template_create (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?
Describes when to use (bulk sending) and mentions opt-out handling, period overrides, and notifications. Does not explicitly list alternatives or when-not-to-use, but sibling context provides implicit guidance.
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?
The description adds significant behavioral context: variable interpolation, due date offset behavior, attachment requirement, and an example. Annotations are minimal, so the description carries the burden and does it 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 concise with two sentences and an example, but the example is inline and could be more structured. Still efficient and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is complete for a create tool: it covers core functionality, usage, parameters, and behavioral details. 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%, but the description adds value by explaining parameters in context (e.g., dueDateOffsetDays meaning, attachmentRequired default) and provides an example that ties all parameters 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 'Create a reusable document request template that the gestor can bulk-send to many client workspaces,' specifying the verb and resource, and distinguishes from siblings like gestoria_template_bulk_send.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (creating templates for bulk-sending) and provides an example, but does not explicitly state when not to use or list alternatives beyond implying the send tool.
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, and idempotentHint=true, covering safety and idempotency. The description adds no new behavioral traits beyond stating it returns details, which is consistent. Since annotations carry the burden, a score of 3 is appropriate; 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: two sentences (English then Spanish), each adding value. The front-loaded English sentence states purpose and list of returned fields. The Spanish translation is helpful for bilingual users but does not add redundancy. Slight length increase is justified by 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?
Given the tool's simplicity (single parameter, read-only, with output schema), the description provides sufficient context: it lists the key return fields, and annotations cover behavioral traits. No missing information about permissions, rate limits, or errors is necessary for this straightforward get operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single required 'id' parameter. The description does not add any additional meaning or syntax beyond what the schema provides (e.g., 'by ID' is redundant). Baseline 3 is correct as the schema already documents the parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and clearly identifies the resource 'recurring invoice template by ID', listing the returned fields (name, frequency, next run date, recipient, line items, status). This distinguishes it well from sibling tools like list_recurring_invoices (which lists templates) and create/update/delete/pause/resume 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?
Although no explicit when-not-to-use or alternatives are given, the context is clear: use this tool when you need full details of a specific recurring invoice template by ID. The sibling list_recurring_invoices is for listing all templates, so the usage complement is implied. No misleading guidance.
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 provide readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context about the content of the response (full sale details), which is valuable 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?
Two concise sentences in English, followed by a Spanish translation. No unnecessary words, 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?
For a simple retrieval tool with one parameter and an output schema (as indicated), the description sufficiently covers what the agent needs to know: the resource, the identifying parameter, and the key fields returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the parameter 'id' with a bilingual description. The description adds no new semantic information about the parameter beyond stating 'by ID'.
Input schemas describe structure but not intent. Descriptions should explain 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 gets a single POS sale by ID and lists the key fields returned (terminal, items, payment method, amounts, status). It distinguishes itself from sibling tools like list_sales (which lists many) and refund_sale (which modifies).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the agent to use this tool when needing full details of a specific sale, but does not explicitly mention alternatives or when not to use it. Given the simplicity of the operation, this is adequate.
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?
Annotations indicate a mutation (readOnlyHint=false) and no destructiveness. The description adds behavioral details: an invitation email is sent and the member must accept before gaining access. 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 relatively concise but includes bilingual content (English and Spanish), which may be redundant for a single-language agent. Overall, it is well-structured with clear sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, flow, and roles, but lacks details on edge cases (e.g., duplicate invitations, invalid emails) and does not mention the output schema exists. Given the presence of an output schema, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 a usage example and role descriptions, but these largely overlap with schema descriptions. No significant 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 action ('Invite a new member to the workspace by email address') and identifies the resource (team member). It distinguishes from sibling tools like remove_team_member and update_team_member_role by specifying the invitation 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?
The description provides context about the invitation process (email sent, acceptance required) and lists roles with descriptions, but does not explicitly state when to use this tool versus alternatives (e.g., update_team_member_role for role changes).
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?
Description adds context beyond annotations: logs decision with timestamp and approver, states idempotency (aligns with idempotentHint). 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 sentences front-load key info and include Spanish translation without extra fluff. Every sentence is relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description covers purpose, side effects, preconditions (pending), and idempotency. Complete for a simple approval 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 bilingual descriptions, so description adds no extra parameter 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 uses specific verb 'Approve' and resource 'pending leave request', clearly distinguishing from sibling tools like leave_reject and leave_cancel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While no explicit when-not/alternatives are stated, the name and description implicitly guide an AI agent to use this for approving pending leaves, and the sibling set provides clear contrasts.
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 value beyond annotations by noting that HR cancellation may trigger schedule rollback. Annotations already indicate non-destructive, but description gives helpful behavioral nuance.
Agents need to know what a tool does to the 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 clearly state the purpose and usage. The Spanish translation is redundant but harmless. Well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema (not shown), the description covers typical usage and side effects. Adequate without being overly detailed.
Complex tools with many parameters or behaviors need more documentation. 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 parameter leaveId is fully described in the schema. Description adds no additional meaning or example 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 (cancel) and resource (leave request), and distinguishes use by employee vs HR. However, it does not explicitly contrast with siblings like leave_approve or leave_reject, missing a chance to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context: used by employee before approval or by HR after approval, with possible schedule rollback. But lacks explicit when-not-to-use or alternative tools, leaving some ambiguity.
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, idempotentHint=true, destructiveHint=false, so the description doesn't need to add behavioral safety info. It adds context about filters but no additional 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 sentences in English plus a Spanish translation, with no wasted words. It is front-loaded with the core action and filters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 comprehensive annotations, full schema coverage, and existence of an output schema, the description provides sufficient context for an AI agent to understand the tool's purpose 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?
Schema coverage is 100%, so baseline 3. The description mentions filter options (employee, status, period) but does not add new semantics beyond what the schema already describes for each 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 verb 'List' and the resource 'leave/PTO requests', and specifies optional filters. It distinguishes from sibling tools like leave_approve, leave_cancel, etc., which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives usage context ('Useful for HR dashboards, calendar views, balance tracking'), implying when to use it. It does not explicitly exclude alternatives, but the sibling tools clearly cover other actions.
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?
Annotations (idempotentHint=true, destructiveHint=false) already indicate safe, idempotent operation. Description adds 'TRUST AREA — HR DECISION' and reason compliance context, but no additional behavioral details 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 plus bilingual repetition, front-loaded with purpose. The Spanish translation is redundant but does not significantly bloat. Could be slightly more concise but effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 rejection tool with two params and existing output schema, description adequately covers purpose and key constraint. No need to detail output as schema handles 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 covers 100% of parameters with basic descriptions. Description adds semantic value by explaining reason is mandatory for 'transparency and labor-law compliance' and flags as trust area, enhancing parameter 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?
Description clearly states 'Reject a pending leave request with a required reason,' specifying the verb, resource, and constraint. Distinct from sibling tools like leave_approve and leave_cancel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context for rejection (pending leave request) and reason requirement, implicitly distinguishing from approval/cancellation. Lacks explicit when-not guidance 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.
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 mutation (readOnlyHint=false) and non-destructive behavior. The description adds value by specifying that the created request starts as 'pending,' which informs the agent about the post-creation state.
Agents need to know what a tool does to the 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 (plus Spanish translation) that convey all essential information without redundancy. 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?
For a create tool with an output schema, the description adequately covers input behavior (types, dates, initial status). No missing critical information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds extra meaning by listing the allowed types for 'type' and specifying ISO 8601 format for dates, which is not fully detailed in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new leave/PTO request for an employee' and distinguishes from sibling tools like leave_approve, leave_cancel, etc. It lists leave types and mentions initial status, 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 explains that status starts as 'pending' awaiting approval, implying this is the creation step. It does not explicitly state when not to use it, but the context of sibling tools provides adequate guidance.
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 NotesBRead-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?
Description adds no behavioral traits beyond annotations (readOnlyHint, destructiveHint). No mention of auth, rate limits, or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two languages (English and Spanish) repeat the same content, making it slightly redundant. Could be more concise but still short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with pagination, annotations cover safety, and output schema exists. The description is adequate; 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 description coverage is 100%, so the schema already describes parameters. The description adds 'optional pagination', which aligns with limit/offset, but no extra 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 verb 'list', resource 'notes for a client', and scope 'all notes with optional pagination'. Distinguishes from sibling tools like create_client_note and 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?
No explicit when/when-not or alternatives. Implied usage is clear (list notes for a client), but no guidance on ordering or filtering beyond pagination.
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 InvoicesBRead-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 indicate read-only, idempotent, non-destructive. Description adds pagination behavior, sorting order, and filter support. Does not disclose limitations (e.g., global vs scoped) or pagination interaction. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise English sentences front-loaded with purpose, then details and example. Bilingual addition is redundant but not harmful. 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?
With 9 parameters, description only highlights status and date range, ignoring clientId, seriesId, after, offset, fields. Missing key filter capabilities despite output schema existing. Incomplete for 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 detailed parameter descriptions. Description redundantly mentions status and date range filters but introduces no new semantics. 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 'List all invoices with optional pagination and filters' and mentions sorting by issue date. Distinguishes from sibling search_invoices implicitly by being a broad listing, but does not explicitly differentiate. Example adds 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?
No guidance on when to use this vs alternatives like search_invoices. Does not specify scope (e.g., user/workspace limitations) or when not to use. The example shows usage but no context for decision.
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 declare readOnly and non-destructive. Description adds no behavioral traits beyond listing fields. No contradiction but also no added 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 concise English sentences then bilingual repeat. Front-loaded with key info. Minimal waste, but the translation adds 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 output schema exists, description adequately covers return fields and pagination. No gaps for this simple 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 parameter descriptions. Description does not add additional meaning beyond what schema provides; 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?
Clearly states 'List all recurring invoice templates' with specific verb and resource, and enumerates returned fields. Distinguishes from sibling tools like get_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?
Implies usage by describing what it lists, but does not explicitly state when to use it over get_recurring_invoice or other listing tools. 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_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 declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value by listing the specific fields returned and the invite status values, 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 concise in English (two sentences) and includes a bilingual version, which adds length but is still clear. Every sentence contributes to purpose, output, and use case. 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?
Given annotations and output schema exist, the description covers purpose, output, and use cases. It does not explain pagination behavior or default sorting, but for a simple list tool, it is fairly 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 parameters are fully described in the schema. The description does not add extra meaning or usage examples for role, limit, offset, or status. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all members in the workspace and specifies the returned fields (ID, name, email, role, invite status). It also notes use cases (access management, auditing). It is distinct from sibling tools like invite_team_member or remove_team_member.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 access management and auditing but does not explicitly state when to use this tool versus alternatives. No exclusions or alternative tool references are provided. Context is clear but guidance is limited.
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?
Annotations already indicate idempotency. The description adds behavioral context by explaining the effects of each persona and that setting the same persona is a no-op, which goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose, and structured with a clear list. Every sentence adds value. The Spanish translation is redundant but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 and an output schema, the description covers purpose, parameter semantics, idempotency, and effects. No significant 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?
With 100% schema coverage, the baseline is 3, but the description enriches the single enum parameter by providing clear meanings for each persona value ('autonomo', 'empresa', etc.), which the schema only labels as 'Workspace persona'.
Input schemas describe structure but not intent. Descriptions should explain 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 'Set' and resource 'workspace persona', and explains what it drives (module visibility, chart-of-accounts, checklist). It distinguishes itself from sibling tools like 'onboarding_status'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. No when-not-to-use or alternative recommendations are given. Usage is implied by the purpose.
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?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds no behavioral traits beyond what's in annotations. No contradiction, but description doesn't enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two English sentences plus a Spanish translation. Purpose is front-loaded. Could omit Spanish for brevity 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?
Tool has no parameters and a known output schema. Description covers what it returns and why it's useful. Fully complete for its 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?
No parameters exist; schema coverage is 100%. Baseline per rules is 4. Description adds no param info, which is acceptable given absence.
Input schemas describe structure but not intent. Descriptions should explain 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 'return's the current workspace onboarding state and lists specific data fields (persona, steps, percent). It is specific about its resource and action, but does not explicitly distinguish from sibling tools like onboarding_persona_set, though context implies it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 use cases: 'drive in-app guidance, sales follow-up triggers, and partner program tracking.' Lacks exclusion criteria or alternatives but offers clear contextual usage.
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 already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds no new behavioral insights beyond stating the output content (aggregation of hours and cost). 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 two concise sentences in English plus a Spanish translation. Every sentence adds information: purpose, output, usage context, and format. No redundancy or 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 output schema, annotations, and clear parameter descriptions, the description fully covers the tool's purpose, output, and usage hints. It is complete for a read-only report generation 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%. The description adds value by explicitly stating period formats ('YYYY-MM', 'YYYY-QN', 'YYYY') and reinforces that employeeId is optional. This clarifies usage beyond the schema's brief 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 verb 'generate', resource 'overtime report', and scope: 'aggregates regular vs overtime hours per employee + total estimated cost in EUR.' It distinguishes from siblings like get_time_summary by focusing specifically on overtime and payroll/labor-law use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage context: 'useful for payroll prep and labor-law audits.' It provides period format examples but does not explicitly contrast with alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 idempotent and non-destructive. Description adds that no new invoices are generated while paused and the template is preserved, aligning 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?
Two sentences, front-loaded with the core action, then effect and reversion. No wasted words; bilingual version is fine.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 covers the purpose, effect, and how to undo. Complete for a state-change 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?
Parameter 'id' is fully described in the schema (100% coverage). The description does not add extra meaning; 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 'Pause an active recurring invoice template', with a specific verb and resource. It distinguishes from siblings like 'resume_recurring_invoice' by mentioning the resume action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context for when to use (to stop generation temporarily) and explicitly mentions resume_recurring_invoice for restarting. Could be improved by noting when not to use, but sufficient guidance is given.
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?
The description reveals the tool is a read-only, idempotent operation (consistent with annotations) and adds context about the status values and the missingFields array. 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 front-loaded English sentences plus a Spanish translation. The status list is structured 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 single parameter with full schema coverage, annotations, and straightforward purpose, the description is complete. It tells what it returns, when to use it, and the status schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'month' is fully described in the schema (pattern). The description adds the format example and usage context but does not provide additional parameter-specific semantics beyond what the schema 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 lists employees for a month with payroll readiness status. It distinguishes itself from siblings by specifying use before payroll_export, and explains status values in detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance to use before payroll_export to identify gaps, along with month format specification. This tells the agent when and in what order to use the tool relative to siblings.
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 already indicate read-only, idempotent, non-destructive. Description adds critical context: 'expo ts staged data for the gestoria' and explicitly states no payroll calculation, which is valuable beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise paragraphs: first explains purpose and formats, second adds an essential behavioral note. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple export tool with a defined input schema and existing output schema, the description covers purpose, formats, behavioral nuance, and required parameter format. 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 description adds further meaning by listing the five enum values explicitly and specifying the month format with an example. The bilingual note reinforces the 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?
Clearly states 'Export payroll data for a month in gestoria-compatible format' with a list of five specific formats. Distinguishes itself from export tools like export_datev through the context of gestoria compatibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 export staged data for the gestoria') and when not ('Frihet does NOT calculate payroll'). Provides month format specification. Lacks direct comparison to sibling exports like export_datev, but the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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?
Annotations already show destructiveHint and idempotentHint. Description adds specific freezes and no-op behavior, 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?
Two concise English sentences with key info; Spanish duplication adds length but still effective. Front-loaded with critical 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?
Adequate for a 2-param tool with output schema. Covers purpose, usage conditions, behavioral traits, and alternatives. 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 descriptions for both parameters. Description reinforces confirm=true which is already in schema. Minimal addition but consistent.
Input schemas describe structure but not intent. Descriptions should explain 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 'close', resource 'accounting period', and specific actions: freezes invoices, expenses, journal entries, bank reconciliations. Distinguishes from siblings like period_close_status (status check) and period_reopen (reopening).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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, notes idempotency, and mentions reopening via period_reopen with audit reason. Gives clear when-to-use and alternative.
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 declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds the default period selection logic and enumerates possible states, 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?
Description is two sentences: one English, one Spanish. No wasted words, front-loaded with core purpose, and includes essential details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and rich annotations, the description covers all needed context: purpose, states, 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?
Schema coverage is 100% (periodId with bilingual description). Description adds value by explaining the behavior when periodId is omitted, which is not in the schema 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?
Description clearly states 'Get the current accounting period state' and lists possible states (open/closing/closed/reopened). Distinguishes from sibling tools like period_close and period_reopen by being a read-only 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?
Implicitly indicates when to use: to check the state of an accounting period. Specifies default behavior when periodId is omitted, which is a helpful usage note. Could be more explicit about when not to use (e.g., not for changing state).
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?
Adds value beyond annotations by explaining that reopening allows backdated edits to invoices/expenses, which is critical behavioral context. Aligns with destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences in each language, front-loaded with action and warnings. Bilingual nature adds length but remains efficient. 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?
Covers all key aspects: required inputs, consequence (backdated edits), and caution. Output schema exists, so return values are not needed. Completeness is high for a sensitive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each parameter. Description only restates schema info without adding new semantic details. Baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Reopen a closed accounting period' with specific verb and resource. It distinguishes from sibling tools like 'period_close' by being the inverse operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies required inputs (reason, confirm=true) and warns about extreme caution. Does not explicitly compare to alternatives, but the context is clear given sibling names.
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 indicate read-only, idempotent, non-destructive. Description adds detail about the output (full matrix, roles, permissions, resources) without contradiction. Full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two brief sentences (plus Spanish translation) that front-load the action and result. No superfluous 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 zero-parameter, read-only tool with an output schema. Description covers purpose, output content, and use cases adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (schema coverage 100%). Description does not need to add parameter info. Baseline 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain 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 'Return the full role-to-permission matrix for the workspace' with specific verb and resource. Distinguishes from sibling tools like 'permissions_me' which is singular. Mentions listing roles, permissions, and protected 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?
Provides explicit use cases: 'security audits, role design, and compliance reporting'. Does not specify when not to use or list 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.
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, idempotentHint=true, destructiveHint=false. The description adds value by specifying that it returns 'effective role + permissions' and is scoped to the 'current workspace,' providing 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 English portion is two sentences: first sentence defines purpose, second provides usage guidance. No wasted words. The Spanish translation is additional but not detrimental. 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?
Given the tool's simplicity (no parameters, read-only, output schema present), the description fully covers purpose, usage, and return value. Annotations and output schema handle the rest. 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?
With 0 parameters and 100% schema coverage, the description need not add parameter info. It implicitly covers the absence of input by focusing on output. Baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Return the caller's effective role + permissions in the current workspace,' clearly identifying the verb (return), resource (role + permissions), and scope (current workspace). This distinguishes it from sibling 'permissions_matrix' which likely returns a broader matrix.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete use cases: 'client-side UI gating, debugging access errors, and capability discovery.' While it doesn't explicitly state when not to use it, the use cases are clear and imply the tool's appropriate context.
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?
Adds critical behavioral details beyond annotations: member immediately loses access, created records are preserved, and special rule about workspace owner. Complements destructiveHint and readOnlyHint annotations with concrete 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 sentences with front-loaded main action. Bilingual repetition (Spanish and English) adds length but is appropriate for multi-language context. Every sentence conveys unique information without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully covers the tool's destructive nature, side effects (record preservation), edge case (owner), and parameter requirement (confirm). With existing output schema and clear sibling list, agent has sufficient information to decide and 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 already describes both parameters (memberId and confirm) with 100% coverage. Description adds value by explaining why confirm is required (prevent accidental removal) and that it must be true, enhancing the schema's basic 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 'Remove a member from the workspace' with specific verb (remove) and resource (team member). Distinguishes from sibling tools like invite_team_member, update_team_member_role, and list_team_members.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: when to use (removing a member), when not to use (cannot remove workspace owner), and prerequisite (transfer ownership first). Also specifies required confirm parameter to prevent accidental removal. Could explicitly name alternatives but current guidance is sufficient.
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?
Annotations already indicate non-read and non-destructive behavior. The description adds that the generated invoice is a draft unless draftOnly=false. However, it does not clarify whether the recurring schedule is affected (e.g., skipped next run). This ambiguity prevents a higher score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two English sentences (plus a Spanish translation). The structure is clear, but the bilingual approach adds length. Given the tool's simplicity, the conciseness is good but could be trimmed by removing the Spanish version.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 explain return values. It adequately covers the mutation behavior and the draft invoice outcome. The tool is simple with two params, so completeness 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?
Schema coverage is 100%, so parameters are well-documented in the schema. The description only mentions templateId in an example and does not add additional meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Manually trigger immediate generation of the next invoice instance from a recurring template.' It provides a specific verb and resource, distinguishes from sibling tools like create_recurring_invoice (which creates templates) and pause/resume (which control automation), and includes an example.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context: 'Useful for billing ahead of schedule or recovering from a missed automated run.' It also explains the outcome (draft invoice) that requires separate sending. However, it does not explicitly state when not to use this tool or mention alternatives like create_invoice for manual modifications.
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?
Annotations indicate idempotentHint=true, but description adds key behavioral context: PATCH semantics, only provided fields change, and that modifying lineItems or taxRate affects only future generated invoices. 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 very concise, using two short sentences (plus Spanish translation) that front-load the essential information. 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 has 6 parameters, PATCH semantics, and future-only effects, the description covers the key nuance. The output schema is present but not relied upon. Missing prerequisites (e.g., existence of template) 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 all parameters. The description adds value by explaining that changes to lineItems and taxRate only affect future invoices, which goes beyond the schema's documentation.
Input schemas describe structure but not intent. Descriptions should explain 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 recurring invoice template using PATCH semantics.' It specifies the verb 'update' and the resource 'recurring invoice template,' distinguishing it from create, delete, pause, resume, and run 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?
Explicitly says 'Only provided fields are changed' and explains the future-only effect of certain fields, guiding when to use the tool. However, it does not mention 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.
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?
Beyond annotations (idempotentHint, destructiveHint), description adds permissions and owner limitation. No contradiction noted.
Agents need to know what a tool does to the 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 each language, front-loaded with purpose. Bilingual repetition is slightly redundant but not detrimental.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 prerequisites, limitations, and includes an example. Output schema exists, so return values are documented elsewhere.
Complex tools with many parameters or behaviors need more documentation. 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% parameters; description adds an example with ID format and bilingual role enum explanation, providing extra clarity.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Change'), resource ('role of an existing team member'), and distinguishes from ownership transfer flow. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states who can use (admins/owners) and when not to use (owner role change) with a specific alternative flow.
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
23 tool updates
v1.16.3- Added
create_invoice - Added
create_quote - Added
delete_client_contact - Added
delete_invoice - Added
delete_quote - Removed
get_business_context - Removed
get_expense - Added
get_invoice_pdf - Added
get_monthly_summary - Removed
get_quarterly_taxes - Added
get_quote - Added
list_client_activities - Added
list_client_notes - Added
list_clients - Added
list_deposits - Added
list_expenses - Added
list_invoices - Added
list_products - Added
list_quotes - Added
log_client_activity - Added
update_expense - Added
update_invoice - Added
update_product
97 tool updates
v1.16.3- Added
apply_deposit - Added
apply_late_fee - Added
categorize_transaction - Removed
create_client - Added
create_client_note - Added
create_credit_note - Added
create_deposit - Added
create_product - Added
create_reservation - Added
create_time_entry - Added
create_vendor - Added
create_webhook - Removed
delete_client_contact - Added
delete_client_note - Added
delete_deposit - Added
delete_expense - Added
delete_product - Added
delete_vendor - Added
delete_webhook - Added
duplicate_invoice - Added
einvoice_export - Added
export_datev - Added
face_status - Added
face_submit - Changed
frihet_aiem_calculate1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "AIEM calculation result: applicable rate, tax base and amount due / Resultado AIEM: tipo aplicable, base imponible y cuota", + "properties": {}, + "type": "object" +}
- Changed
frihet_bank_rule_create1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Created bank rule record with ID, conditions and actions / Regla bancaria creada con ID, condiciones y acciones", + "properties": {}, + "type": "object" +}
- Changed
frihet_gl_entry_approve1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Approved GL entry record with new status and audit trail entry / Asiento contable aprobado con nuevo estado y entrada de auditoría", + "properties": {}, + "type": "object" +}
- Changed
frihet_gl_entry_audit_log1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Audit trail entries for the GL entry (state transitions, actor, timestamp) / Historial de auditoría del asiento (transiciones, actor, fecha)", + "properties": {}, + "type": "object" +}
- Changed
frihet_gl_entry_reject1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Rejected GL entry record with reason and audit trail entry / Asiento contable rechazado con motivo y entrada de auditoría", + "properties": {}, + "type": "object" +}
- Changed
frihet_modelo_200_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Modelo 200 annual corporate tax summary: taxable base, deductions, rate, net payable / Resumen anual IS: base, deducciones, tipo, cuota", + "properties": {}, + "type": "object" +}
- Changed
frihet_modelo_202_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Modelo 202 installment payments: amounts, due dates, payment status / Pagos fraccionados Modelo 202: importes, plazos, estado", + "properties": {}, + "type": "object" +}
- Changed
frihet_modelo_415_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Modelo 415 summary: counterparty operations, totals and filing deadline / Resumen Modelo 415: operaciones, totales y plazo", + "properties": {}, + "type": "object" +}
- Changed
frihet_modelo_418_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Modelo 418 monthly IGIC summary: collected, deductible, net due, carryover / Resumen mensual IGIC: repercutido, soportado, cuota, saldo", + "properties": {}, + "type": "object" +}
- Changed
frihet_modelo_425_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Modelo 425 annual IGIC recap: IGIC collected, deductible, net payable / Resumen anual IGIC: repercutido, soportado, cuota", + "properties": {}, + "type": "object" +}
- Changed
frihet_portal_domain_add1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Added domain record with required DNS (CNAME) records / Dominio añadido con los registros DNS (CNAME) necesarios", + "properties": {}, + "type": "object" +}
- Changed
frihet_portal_domain_remove1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Confirmation that the custom domain was removed / Confirmación de que el dominio personalizado fue eliminado", + "properties": {}, + "type": "object" +}
- Changed
frihet_portal_domain_verify1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Domain verification status (pending/verified/failed) and any DNS errors / Estado de verificación del dominio y errores DNS", + "properties": {}, + "type": "object" +}
- Changed
frihet_portal_onboard_link_generate1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "Generated self-onboard link with expiry and token / Enlace de auto-registro generado con caducidad y token", + "properties": {}, + "type": "object" +}
- Changed
frihet_tax_id_vies_lookup1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "description": "VIES lookup result: company name, address and validity status / Resultado VIES: nombre, dirección y validez", + "properties": {}, + "type": "object" +}
- Added
get_bank_account - Added
get_business_context - Added
get_client - Added
get_deposit - Added
get_einvoice_status - Added
get_expense - Added
get_invoice - Added
get_kitchen_ticket - Added
get_modelo_130_summary - Added
get_modelo_180_summary - Added
get_modelo_303_summary - Added
get_modelo_347_summary - Added
get_modelo_390_summary - Added
get_product - Added
get_quarterly_taxes - Added
get_reservation - Added
get_time_entry - Added
get_time_summary - Added
get_vendor - Added
get_webhook - Added
kitchen_flow_summary - Added
ksef_submit - Added
list_bank_accounts - Added
list_client_contacts - Removed
list_client_notes - Removed
list_invoices - Added
list_kitchen_stations - Added
list_kitchen_tickets - Added
list_menu_items - Added
list_properties - Added
list_reservations - Added
list_sales - Added
list_terminals - Added
list_time_entries - Added
list_transactions - Added
list_vendors - Added
list_webhooks - Added
match_transaction_to_invoice - Added
refund_deposit - Added
refund_sale - Added
search_invoices - Added
send_einvoice - Added
send_invoice - Added
send_quote - Added
sync_channel - Added
test_webhook - Added
ticketbai_status - Added
ticketbai_submit - Added
update_client - Added
update_deposit - Added
update_kitchen_ticket - Added
update_quote - Added
update_time_entry - Added
update_vendor - Added
update_webhook - Added
validate_einvoice_xml - Added
verifactu_resubmit - Added
verifactu_status
35 tool updates
v1.15.2- Added
anomaly_list - Removed
categorize_transaction - Added
create_client - Removed
create_client_note - Removed
create_invoice - Added
create_recurring_invoice - Removed
create_time_entry - Added
delete_client_contact - Removed
delete_deposit - Added
delete_recurring_invoice - Added
delete_time_entry - Removed
einvoice_export - Removed
export_datev - Added
gestoria_message_send - Removed
get_bank_account - Removed
get_invoice_einvoice - Added
get_recurring_invoice - Added
get_sale - Added
invite_team_member - Removed
list_bank_accounts - Added
list_client_notes - Added
list_invoices - Added
list_recurring_invoices - Added
list_team_members - Removed
list_transactions - Removed
mark_invoice_paid - Removed
match_transaction_to_invoice - Added
pause_recurring_invoice - Added
payroll_export - Added
remove_team_member - Added
resume_recurring_invoice - Added
run_recurring_now - Removed
update_product - Added
update_recurring_invoice - Added
update_team_member_role
107 tool updates
v1.15.2- Removed
anomaly_list - Removed
apply_deposit - Removed
apply_late_fee - Removed
create_client - Removed
create_client_contact - Removed
create_credit_note - Removed
create_deposit - Removed
create_expense - Removed
create_product - Removed
create_quote - Removed
create_recurring_invoice - Removed
create_reservation - Removed
create_vendor - Removed
create_webhook - Removed
delete_client - Removed
delete_client_contact - Removed
delete_client_note - Removed
delete_expense - Removed
delete_invoice - Removed
delete_product - Removed
delete_quote - Removed
delete_recurring_invoice - Removed
delete_time_entry - Removed
delete_vendor - Removed
delete_webhook - Removed
duplicate_invoice - Removed
face_status - Removed
face_submit - Removed
gestoria_message_send - Removed
get_business_context - Removed
get_client - Removed
get_deposit - Removed
get_einvoice_status - Removed
get_expense - Removed
get_invoice - Removed
get_invoice_pdf - Removed
get_kitchen_ticket - Removed
get_modelo_130_summary - Removed
get_modelo_180_summary - Removed
get_modelo_303_summary - Removed
get_modelo_347_summary - Removed
get_modelo_390_summary - Removed
get_monthly_summary - Removed
get_product - Removed
get_quarterly_taxes - Removed
get_quote - Removed
get_recurring_invoice - Removed
get_reservation - Removed
get_sale - Removed
get_time_entry - Removed
get_time_summary - Removed
get_vendor - Removed
get_webhook - Removed
invite_team_member - Removed
kitchen_flow_summary - Removed
ksef_submit - Removed
list_client_activities - Removed
list_client_contacts - Removed
list_client_notes - Removed
list_clients - Removed
list_deposits - Removed
list_expenses - Removed
list_invoices - Removed
list_kitchen_stations - Removed
list_kitchen_tickets - Removed
list_menu_items - Removed
list_products - Removed
list_properties - Removed
list_quotes - Removed
list_recurring_invoices - Removed
list_reservations - Removed
list_sales - Removed
list_team_members - Removed
list_terminals - Removed
list_time_entries - Removed
list_vendors - Removed
list_webhooks - Removed
log_client_activity - Removed
pause_recurring_invoice - Removed
payroll_export - Removed
refund_deposit - Removed
refund_sale - Removed
remove_team_member - Removed
resume_recurring_invoice - Removed
run_recurring_now - Removed
search_invoices - Removed
send_einvoice - Removed
send_invoice - Removed
send_quote - Removed
sync_channel - Removed
test_webhook - Removed
ticketbai_status - Removed
ticketbai_submit - Removed
update_client - Removed
update_deposit - Removed
update_expense - Removed
update_invoice - Removed
update_kitchen_ticket - Removed
update_quote - Removed
update_recurring_invoice - Removed
update_team_member_role - Removed
update_time_entry - Removed
update_vendor - Removed
update_webhook - Removed
validate_einvoice_xml - Removed
verifactu_resubmit - Removed
verifactu_status
30 tool updates
v1.15.0- Changed
apply_deposit3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
apply_late_fee3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
create_credit_note16 fields changed- removed
Output schema / properties / clientNameRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / createdAtRemoved value: -{ - "type": "string" -} - added
Output schema / properties / creditNoteAdded value: +{ + "additionalProperties": {}, + "properties": { + "documentNumber": { + "type": "string" + }, + "fullCredit": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "originalInvoiceId": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / dataAdded value: +{ + "not": {} +} - removed
Output schema / properties / dueDateRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / idRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / issueDateRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / itemsRemoved value: -{ - "items": { - "additionalProperties": false, - "properties": { - "description": { - "type": "string" - }, - "quantity": { - "type": "number" - }, - "unitPrice": { - "type": "number" - } - }, - "required": [ - "description", - "quantity", - "unitPrice" - ], - "type": "object" - }, - "type": "array" -} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / properties / notesRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "type": "string" -} - added
Output schema / properties / successAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / taxRateRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / totalRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / updatedAtRemoved value: -{ - "type": "string" -} - removed
Output schema / requiredRemoved value: -[ - "id", - "clientName", - "items" -]
- Changed
create_invoice3 fields changed- added
Output schema / properties / clientName / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / clientName / typeRemoved value: -"string" - changed
Output schema / requiredPrevious value: -[ - "id", - "clientName", - "items" -]New value: +[ + "id" +]
- Changed
create_quote3 fields changed- added
Output schema / properties / clientName / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / clientName / typeRemoved value: -"string" - changed
Output schema / requiredPrevious value: -[ - "id", - "clientName", - "items" -]New value: +[ + "id" +]
- Changed
get_invoice3 fields changed- added
Output schema / properties / clientName / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / clientName / typeRemoved value: -"string" - changed
Output schema / requiredPrevious value: -[ - "id", - "clientName", - "items" -]New value: +[ + "id" +]
- Changed
get_quote3 fields changed- added
Output schema / properties / clientName / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / clientName / typeRemoved value: -"string" - changed
Output schema / requiredPrevious value: -[ - "id", - "clientName", - "items" -]New value: +[ + "id" +]
- Changed
list_clients1 field changed- removed
Output schema / properties / data / items / requiredRemoved value: -[ - "id", - "name" -]
- Changed
list_deposits1 field changed- removed
Output schema / properties / data / items / requiredRemoved value: -[ - "id", - "clientId", - "amount" -]
- Changed
list_expenses1 field changed- removed
Output schema / properties / data / items / requiredRemoved value: -[ - "id", - "description", - "amount" -]
- Changed
list_invoices3 fields changed- added
Output schema / properties / data / items / properties / clientName / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / data / items / properties / clientName / typeRemoved value: -"string" - removed
Output schema / properties / data / items / requiredRemoved value: -[ - "id", - "clientName", - "items" -]
- Changed
list_products1 field changed- removed
Output schema / properties / data / items / requiredRemoved value: -[ - "id", - "name", - "unitPrice" -]
- Changed
list_properties1 field changed- removed
Output schema / properties / data / items / requiredRemoved value: -[ - "id", - "name" -]
- Changed
list_quotes3 fields changed- added
Output schema / properties / data / items / properties / clientName / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / data / items / properties / clientName / typeRemoved value: -"string" - removed
Output schema / properties / data / items / requiredRemoved value: -[ - "id", - "clientName", - "items" -]
- Changed
list_reservations1 field changed- removed
Output schema / properties / data / items / requiredRemoved value: -[ - "id", - "propertyId", - "status", - "checkIn", - "checkOut", - "guestCount" -]
- Changed
list_vendors1 field changed- removed
Output schema / properties / data / items / requiredRemoved value: -[ - "id", - "name" -]
- Changed
mark_invoice_paid3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
pause_recurring_invoice3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
refund_deposit3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
remove_team_member3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
resume_recurring_invoice3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
run_recurring_now3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
search_invoices3 fields changed- added
Output schema / properties / data / items / properties / clientName / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / data / items / properties / clientName / typeRemoved value: -"string" - removed
Output schema / properties / data / items / requiredRemoved value: -[ - "id", - "clientName", - "items" -]
- Changed
send_invoice3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
send_quote3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
update_invoice3 fields changed- added
Output schema / properties / clientName / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / clientName / typeRemoved value: -"string" - changed
Output schema / requiredPrevious value: -[ - "id", - "clientName", - "items" -]New value: +[ + "id" +]
- Changed
update_quote3 fields changed- added
Output schema / properties / clientName / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / clientName / typeRemoved value: -"string" - changed
Output schema / requiredPrevious value: -[ - "id", - "clientName", - "items" -]New value: +[ + "id" +]
- Changed
update_team_member_role3 fields changed- added
Output schema / properties / dataAdded value: +{ + "not": {} +} - added
Output schema / properties / metaAdded value: +{ + "not": {} +} - removed
Output schema / requiredRemoved value: -[ - "success", - "id" -]
- Changed
verifactu_resubmit7 fields changed- added
Output schema / properties / acceptedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / csvAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / lastErrorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / retryCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / sandboxAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / status / enumPrevious value: -[ - "success", - "pending", - "failed" -]New value: +[ + "success", + "pending", + "failed", + "accepted", + "not_submitted" +] - added
Output schema / properties / submittedAtAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +}
- Changed
verifactu_status7 fields changed- added
Output schema / properties / acceptedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / csvAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / lastErrorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / retryCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / sandboxAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / status / enumPrevious value: -[ - "success", - "pending", - "failed" -]New value: +[ + "success", + "pending", + "failed", + "accepted", + "not_submitted" +] - added
Output schema / properties / submittedAtAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +}
14 tool updates
v1.14.5- Changed
create_invoice12 fields changed- added
Input schema / properties / clientAddressAdded value: +{ + "description": "Client billing address shown on the invoice / Direccion fiscal del cliente", + "type": "string" +} - added
Input schema / properties / clientIdAdded value: +{ + "description": "Existing client ID — server back-fills taxId/address / ID de cliente existente", + "type": "string" +} - added
Input schema / properties / clientLocationAdded value: +{ + "description": "Fiscal zone driving IVA vs IGIC vs exempt / Zona fiscal (IVA/IGIC/exento)", + "enum": [ + "peninsula", + "canarias", + "ceuta_melilla", + "eu", + "world" + ], + "type": "string" +} - added
Input schema / properties / clientTaxIdAdded value: +{ + "description": "Client tax ID (NIF/CIF/VAT) shown on the invoice / NIF/CIF del cliente", + "type": "string" +} - added
Input schema / properties / discountRateAdded value: +{ + "description": "Global discount % applied to the invoice / Descuento global %", + "maximum": 100, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / documentNumberAdded value: +{ + "description": "Externally-issued number for import (honored verbatim) / Numero externo para importacion", + "maxLength": 50, + "type": "string" +} - added
Input schema / properties / equivalenceSurchargeRateAdded value: +{ + "description": "Recargo de equivalencia % (ES retail regime) / Recargo de equivalencia %", + "maximum": 100, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / irpfRateAdded value: +{ + "description": "IRPF withholding % (retencion autonomo ES, e.g. 15 or 7) / Retencion IRPF %", + "maximum": 100, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / operationTypeAdded value: +{ + "description": "Operation type (service or goods) / Tipo de operacion", + "enum": [ + "service", + "goods" + ], + "type": "string" +} - added
Input schema / properties / poNumberAdded value: +{ + "description": "Client purchase-order reference / Numero de pedido del cliente", + "type": "string" +} - added
Input schema / properties / prepaymentAdded value: +{ + "description": "Prepaid/advance amount already collected in EUR / Anticipo cobrado en EUR", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / seriesIdAdded value: +{ + "description": "Invoice numbering series ID / ID de serie de numeracion", + "type": "string" +}
- Changed
create_quote9 fields changed- added
Input schema / properties / clientAddressAdded value: +{ + "description": "Client billing address / Direccion fiscal del cliente", + "type": "string" +} - added
Input schema / properties / clientIdAdded value: +{ + "description": "Existing client ID — server back-fills taxId/address / ID de cliente existente", + "type": "string" +} - added
Input schema / properties / clientLocationAdded value: +{ + "description": "Fiscal zone driving IVA vs IGIC vs exempt / Zona fiscal", + "enum": [ + "peninsula", + "canarias", + "ceuta_melilla", + "eu", + "world" + ], + "type": "string" +} - added
Input schema / properties / clientTaxIdAdded value: +{ + "description": "Client tax ID (NIF/CIF/VAT) / NIF/CIF del cliente", + "type": "string" +} - added
Input schema / properties / dueDateAdded value: +{ + "description": "Due date in ISO 8601 (YYYY-MM-DD) / Fecha de vencimiento", + "type": "string" +} - added
Input schema / properties / equivalenceSurchargeRateAdded value: +{ + "description": "Recargo de equivalencia % / Recargo de equivalencia %", + "maximum": 100, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / irpfRateAdded value: +{ + "description": "IRPF withholding % (retencion autonomo ES) / Retencion IRPF %", + "maximum": 100, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / issueDateAdded value: +{ + "description": "Issue date in ISO 8601 (YYYY-MM-DD), defaults to today / Fecha de emision", + "type": "string" +} - added
Input schema / properties / taxRateAdded value: +{ + "description": "Tax rate % (e.g. 21 IVA, 7 IGIC) / Porcentaje de impuesto", + "maximum": 100, + "minimum": 0, + "type": "number" +}
- Changed
einvoice_export7 fields changed- added
Output schema / properties / contentTypeAdded value: +{ + "description": "MIME type of the XML payload (application/xml)", + "type": "string" +} - changed
Output schema / properties / filename / descriptionPrevious value: -"Suggested filename (e.g. INV-2026-001-facturae.xml)"New value: +"Suggested filename (e.g. INV-2026-001_Facturae.xml)" - changed
Output schema / properties / format / descriptionPrevious value: -"E-invoice format used"New value: +"E-invoice format used (echoes the requested format)" - changed
Output schema / properties / signed / descriptionPrevious value: -"Whether XAdES signature was applied (Facturae only)"New value: +"Whether XAdES signature was applied (Facturae + signed=true only)" - added
Output schema / properties / xmlAdded value: +{ + "description": "Raw e-invoice XML content (the document itself, returned inline by the CF)", + "type": "string" +} - removed
Output schema / properties / xmlUrlRemoved value: -{ - "description": "Signed URL to download the e-invoice XML (valid 24h)", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "xmlUrl", - "filename", - "format", - "signed" -]New value: +[ + "xml", + "contentType", + "filename", + "signed", + "format" +]
- Changed
face_status10 fields changed- added
Output schema / properties / codigoAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "FACe status code (e.g. '1200'=Registrada, '1400'=Contabilizada, '3100'=Rechazada)" +} - added
Output schema / properties / descripcionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Human-readable FACe status description" +} - added
Output schema / properties / estadoTramitacionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "FACe processing-state code (estado de tramitación)" +} - added
Output schema / properties / motivoAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Reason/motive associated with the current status (e.g. rejection motive)" +} - added
Output schema / properties / numeroRegistroAdded value: +{ + "description": "FACe registration number for this submission", + "type": "string" +} - removed
Output schema / properties / registroFACeRemoved value: -{ - "description": "FACe registration number", - "type": "string" -} - removed
Output schema / properties / rejectionReasonRemoved value: -{ - "description": "Rejection reason if statusCode=3100", - "type": "string" -} - removed
Output schema / properties / statusCodeRemoved value: -{ - "description": "FACe status code (e.g. '1200'=Registrada, '1400'=Contabilizada, '3100'=Rechazada)", - "type": "string" -} - removed
Output schema / properties / statusDescriptionRemoved value: -{ - "description": "Human-readable FACe status description", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "registroFACe", - "statusCode", - "statusDescription" -]New value: +[ + "numeroRegistro", + "estadoTramitacion", + "codigo", + "descripcion", + "motivo" +]
- Changed
face_submit11 fields changed- added
Output schema / properties / codigoAdded value: +{ + "description": "FACe result code returned by the portal (resultado.codigo)", + "type": "string" +} - added
Output schema / properties / descripcionAdded value: +{ + "description": "Human-readable FACe result description (resultado.descripcion)", + "type": "string" +} - added
Output schema / properties / idempotentAdded value: +{ + "description": "True if this echoes a prior already-registered submission (no resubmission occurred)", + "type": "boolean" +} - removed
Output schema / properties / modeRemoved value: -{ - "description": "Mode used: mock | sandbox | production", - "type": "string" -} - added
Output schema / properties / numeroRegistroAdded value: +{ + "description": "FACe registration number (número de registro) returned by the portal", + "type": "string" +} - removed
Output schema / properties / registroFACeRemoved value: -{ - "description": "FACe registration number (número de registro) returned by the portal", - "type": "string" -} - added
Output schema / properties / status / constAdded value: +"submitted" - changed
Output schema / properties / status / descriptionPrevious value: -"Submission outcome"New value: +"Submission accepted by FACe (the CF returns an error otherwise)" - removed
Output schema / properties / status / enumRemoved value: -[ - "submitted", - "error" -] - removed
Output schema / properties / submittedAtRemoved value: -{ - "description": "ISO 8601 timestamp of the submission", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "registroFACe", - "status", - "submittedAt", - "mode" -]New value: +[ + "status", + "numeroRegistro", + "codigo", + "descripcion" +]
- Changed
get_modelo_130_summary10 fields changed- added
Output schema / properties / modelAdded value: +{ + "type": "string" +} - added
Output schema / properties / modelo130Added value: +{ + "additionalProperties": {}, + "properties": { + "gastos": { + "type": "number" + }, + "ingresos": { + "type": "number" + }, + "pagoFraccionado": { + "description": "Pago fraccionado IRPF (20% del rendimiento neto)", + "type": "number" + }, + "rendimientoNeto": { + "type": "number" + }, + "retencionesSoportadas": { + "description": "IRPF withheld by clients on issued invoices", + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / modelo303Added value: +{ + "additionalProperties": {}, + "properties": { + "baseDeducible": { + "description": "Deductible base (input)", + "type": "number" + }, + "baseExenta": { + "description": "Base of exempt operations (zero cuota)", + "type": "number" + }, + "baseImponible": { + "description": "IVA devengado base (operaciones interiores sujetas)", + "type": "number" + }, + "baseNoSujetaORC": { + "description": "Intra-community / export / reverse-charge base", + "type": "number" + }, + "cuotaDeducible": { + "description": "Input VAT (cuota deducible)", + "type": "number" + }, + "cuotaRepercutida": { + "description": "Output VAT (cuota repercutida)", + "type": "number" + }, + "outOfScope": { + "additionalProperties": {}, + "description": "IGIC/IPSI totals — outside the 303 self-assessment", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "resultado": { + "description": "cuotaRepercutida − cuotaDeducible (+ to pay, − to refund/compensate)", + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / modelo390Added value: +{ + "additionalProperties": {}, + "properties": { + "baseDeducible": { + "type": "number" + }, + "baseExenta": { + "type": "number" + }, + "baseImponible": { + "type": "number" + }, + "baseNoSujetaORC": { + "type": "number" + }, + "cuotaDeducible": { + "type": "number" + }, + "cuotaRepercutida": { + "type": "number" + }, + "outOfScope": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "resultadoAnual": { + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / monthsAdded value: +{ + "description": "Months covered by the period (YYYY-MM)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / period / descriptionAdded value: +"YYYY-QN (303/130) or YYYY (390)" - added
Output schema / properties / readonlyAdded value: +{ + "const": true, + "description": "Marks the payload as an informational summary, never filed to AEAT", + "type": "boolean" +} - added
Output schema / properties / summaryAdded value: +{ + "additionalProperties": {}, + "properties": { + "clientCount": { + "type": "number" + }, + "expenseCount": { + "type": "number" + }, + "invoiceCount": { + "type": "number" + }, + "totalExpenses": { + "type": "number" + }, + "totalRevenue": { + "type": "number" + } + }, + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "modeloCode" -]
- Changed
get_modelo_180_summary10 fields changed- added
Output schema / properties / modelAdded value: +{ + "type": "string" +} - added
Output schema / properties / modelo130Added value: +{ + "additionalProperties": {}, + "properties": { + "gastos": { + "type": "number" + }, + "ingresos": { + "type": "number" + }, + "pagoFraccionado": { + "description": "Pago fraccionado IRPF (20% del rendimiento neto)", + "type": "number" + }, + "rendimientoNeto": { + "type": "number" + }, + "retencionesSoportadas": { + "description": "IRPF withheld by clients on issued invoices", + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / modelo303Added value: +{ + "additionalProperties": {}, + "properties": { + "baseDeducible": { + "description": "Deductible base (input)", + "type": "number" + }, + "baseExenta": { + "description": "Base of exempt operations (zero cuota)", + "type": "number" + }, + "baseImponible": { + "description": "IVA devengado base (operaciones interiores sujetas)", + "type": "number" + }, + "baseNoSujetaORC": { + "description": "Intra-community / export / reverse-charge base", + "type": "number" + }, + "cuotaDeducible": { + "description": "Input VAT (cuota deducible)", + "type": "number" + }, + "cuotaRepercutida": { + "description": "Output VAT (cuota repercutida)", + "type": "number" + }, + "outOfScope": { + "additionalProperties": {}, + "description": "IGIC/IPSI totals — outside the 303 self-assessment", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "resultado": { + "description": "cuotaRepercutida − cuotaDeducible (+ to pay, − to refund/compensate)", + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / modelo390Added value: +{ + "additionalProperties": {}, + "properties": { + "baseDeducible": { + "type": "number" + }, + "baseExenta": { + "type": "number" + }, + "baseImponible": { + "type": "number" + }, + "baseNoSujetaORC": { + "type": "number" + }, + "cuotaDeducible": { + "type": "number" + }, + "cuotaRepercutida": { + "type": "number" + }, + "outOfScope": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "resultadoAnual": { + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / monthsAdded value: +{ + "description": "Months covered by the period (YYYY-MM)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / period / descriptionAdded value: +"YYYY-QN (303/130) or YYYY (390)" - added
Output schema / properties / readonlyAdded value: +{ + "const": true, + "description": "Marks the payload as an informational summary, never filed to AEAT", + "type": "boolean" +} - added
Output schema / properties / summaryAdded value: +{ + "additionalProperties": {}, + "properties": { + "clientCount": { + "type": "number" + }, + "expenseCount": { + "type": "number" + }, + "invoiceCount": { + "type": "number" + }, + "totalExpenses": { + "type": "number" + }, + "totalRevenue": { + "type": "number" + } + }, + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "modeloCode" -]
- Changed
get_modelo_303_summary10 fields changed- added
Output schema / properties / modelAdded value: +{ + "type": "string" +} - added
Output schema / properties / modelo130Added value: +{ + "additionalProperties": {}, + "properties": { + "gastos": { + "type": "number" + }, + "ingresos": { + "type": "number" + }, + "pagoFraccionado": { + "description": "Pago fraccionado IRPF (20% del rendimiento neto)", + "type": "number" + }, + "rendimientoNeto": { + "type": "number" + }, + "retencionesSoportadas": { + "description": "IRPF withheld by clients on issued invoices", + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / modelo303Added value: +{ + "additionalProperties": {}, + "properties": { + "baseDeducible": { + "description": "Deductible base (input)", + "type": "number" + }, + "baseExenta": { + "description": "Base of exempt operations (zero cuota)", + "type": "number" + }, + "baseImponible": { + "description": "IVA devengado base (operaciones interiores sujetas)", + "type": "number" + }, + "baseNoSujetaORC": { + "description": "Intra-community / export / reverse-charge base", + "type": "number" + }, + "cuotaDeducible": { + "description": "Input VAT (cuota deducible)", + "type": "number" + }, + "cuotaRepercutida": { + "description": "Output VAT (cuota repercutida)", + "type": "number" + }, + "outOfScope": { + "additionalProperties": {}, + "description": "IGIC/IPSI totals — outside the 303 self-assessment", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "resultado": { + "description": "cuotaRepercutida − cuotaDeducible (+ to pay, − to refund/compensate)", + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / modelo390Added value: +{ + "additionalProperties": {}, + "properties": { + "baseDeducible": { + "type": "number" + }, + "baseExenta": { + "type": "number" + }, + "baseImponible": { + "type": "number" + }, + "baseNoSujetaORC": { + "type": "number" + }, + "cuotaDeducible": { + "type": "number" + }, + "cuotaRepercutida": { + "type": "number" + }, + "outOfScope": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "resultadoAnual": { + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / monthsAdded value: +{ + "description": "Months covered by the period (YYYY-MM)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / period / descriptionAdded value: +"YYYY-QN (303/130) or YYYY (390)" - added
Output schema / properties / readonlyAdded value: +{ + "const": true, + "description": "Marks the payload as an informational summary, never filed to AEAT", + "type": "boolean" +} - added
Output schema / properties / summaryAdded value: +{ + "additionalProperties": {}, + "properties": { + "clientCount": { + "type": "number" + }, + "expenseCount": { + "type": "number" + }, + "invoiceCount": { + "type": "number" + }, + "totalExpenses": { + "type": "number" + }, + "totalRevenue": { + "type": "number" + } + }, + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "modeloCode" -]
- Changed
get_modelo_347_summary10 fields changed- added
Output schema / properties / modelAdded value: +{ + "type": "string" +} - added
Output schema / properties / modelo130Added value: +{ + "additionalProperties": {}, + "properties": { + "gastos": { + "type": "number" + }, + "ingresos": { + "type": "number" + }, + "pagoFraccionado": { + "description": "Pago fraccionado IRPF (20% del rendimiento neto)", + "type": "number" + }, + "rendimientoNeto": { + "type": "number" + }, + "retencionesSoportadas": { + "description": "IRPF withheld by clients on issued invoices", + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / modelo303Added value: +{ + "additionalProperties": {}, + "properties": { + "baseDeducible": { + "description": "Deductible base (input)", + "type": "number" + }, + "baseExenta": { + "description": "Base of exempt operations (zero cuota)", + "type": "number" + }, + "baseImponible": { + "description": "IVA devengado base (operaciones interiores sujetas)", + "type": "number" + }, + "baseNoSujetaORC": { + "description": "Intra-community / export / reverse-charge base", + "type": "number" + }, + "cuotaDeducible": { + "description": "Input VAT (cuota deducible)", + "type": "number" + }, + "cuotaRepercutida": { + "description": "Output VAT (cuota repercutida)", + "type": "number" + }, + "outOfScope": { + "additionalProperties": {}, + "description": "IGIC/IPSI totals — outside the 303 self-assessment", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "resultado": { + "description": "cuotaRepercutida − cuotaDeducible (+ to pay, − to refund/compensate)", + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / modelo390Added value: +{ + "additionalProperties": {}, + "properties": { + "baseDeducible": { + "type": "number" + }, + "baseExenta": { + "type": "number" + }, + "baseImponible": { + "type": "number" + }, + "baseNoSujetaORC": { + "type": "number" + }, + "cuotaDeducible": { + "type": "number" + }, + "cuotaRepercutida": { + "type": "number" + }, + "outOfScope": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "resultadoAnual": { + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / monthsAdded value: +{ + "description": "Months covered by the period (YYYY-MM)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / period / descriptionAdded value: +"YYYY-QN (303/130) or YYYY (390)" - added
Output schema / properties / readonlyAdded value: +{ + "const": true, + "description": "Marks the payload as an informational summary, never filed to AEAT", + "type": "boolean" +} - added
Output schema / properties / summaryAdded value: +{ + "additionalProperties": {}, + "properties": { + "clientCount": { + "type": "number" + }, + "expenseCount": { + "type": "number" + }, + "invoiceCount": { + "type": "number" + }, + "totalExpenses": { + "type": "number" + }, + "totalRevenue": { + "type": "number" + } + }, + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "modeloCode" -]
- Changed
get_modelo_390_summary10 fields changed- added
Output schema / properties / modelAdded value: +{ + "type": "string" +} - added
Output schema / properties / modelo130Added value: +{ + "additionalProperties": {}, + "properties": { + "gastos": { + "type": "number" + }, + "ingresos": { + "type": "number" + }, + "pagoFraccionado": { + "description": "Pago fraccionado IRPF (20% del rendimiento neto)", + "type": "number" + }, + "rendimientoNeto": { + "type": "number" + }, + "retencionesSoportadas": { + "description": "IRPF withheld by clients on issued invoices", + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / modelo303Added value: +{ + "additionalProperties": {}, + "properties": { + "baseDeducible": { + "description": "Deductible base (input)", + "type": "number" + }, + "baseExenta": { + "description": "Base of exempt operations (zero cuota)", + "type": "number" + }, + "baseImponible": { + "description": "IVA devengado base (operaciones interiores sujetas)", + "type": "number" + }, + "baseNoSujetaORC": { + "description": "Intra-community / export / reverse-charge base", + "type": "number" + }, + "cuotaDeducible": { + "description": "Input VAT (cuota deducible)", + "type": "number" + }, + "cuotaRepercutida": { + "description": "Output VAT (cuota repercutida)", + "type": "number" + }, + "outOfScope": { + "additionalProperties": {}, + "description": "IGIC/IPSI totals — outside the 303 self-assessment", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "resultado": { + "description": "cuotaRepercutida − cuotaDeducible (+ to pay, − to refund/compensate)", + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / modelo390Added value: +{ + "additionalProperties": {}, + "properties": { + "baseDeducible": { + "type": "number" + }, + "baseExenta": { + "type": "number" + }, + "baseImponible": { + "type": "number" + }, + "baseNoSujetaORC": { + "type": "number" + }, + "cuotaDeducible": { + "type": "number" + }, + "cuotaRepercutida": { + "type": "number" + }, + "outOfScope": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "resultadoAnual": { + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / monthsAdded value: +{ + "description": "Months covered by the period (YYYY-MM)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / period / descriptionAdded value: +"YYYY-QN (303/130) or YYYY (390)" - added
Output schema / properties / readonlyAdded value: +{ + "const": true, + "description": "Marks the payload as an informational summary, never filed to AEAT", + "type": "boolean" +} - added
Output schema / properties / summaryAdded value: +{ + "additionalProperties": {}, + "properties": { + "clientCount": { + "type": "number" + }, + "expenseCount": { + "type": "number" + }, + "invoiceCount": { + "type": "number" + }, + "totalExpenses": { + "type": "number" + }, + "totalRevenue": { + "type": "number" + } + }, + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "modeloCode" -]
- Changed
ticketbai_status13 fields changed- added
Output schema / properties / acceptedAdded value: +{ + "description": "Whether the submission has been accepted by the hacienda foral", + "type": "boolean" +} - added
Output schema / properties / csvAdded value: +{ + "description": "CSV (Código Seguro de Verificación) for the submission", + "type": "string" +} - removed
Output schema / properties / errorRemoved value: -{ - "description": "Internal error message (if error)", - "type": "string" -} - added
Output schema / properties / errorsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Hacienda error messages if rejected (null if none)" +} - added
Output schema / properties / estadoAdded value: +{ + "description": "Current submission status stored server-side (e.g. 'accepted', 'rejected')", + "type": "string" +} - added
Output schema / properties / qrUrlAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "QR code URL to print on the invoice (null if not yet available)" +} - removed
Output schema / properties / rejectionReasonRemoved value: -{ - "description": "Rejection reason from hacienda (if rejected)", - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Current hacienda acknowledgement status", - "enum": [ - "submitted", - "accepted", - "rejected", - "error" - ], - "type": "string" -} - added
Output schema / properties / submittedAtAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "ISO 8601 timestamp the submission was recorded (null if unknown)" +} - removed
Output schema / properties / tbaiIdRemoved value: -{ - "description": "TicketBAI identifier", - "type": "string" -} - added
Output schema / properties / tbaiIdentifierAdded value: +{ + "description": "TicketBAI identifier", + "type": "string" +} - removed
Output schema / properties / territoryRemoved value: -{ - "description": "Basque territory", - "enum": [ - "bizkaia", - "gipuzkoa", - "araba" - ], - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "tbaiId", - "territory", - "status" -]New value: +[ + "accepted", + "csv", + "tbaiIdentifier", + "estado", + "qrUrl", + "submittedAt", + "errors" +]
- Changed
ticketbai_submit9 fields changed- added
Output schema / properties / acceptedAdded value: +{ + "description": "Whether the hacienda foral accepted the submission", + "type": "boolean" +} - added
Output schema / properties / csvAdded value: +{ + "description": "CSV (Código Seguro de Verificación) returned by the hacienda foral", + "type": "string" +} - added
Output schema / properties / idempotentAdded value: +{ + "description": "True if this echoes a prior already-accepted submission (no resubmission occurred)", + "type": "boolean" +} - removed
Output schema / properties / sandboxRemoved value: -{ - "description": "Whether this was a sandbox (test) submission", - "type": "boolean" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Submission status", - "enum": [ - "submitted", - "accepted", - "rejected", - "error" - ], - "type": "string" -} - removed
Output schema / properties / tbaiIdRemoved value: -{ - "description": "TicketBAI identifier (TBAI-XXXXX) returned by hacienda foral", - "type": "string" -} - added
Output schema / properties / tbaiIdentifierAdded value: +{ + "description": "TicketBAI identifier (TBAI-XXXXX) returned by the hacienda foral", + "type": "string" +} - removed
Output schema / properties / territoryRemoved value: -{ - "description": "Basque territory auto-detected from workspace address", - "enum": [ - "bizkaia", - "gipuzkoa", - "araba" - ], - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "tbaiId", - "territory", - "status", - "sandbox" -]New value: +[ + "accepted", + "csv", + "tbaiIdentifier", + "qrUrl" +]
- Changed
update_invoice12 fields changed- added
Input schema / properties / clientAddressAdded value: +{ + "description": "Client billing address shown on the invoice / Direccion fiscal del cliente", + "type": "string" +} - added
Input schema / properties / clientIdAdded value: +{ + "description": "Existing client ID — server back-fills taxId/address / ID de cliente existente", + "type": "string" +} - added
Input schema / properties / clientLocationAdded value: +{ + "description": "Fiscal zone driving IVA vs IGIC vs exempt / Zona fiscal (IVA/IGIC/exento)", + "enum": [ + "peninsula", + "canarias", + "ceuta_melilla", + "eu", + "world" + ], + "type": "string" +} - added
Input schema / properties / clientTaxIdAdded value: +{ + "description": "Client tax ID (NIF/CIF/VAT) shown on the invoice / NIF/CIF del cliente", + "type": "string" +} - added
Input schema / properties / discountRateAdded value: +{ + "description": "Global discount % applied to the invoice / Descuento global %", + "maximum": 100, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / documentNumberAdded value: +{ + "description": "Externally-issued number for import (honored verbatim) / Numero externo para importacion", + "maxLength": 50, + "type": "string" +} - added
Input schema / properties / equivalenceSurchargeRateAdded value: +{ + "description": "Recargo de equivalencia % (ES retail regime) / Recargo de equivalencia %", + "maximum": 100, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / irpfRateAdded value: +{ + "description": "IRPF withholding % (retencion autonomo ES, e.g. 15 or 7) / Retencion IRPF %", + "maximum": 100, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / operationTypeAdded value: +{ + "description": "Operation type (service or goods) / Tipo de operacion", + "enum": [ + "service", + "goods" + ], + "type": "string" +} - added
Input schema / properties / poNumberAdded value: +{ + "description": "Client purchase-order reference / Numero de pedido del cliente", + "type": "string" +} - added
Input schema / properties / prepaymentAdded value: +{ + "description": "Prepaid/advance amount already collected in EUR / Anticipo cobrado en EUR", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / seriesIdAdded value: +{ + "description": "Invoice numbering series ID / ID de serie de numeracion", + "type": "string" +}
- Changed
update_quote9 fields changed- added
Input schema / properties / clientAddressAdded value: +{ + "description": "Client billing address / Direccion fiscal del cliente", + "type": "string" +} - added
Input schema / properties / clientIdAdded value: +{ + "description": "Existing client ID — server back-fills taxId/address / ID de cliente existente", + "type": "string" +} - added
Input schema / properties / clientLocationAdded value: +{ + "description": "Fiscal zone driving IVA vs IGIC vs exempt / Zona fiscal", + "enum": [ + "peninsula", + "canarias", + "ceuta_melilla", + "eu", + "world" + ], + "type": "string" +} - added
Input schema / properties / clientTaxIdAdded value: +{ + "description": "Client tax ID (NIF/CIF/VAT) / NIF/CIF del cliente", + "type": "string" +} - added
Input schema / properties / dueDateAdded value: +{ + "description": "Due date in ISO 8601 (YYYY-MM-DD) / Fecha de vencimiento", + "type": "string" +} - added
Input schema / properties / equivalenceSurchargeRateAdded value: +{ + "description": "Recargo de equivalencia % / Recargo de equivalencia %", + "maximum": 100, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / irpfRateAdded value: +{ + "description": "IRPF withholding % (retencion autonomo ES) / Retencion IRPF %", + "maximum": 100, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / issueDateAdded value: +{ + "description": "Issue date in ISO 8601 (YYYY-MM-DD), defaults to today / Fecha de emision", + "type": "string" +} - added
Input schema / properties / taxRateAdded value: +{ + "description": "Tax rate % (e.g. 21 IVA, 7 IGIC) / Porcentaje de impuesto", + "maximum": 100, + "minimum": 0, + "type": "number" +}
157 tool updates
v1.13.1- Added
anomaly_list - Added
apply_deposit - Added
apply_late_fee - Added
attendance_clock_in - Added
attendance_clock_out - Added
categorize_transaction - Changed
create_client2 fields changed- added
Input schema / properties / address / properties / stateAdded value: +{ + "description": "State or province / Provincia o comunidad autonoma", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "address": { + "additionalProperties": false, + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "postalCode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "street": { + "type": "string" + } + }, + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "email": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "taxId": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" +}
- Added
create_client_contact - Added
create_client_note - Added
create_credit_note - Added
create_deposit - Changed
create_expense1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "amount": { + "type": "number" + }, + "category": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "date": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "taxDeductible": { + "type": "boolean" + }, + "updatedAt": { + "type": "string" + }, + "vendor": { + "type": "string" + } + }, + "required": [ + "id", + "description", + "amount" + ], + "type": "object" +}
- Changed
create_invoice5 fields changed- added
Input schema / properties / issueDateAdded value: +{ + "description": "Issue date in ISO 8601 format (YYYY-MM-DD), defaults to today / Fecha de emision", + "type": "string" +} - changed
Input schema / properties / items / descriptionPrevious value: -"Line items / Conceptos de la factura"New value: +"Line items (each with description, quantity, unitPrice) / Conceptos de la factura" - changed
Input schema / properties / notes / descriptionPrevious value: -"Additional notes / Notas adicionales"New value: +"Additional notes shown on the invoice / Notas adicionales" - changed
Input schema / properties / taxRate / descriptionPrevious value: -"Tax rate percentage (e.g. 21 for 21% IVA) / Porcentaje de impuesto"New value: +"Tax rate percentage (e.g. 21 for 21% IVA, 7 for IGIC) / Porcentaje de impuesto" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "clientName": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "dueDate": { + "type": "string" + }, + "id": { + "type": "string" + }, + "issueDate": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "unitPrice": { + "type": "number" + } + }, + "required": [ + "description", + "quantity", + "unitPrice" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "taxRate": { + "type": "number" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "clientName", + "items" + ], + "type": "object" +}
- Changed
create_product3 fields changed- removed
Input schema / properties / skuRemoved value: -{ - "description": "SKU / Reference code / Codigo de referencia", - "type": "string" -} - removed
Input schema / properties / unitRemoved value: -{ - "description": "Unit of measurement (e.g. 'hour', 'unit', 'kg') / Unidad de medida", - "type": "string" -} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "createdAt": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "taxRate": { + "type": "number" + }, + "unitPrice": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "unitPrice" + ], + "type": "object" +}
- Changed
create_quote3 fields changed- changed
Input schema / properties / items / descriptionPrevious value: -"Line items / Conceptos del presupuesto"New value: +"Line items (each with description, quantity, unitPrice) / Conceptos del presupuesto" - changed
Input schema / properties / notes / descriptionPrevious value: -"Additional notes / Notas adicionales"New value: +"Additional notes shown on the quote / Notas adicionales" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "clientName": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "id": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "unitPrice": { + "type": "number" + } + }, + "required": [ + "description", + "quantity", + "unitPrice" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "type": "string" + }, + "validUntil": { + "type": "string" + } + }, + "required": [ + "id", + "clientName", + "items" + ], + "type": "object" +}
- Added
create_recurring_invoice - Added
create_reservation - Added
create_time_entry - Added
create_vendor - Changed
create_webhook1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "events": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "secret": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "events" + ], + "type": "object" +}
- Changed
delete_client1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "id" + ], + "type": "object" +}
- Added
delete_client_contact - Added
delete_client_note - Added
delete_deposit - Changed
delete_expense1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "id" + ], + "type": "object" +}
- Changed
delete_invoice1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "id" + ], + "type": "object" +}
- Changed
delete_product1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "id" + ], + "type": "object" +}
- Changed
delete_quote1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "id" + ], + "type": "object" +}
- Added
delete_recurring_invoice - Added
delete_time_entry - Added
delete_vendor - Changed
delete_webhook1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "id" + ], + "type": "object" +}
- Added
duplicate_invoice - Added
einvoice_export - Added
export_datev - Added
face_status - Added
face_submit - Added
frihet_aiem_calculate - Added
frihet_bank_rule_create - Added
frihet_bank_rules_list - Added
frihet_gl_entry_approve - Added
frihet_gl_entry_audit_log - Added
frihet_gl_entry_reject - Added
frihet_modelo_200_summary - Added
frihet_modelo_202_summary - Added
frihet_modelo_415_summary - Added
frihet_modelo_418_summary - Added
frihet_modelo_425_summary - Added
frihet_portal_domain_add - Added
frihet_portal_domain_remove - Added
frihet_portal_domain_verify - Added
frihet_portal_onboard_link_generate - Added
frihet_tax_id_vies_lookup - Added
gestoria_aging_consolidated - Added
gestoria_message_send - Added
gestoria_messages_list - Added
gestoria_template_bulk_send - Added
gestoria_template_create - Added
get_bank_account - Added
get_business_context - Changed
get_client1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "address": { + "additionalProperties": false, + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "postalCode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "street": { + "type": "string" + } + }, + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "email": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "taxId": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" +}
- Added
get_deposit - Added
get_einvoice_status - Changed
get_expense1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "amount": { + "type": "number" + }, + "category": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "date": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "taxDeductible": { + "type": "boolean" + }, + "updatedAt": { + "type": "string" + }, + "vendor": { + "type": "string" + } + }, + "required": [ + "id", + "description", + "amount" + ], + "type": "object" +}
- Changed
get_invoice1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "clientName": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "dueDate": { + "type": "string" + }, + "id": { + "type": "string" + }, + "issueDate": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "unitPrice": { + "type": "number" + } + }, + "required": [ + "description", + "quantity", + "unitPrice" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "taxRate": { + "type": "number" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "clientName", + "items" + ], + "type": "object" +}
- Added
get_invoice_einvoice - Added
get_invoice_pdf - Added
get_kitchen_ticket - Added
get_modelo_130_summary - Added
get_modelo_180_summary - Added
get_modelo_303_summary - Added
get_modelo_347_summary - Added
get_modelo_390_summary - Added
get_monthly_summary - Changed
get_product1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "createdAt": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "taxRate": { + "type": "number" + }, + "unitPrice": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "unitPrice" + ], + "type": "object" +}
- Added
get_quarterly_taxes - Changed
get_quote1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "clientName": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "id": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "unitPrice": { + "type": "number" + } + }, + "required": [ + "description", + "quantity", + "unitPrice" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "type": "string" + }, + "validUntil": { + "type": "string" + } + }, + "required": [ + "id", + "clientName", + "items" + ], + "type": "object" +}
- Added
get_recurring_invoice - Added
get_reservation - Added
get_sale - Added
get_time_entry - Added
get_time_summary - Added
get_vendor - Changed
get_webhook1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "events": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "secret": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "events" + ], + "type": "object" +}
- Added
invite_team_member - Added
kitchen_flow_summary - Added
ksef_submit - Added
leave_approve - Added
leave_cancel - Added
leave_list - Added
leave_reject - Added
leave_request_create - Added
list_bank_accounts - Added
list_client_activities - Added
list_client_contacts - Added
list_client_notes - Changed
list_clients5 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor", + "type": "string" +} - added
Input schema / properties / fieldsAdded value: +{ + "description": "Comma-separated field names to return (e.g. 'id,name,email') / Campos a devolver", + "type": "string" +} - added
Input schema / properties / qAdded value: +{ + "description": "Search by name or email / Buscar por nombre o email", + "type": "string" +} - added
Input schema / properties / stageAdded value: +{ + "description": "Filter by CRM stage / Filtrar por etapa del CRM", + "enum": [ + "lead", + "contacted", + "proposal", + "active", + "inactive", + "lost" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "items": { + "additionalProperties": {}, + "properties": { + "address": { + "additionalProperties": false, + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "postalCode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "street": { + "type": "string" + } + }, + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "email": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "taxId": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "nextCursor": { + "type": "string" + }, + "offset": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "data", + "total", + "limit", + "offset" + ], + "type": "object" +}
- Added
list_deposits - Changed
list_expenses7 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor", + "type": "string" +} - added
Input schema / properties / categoryAdded value: +{ + "description": "Filter by expense category (e.g. 'office', 'travel') / Filtrar por categoria", + "type": "string" +} - added
Input schema / properties / fieldsAdded value: +{ + "description": "Comma-separated field names to return (e.g. 'id,description,amount') / Campos a devolver", + "type": "string" +} - added
Input schema / properties / fromAdded value: +{ + "description": "Start date filter (YYYY-MM-DD) / Fecha inicio", + "type": "string" +} - added
Input schema / properties / toAdded value: +{ + "description": "End date filter (YYYY-MM-DD) / Fecha fin", + "type": "string" +} - added
Input schema / properties / vendorIdAdded value: +{ + "description": "Filter by vendor ID / Filtrar por ID de proveedor", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "items": { + "additionalProperties": {}, + "properties": { + "amount": { + "type": "number" + }, + "category": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "date": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "taxDeductible": { + "type": "boolean" + }, + "updatedAt": { + "type": "string" + }, + "vendor": { + "type": "string" + } + }, + "required": [ + "id", + "description", + "amount" + ], + "type": "object" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "nextCursor": { + "type": "string" + }, + "offset": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "data", + "total", + "limit", + "offset" + ], + "type": "object" +}
- Changed
list_invoices8 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor", + "type": "string" +} - added
Input schema / properties / clientIdAdded value: +{ + "description": "Filter by client ID / Filtrar por ID de cliente", + "type": "string" +} - added
Input schema / properties / fieldsAdded value: +{ + "description": "Comma-separated field names to return (e.g. 'id,clientName,total') / Campos a devolver", + "type": "string" +} - added
Input schema / properties / fromAdded value: +{ + "description": "Start date filter in ISO 8601 (YYYY-MM-DD) / Fecha inicio", + "type": "string" +} - added
Input schema / properties / seriesIdAdded value: +{ + "description": "Filter by invoice series ID / Filtrar por ID de serie", + "type": "string" +} - added
Input schema / properties / statusAdded value: +{ + "description": "Filter by invoice status / Filtrar por estado", + "enum": [ + "draft", + "sent", + "paid", + "overdue", + "cancelled" + ], + "type": "string" +} - added
Input schema / properties / toAdded value: +{ + "description": "End date filter in ISO 8601 (YYYY-MM-DD) / Fecha fin", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "items": { + "additionalProperties": {}, + "properties": { + "clientName": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "dueDate": { + "type": "string" + }, + "id": { + "type": "string" + }, + "issueDate": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "unitPrice": { + "type": "number" + } + }, + "required": [ + "description", + "quantity", + "unitPrice" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "taxRate": { + "type": "number" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "clientName", + "items" + ], + "type": "object" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "nextCursor": { + "type": "string" + }, + "offset": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "data", + "total", + "limit", + "offset" + ], + "type": "object" +}
- Added
list_kitchen_stations - Added
list_kitchen_tickets - Added
list_menu_items - Changed
list_products5 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor", + "type": "string" +} - added
Input schema / properties / fieldsAdded value: +{ + "description": "Comma-separated field names to return (e.g. 'id,name,unitPrice') / Campos a devolver", + "type": "string" +} - added
Input schema / properties / isActiveAdded value: +{ + "description": "Filter by active status / Filtrar por estado activo", + "type": "boolean" +} - added
Input schema / properties / qAdded value: +{ + "description": "Search by product name / Buscar por nombre de producto", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "items": { + "additionalProperties": {}, + "properties": { + "createdAt": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "taxRate": { + "type": "number" + }, + "unitPrice": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "unitPrice" + ], + "type": "object" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "nextCursor": { + "type": "string" + }, + "offset": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "data", + "total", + "limit", + "offset" + ], + "type": "object" +}
- Added
list_properties - Changed
list_quotes8 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Cursor for cursor-based pagination (document ID) / Cursor para paginacion basada en cursor", + "type": "string" +} - added
Input schema / properties / clientIdAdded value: +{ + "description": "Filter by client ID / Filtrar por ID de cliente", + "type": "string" +} - added
Input schema / properties / fieldsAdded value: +{ + "description": "Comma-separated field names to return (e.g. 'id,clientName,total') / Campos a devolver", + "type": "string" +} - added
Input schema / properties / fromAdded value: +{ + "description": "Start date filter (YYYY-MM-DD) / Fecha inicio", + "type": "string" +} - added
Input schema / properties / seriesIdAdded value: +{ + "description": "Filter by quote series ID / Filtrar por ID de serie", + "type": "string" +} - added
Input schema / properties / statusAdded value: +{ + "description": "Filter by quote status / Filtrar por estado", + "enum": [ + "draft", + "sent", + "accepted", + "rejected", + "expired" + ], + "type": "string" +} - added
Input schema / properties / toAdded value: +{ + "description": "End date filter (YYYY-MM-DD) / Fecha fin", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "items": { + "additionalProperties": {}, + "properties": { + "clientName": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "id": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "unitPrice": { + "type": "number" + } + }, + "required": [ + "description", + "quantity", + "unitPrice" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "type": "string" + }, + "validUntil": { + "type": "string" + } + }, + "required": [ + "id", + "clientName", + "items" + ], + "type": "object" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "nextCursor": { + "type": "string" + }, + "offset": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "data", + "total", + "limit", + "offset" + ], + "type": "object" +}
- Added
list_recurring_invoices - Added
list_reservations - Added
list_sales - Added
list_team_members - Added
list_terminals - Added
list_time_entries - Added
list_transactions - Added
list_vendors - Changed
list_webhooks1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "items": { + "additionalProperties": {}, + "properties": { + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "events": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "secret": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "events" + ], + "type": "object" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "nextCursor": { + "type": "string" + }, + "offset": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "data", + "total", + "limit", + "offset" + ], + "type": "object" +}
- Added
log_client_activity - Added
mark_invoice_paid - Added
match_transaction_to_invoice - Added
onboarding_persona_set - Added
onboarding_status - Added
overtime_report - Added
pause_recurring_invoice - Added
payroll_checklist - Added
payroll_export - Added
period_close - Added
period_close_status - Added
period_reopen - Added
permissions_matrix - Added
permissions_me - Added
refund_deposit - Added
refund_sale - Added
remove_team_member - Added
resume_recurring_invoice - Added
run_recurring_now - Changed
search_invoices10 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Cursor for cursor-based pagination (document ID) / Cursor para paginacion", + "type": "string" +} - removed
Input schema / properties / clientNameRemoved value: -{ - "description": "Client name to search for / Nombre del cliente a buscar", - "type": "string" -} - added
Input schema / properties / fieldsAdded value: +{ + "description": "Comma-separated field names to return / Campos a devolver", + "type": "string" +} - added
Input schema / properties / fromAdded value: +{ + "description": "Start date filter (YYYY-MM-DD) / Fecha inicio", + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results / Resultados maximos"New value: +"Max results (1-100) / Resultados maximos" - added
Input schema / properties / queryAdded value: +{ + "description": "Search text (client name, etc.) / Texto de busqueda", + "type": "string" +} - added
Input schema / properties / statusAdded value: +{ + "description": "Filter by status / Filtrar por estado", + "enum": [ + "draft", + "sent", + "paid", + "overdue", + "cancelled" + ], + "type": "string" +} - added
Input schema / properties / toAdded value: +{ + "description": "End date filter (YYYY-MM-DD) / Fecha fin", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "clientName" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "items": { + "additionalProperties": {}, + "properties": { + "clientName": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "dueDate": { + "type": "string" + }, + "id": { + "type": "string" + }, + "issueDate": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "unitPrice": { + "type": "number" + } + }, + "required": [ + "description", + "quantity", + "unitPrice" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "taxRate": { + "type": "number" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "clientName", + "items" + ], + "type": "object" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "nextCursor": { + "type": "string" + }, + "offset": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "data", + "total", + "limit", + "offset" + ], + "type": "object" +}
- Added
send_einvoice - Added
send_invoice - Added
send_quote - Added
sync_channel - Added
test_webhook - Added
ticketbai_status - Added
ticketbai_submit - Changed
update_client2 fields changed- added
Input schema / properties / address / properties / stateAdded value: +{ + "description": "State or province / Provincia o comunidad autonoma", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "address": { + "additionalProperties": false, + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "postalCode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "street": { + "type": "string" + } + }, + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "email": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "taxId": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" +}
- Added
update_deposit - Changed
update_expense1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "amount": { + "type": "number" + }, + "category": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "date": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "taxDeductible": { + "type": "boolean" + }, + "updatedAt": { + "type": "string" + }, + "vendor": { + "type": "string" + } + }, + "required": [ + "id", + "description", + "amount" + ], + "type": "object" +}
- Changed
update_invoice2 fields changed- added
Input schema / properties / issueDateAdded value: +{ + "description": "Issue date (YYYY-MM-DD) / Fecha de emision", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "clientName": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "dueDate": { + "type": "string" + }, + "id": { + "type": "string" + }, + "issueDate": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "unitPrice": { + "type": "number" + } + }, + "required": [ + "description", + "quantity", + "unitPrice" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "taxRate": { + "type": "number" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "clientName", + "items" + ], + "type": "object" +}
- Added
update_kitchen_ticket - Changed
update_product3 fields changed- removed
Input schema / properties / skuRemoved value: -{ - "description": "SKU / Referencia", - "type": "string" -} - removed
Input schema / properties / unitRemoved value: -{ - "description": "Unit / Unidad", - "type": "string" -} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "createdAt": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "taxRate": { + "type": "number" + }, + "unitPrice": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "unitPrice" + ], + "type": "object" +}
- Changed
update_quote2 fields changed- changed
Input schema / properties / validUntil / descriptionPrevious value: -"Expiry date / Fecha de validez"New value: +"Expiry date (YYYY-MM-DD) / Fecha de validez" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "clientName": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "id": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "unitPrice": { + "type": "number" + } + }, + "required": [ + "description", + "quantity", + "unitPrice" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "type": "string" + }, + "validUntil": { + "type": "string" + } + }, + "required": [ + "id", + "clientName", + "items" + ], + "type": "object" +}
- Added
update_recurring_invoice - Added
update_team_member_role - Added
update_time_entry - Added
update_vendor - Changed
update_webhook1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "events": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "secret": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "events" + ], + "type": "object" +}
- Added
validate_einvoice_xml - Added
verifactu_resubmit - Added
verifactu_status
31 tool updates
v1.1.0- First observed
create_client - First observed
create_expense - First observed
create_invoice - First observed
create_product - First observed
create_quote - First observed
create_webhook - First observed
delete_client - First observed
delete_expense - First observed
delete_invoice - First observed
delete_product - First observed
delete_quote - First observed
delete_webhook - First observed
get_client - First observed
get_expense - First observed
get_invoice - First observed
get_product - First observed
get_quote - First observed
get_webhook - First observed
list_clients - First observed
list_expenses - First observed
list_invoices - First observed
list_products - First observed
list_quotes - First observed
list_webhooks - First observed
search_invoices - First observed
update_client - First observed
update_expense - First observed
update_invoice - First observed
update_product - First observed
update_quote - First observed
update_webhook
TDQS
Scored across 148 tools
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.
Compliant invoicing for freelancers: create, issue and track invoices from your AI agent.
34-tool CRM server — contacts, pipeline, quotes, invoices, scheduling, email, and AI scoring.
Create PDF invoices from your AI chat: clients, numbering, VAT, overdue reports. All data is local.
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