invoiceninja-mcp
Provides tools for managing clients, invoices, quotes, payments, and time tracking through the Invoice Ninja v5 API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@invoiceninja-mcpShow me all unpaid invoices from last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Invoice Ninja MCP Server
MCP (Model Context Protocol) server for Invoice Ninja v5 API. Enables AI assistants like Claude to manage clients, invoices, quotes, payments, and time tracking through natural language.
Note: This is a community-developed project and is not officially affiliated with or endorsed by Invoice Ninja. Use at your own discretion.
What is MCP?
Model Context Protocol (MCP) is an open standard that allows AI models to securely interact with external tools and data sources. This server implements MCP to provide Invoice Ninja functionality to any compatible AI client.
Related MCP server: @centry-digital/bukku-mcp
Compatible Clients
This MCP server works with any MCP-compatible client:
Client | Status |
Claude Code (CLI) | ✅ Tested |
✅ Supported | |
✅ Supported | |
✅ Supported | |
Cline (VS Code) | ✅ Supported |
Any MCP client | ✅ Supported |
Features
Client Management
list_clients- List all clients with pagination and searchget_client- Get detailed client informationcreate_client- Create new clients with contactssearch_clients- Search clients by name or emaildelete_client- Delete a client
Invoice Management
list_invoices- List invoices with filters (status, client)get_invoice- Get invoice detailscreate_invoice- Create invoices with line itemssend_invoice_email- Email invoice to clientmark_invoice_sent- Mark as sent without emailingmark_invoice_paid- Record paymentdelete_invoice- Delete an invoice
Quote Management
list_quotes- List quotes with filtersget_quote- Get quote detailscreate_quote- Create quotes/estimatessend_quote_email- Email quote to clientapprove_quote- Mark quote as approvedconvert_quote_to_invoice- Convert to invoicedelete_quote- Delete a quote
Time Tracking (Tasks)
list_tasks- List tasks with filtersget_task- Get task detailscreate_task- Create time tracking tasksupdate_task- Update task detailsstart_task- Start task timerstop_task- Stop task timerlog_task_time- Log time manuallydelete_task- Delete a task
Products & Payments
list_products- List products/servicescreate_product- Create a productlist_payments- List paymentsget_payment- Get payment details
System
test_connection- Test API connectivity and get company info
Installation
Option 1: NPX (Recommended)
No installation required. Configure your MCP client to run:
npx invoiceninja-mcpOption 2: Global Install
npm install -g invoiceninja-mcpOption 3: From Source
git clone https://github.com/ambaloo/invoiceninja-mcp.git
cd invoiceninja-mcp
npm install
npm run buildConfiguration
Getting an API Token
Log into your Invoice Ninja instance
Go to Settings → Account Management → API Tokens
Click Add Token
Copy the generated token
Environment Variables
Variable | Required | Description |
| Yes | Your Invoice Ninja instance URL (e.g., |
| Yes | API token from Invoice Ninja |
| No | Company ID for multi-company setups |
Client Configuration
Claude Code / Claude Desktop
Add to your ~/.config/claude-code/mcp.json (Linux/macOS) or %APPDATA%\claude-code\mcp.json (Windows):
{
"mcpServers": {
"invoiceninja": {
"command": "npx",
"args": ["invoiceninja-mcp"],
"env": {
"INVOICE_NINJA_URL": "https://your-invoiceninja-instance.com",
"INVOICE_NINJA_TOKEN": "your-api-token"
}
}
}
}Cursor / Windsurf / Other Clients
Add to your project's .mcp.json:
{
"mcpServers": {
"invoiceninja": {
"command": "npx",
"args": ["invoiceninja-mcp"],
"env": {
"INVOICE_NINJA_URL": "https://your-invoiceninja-instance.com",
"INVOICE_NINJA_TOKEN": "your-api-token"
}
}
}
}Multi-Company Setup
If you have multiple companies in Invoice Ninja, specify the company ID:
{
"mcpServers": {
"invoiceninja": {
"command": "npx",
"args": ["invoiceninja-mcp"],
"env": {
"INVOICE_NINJA_URL": "https://your-invoiceninja-instance.com",
"INVOICE_NINJA_TOKEN": "your-api-token",
"INVOICE_NINJA_COMPANY_ID": "company-hash-id"
}
}
}
}Usage Examples
Once configured, you can interact with Invoice Ninja using natural language:
Client Management
"Create a client named Acme Corp with email john@acme.com"
→ Creates client with contact
"Search for clients named Smith"
→ Returns matching clients
"Show me all my clients"
→ Lists all clientsInvoicing
"Create an invoice for Acme Corp:
- Web Development: $2000
- Monthly Hosting: $150"
→ Creates invoice with line items
"Send invoice #INV-0001 to the client"
→ Emails the invoice
"Mark invoice #INV-0001 as paid"
→ Records paymentQuotes
"Create a quote for Acme Corp:
- Project Setup: $500
- Development: $3000
Valid until end of month"
→ Creates quote with expiry date
"Convert quote #Q-0001 to an invoice"
→ Creates invoice from quoteTime Tracking
"Create a task for Acme Corp: Website Development"
→ Creates task
"Start the timer on task #1"
→ Starts tracking time
"Stop the timer on task #1"
→ Stops and logs time
"Log 2.5 hours to task #1 for yesterday"
→ Manually logs timeDevelopment
# Clone the repository
git clone https://github.com/ambaloo/invoiceninja-mcp.git
cd invoiceninja-mcp
# Install dependencies
npm install
# Build
npm run build
# Run in development mode (with tsx)
npm run dev
# Run the built version
npm startProject Structure
invoiceninja-mcp/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── client.ts # Invoice Ninja API client
│ ├── schemas/
│ │ └── common.ts # Shared Zod schemas
│ └── tools/
│ ├── clients.ts # Client management tools
│ ├── invoices.ts # Invoice tools
│ ├── quotes.ts # Quote tools
│ ├── payments.ts # Payment & product tools
│ └── tasks.ts # Time tracking tools
├── build/ # Compiled JavaScript
├── package.json
├── tsconfig.json
└── README.mdAPI Reference
This server uses the Invoice Ninja API v5. Key implementation details:
Authentication via
X-API-TOKENheaderX-Requested-With: XMLHttpRequestheader requiredMulti-company support via
X-API-Company-IdheaderAll IDs are hashed strings (not integers)
Troubleshooting
"API Error 401: Unauthorized"
Verify your API token is correct
Check that the token has the necessary permissions
Ensure
INVOICE_NINJA_URLdoesn't have a trailing slash
"API Error 403: Forbidden"
The token may not have access to the requested resource
For multi-company setups, verify the
INVOICE_NINJA_COMPANY_ID
"Connection refused"
Verify
INVOICE_NINJA_URLis correct and accessibleCheck if your Invoice Ninja instance is running
MCP Client Not Finding the Server
Ensure the configuration file is in the correct location
Restart your MCP client after configuration changes
Check that Node.js 18+ is installed
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Fork the repository
Create your feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
License
MIT License - see LICENSE file for details.
Acknowledgments
Invoice Ninja - The invoicing platform
Model Context Protocol - The MCP standard
Anthropic - MCP SDK and Claude
Built with Claude Code
Available Tools
32 toolsapprove_quoteC
Mark a quote as approved
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Quote ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose side effects, authorizations required, or whether the action is reversible. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the 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 that is easy to parse. However, it could benefit from slightly more detail without becoming 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?
Given the tool has one parameter, no output schema, and no annotations, the description lacks essential context about the tool's effect (e.g., state change, possible errors).
Complex tools with many parameters or behaviors need more documentation. 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 'quote_id', with a clear description in the schema. The tool description adds no extra parameter info, so 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 'Mark a quote as approved' clearly states the action (mark) and resource (quote) with the target state (approved). It distinguishes from sibling tools like 'convert_quote_to_invoice' or 'delete_quote'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. For example, it does not clarify if approval is a prerequisite for converting a quote to an invoice or sending an email.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_quote_to_invoiceB
Convert an approved quote to an invoice
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Quote ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description fails to disclose behavioral traits such as whether the operation is reversible, required permissions, or side effects (e.g., marking the quote as converted).
Agents need to know what a tool does to the 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 efficient sentence, but it could be slightly expanded to include key context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema and no annotations, the description is incomplete: it omits return value, required preconditions (e.g., quote must be approved), and 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?
The schema has full coverage of the single parameter with a clear description ('Quote ID (hashed string)'). The tool description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (convert) and resources (approved quote to invoice), distinguishing it from sibling tools like 'create_invoice' and 'approve_quote'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 quote must be approved but does not explicitly state when to use this tool versus alternatives like 'create_invoice' or 'send_invoice_email'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_clientB
Create a new client
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Client/company name | |
| contacts | Yes | Client contacts (at least one required) | |
| address1 | No | Street address | |
| address2 | No | Address line 2 | |
| city | No | City | |
| state | No | State/Province | |
| postal_code | No | Postal/ZIP code | |
| country_id | No | Country ID | |
| phone | No | Phone number | |
| website | No | Website URL | |
| vat_number | No | VAT/Tax number | |
| public_notes | No | Notes visible to client | |
| private_notes | No | Internal notes | |
| currency_id | No | Currency ID (e.g., '1' for USD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only states 'Create a new client' without disclosing behavioral traits such as idempotency, side effects, or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Concise and front-loaded, but could benefit from more detail given the tool's parameter count.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 14 parameters and no output schema or annotations, the description is too minimal to provide complete context for proper tool 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?
Input schema has 100% description coverage for all 14 parameters, so the description adds no additional meaning beyond what 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 'Create a new client' clearly states the action (create) and the resource (client), distinguishing it from siblings like create_invoice or 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 guidance on when to use vs alternatives. The description lacks context for prerequisites or exclusions, leaving the agent to infer from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_invoiceC
Create a new invoice
| Name | Required | Description | Default |
|---|---|---|---|
| client_id | Yes | Client ID (hashed string) | |
| line_items | Yes | Invoice line items | |
| due_date | No | Due date (YYYY-MM-DD) | |
| date | No | Invoice date (YYYY-MM-DD), defaults to today | |
| po_number | No | Purchase order number | |
| public_notes | No | Notes visible to client | |
| private_notes | No | Internal notes | |
| discount | No | Invoice-level discount percentage | |
| partial | No | Partial/deposit amount | |
| partial_due_date | No | Partial payment due date |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states the action and does not mention side effects, permissions, or other important 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?
The description is a single sentence, which is concise but overly minimal, lacking useful context that could be added without significant verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 10 parameters and no output schema, the description fails to explain the creation process, return value, or any caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all parameters (100% coverage), and the description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new invoice' clearly identifies the action and resource, but does not distinguish from related tools like 'convert_quote_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?
No guidance is provided on when to use this tool versus alternatives such as 'convert_quote_to_invoice' or other creation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_productC
Create a new product/service
| Name | Required | Description | Default |
|---|---|---|---|
| product_key | Yes | Product SKU/identifier | |
| notes | Yes | Product description | |
| cost | Yes | Product price | |
| quantity | No | Default quantity | |
| tax_name1 | No | Tax name | |
| tax_rate1 | No | Tax rate percentage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description only states the action. It fails to disclose behavioral traits such as mutation behavior, authentication requirements, or error scenarios, which are critical for a create operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no unnecessary words. It is appropriately front-loaded and concise, though it could benefit from slightly more 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?
With 6 parameters, no output schema, and no annotation, the description is too minimal. It omits return values, error handling, and relationships to other entities, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. 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 each parameter. The description adds no additional parameter-level semantics, meeting the baseline but not exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Create) and the resource (product/service), distinguishing it from sibling tools like create_client or create_invoice. However, it does not elaborate on what constitutes a 'product/service' in this 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?
No guidance is provided on when to use this tool versus alternatives, prerequisites, or conditions like idempotency. The agent receives no context for usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_quoteC
Create a new quote/estimate
| Name | Required | Description | Default |
|---|---|---|---|
| client_id | Yes | Client ID (hashed string) | |
| line_items | Yes | Quote line items | |
| date | No | Quote date (YYYY-MM-DD), defaults to today | |
| valid_until | No | Quote expiry date (YYYY-MM-DD) | |
| po_number | No | Purchase order number | |
| public_notes | No | Notes visible to client | |
| private_notes | No | Internal notes | |
| discount | No | Quote-level discount percentage | |
| partial | No | Partial/deposit amount |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is too brief and does not disclose behavioral traits beyond the action 'create'. Since no annotations are provided, the description carries the full burden. It does not mention permissions, side effects (e.g., whether a quote is sent immediately), or any 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 a single sentence, which is concise but lacks structure. It is not front-loaded with additional context. For a tool with 9 parameters, a slightly more structured description could be beneficial, though it is not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (9 parameters, no output schema, no annotations), the description is incomplete. It does not explain return values, required prerequisites (e.g., client existence), or any post-creation steps. The schema covers parameters but not the overall context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for all 9 parameters. The description adds no extra meaning beyond 'create a new quote', so it relies on the schema. Baseline 3 is appropriate since schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 quote/estimate', which is a specific verb and resource. It distinguishes from sibling tools like 'convert_quote_to_invoice' or 'approve_quote', which have different actions. However, it could be more precise about what 'quote/estimate' means in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For instance, if the agent needs to create an invoice instead of a quote, the description does not differentiate. There are no explicit when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskB
Create a new task for time tracking
| Name | Required | Description | Default |
|---|---|---|---|
| client_id | Yes | Client ID (hashed string) | |
| description | Yes | Task description | |
| rate | No | Hourly rate (defaults to client rate) | |
| project_id | No | Project ID | |
| status_id | No | Task status ID | |
| custom_value1 | No | Custom field 1 | |
| custom_value2 | No | Custom field 2 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure, yet it only says 'create,' omitting details like required permissions, side effects, or whether tasks are automatically started.
Agents need to know what a tool does to the 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, front-loaded sentence with no wasted words, efficiently conveying the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 7 parameters and no output schema or annotations, the description provides minimal context beyond the basic action, leaving agents without enough information about typical usage or outcomes.
Complex tools with many parameters or behaviors need more documentation. 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% since all parameters have descriptions in the input schema; the tool description adds no additional parameter meaning, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'create,' the resource 'task,' and the purpose 'for time tracking,' effectively distinguishing it from sibling tools like delete_task or update_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives, such as start_task or log_task_time, nor does it mention prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_clientB
Delete a client permanently
| Name | Required | Description | Default |
|---|---|---|---|
| client_id | Yes | Client ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must fully disclose behavior. It only indicates permanence, but lacks details on required permissions, cascading deletions, or constraints (e.g., client must have no outstanding invoices or bills). The term 'permanently' is vague without further elaboration.
Agents need to know what a tool does to the 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 with no extraneous words. It is efficiently front-loaded with the core action. However, it may under-specify for a destructive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 with zero annotations and no output schema, the description should warn about side effects, required permissions, or process implications. The current text is too minimal to fully guide 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?
Schema coverage is 100% with a single parameter described as 'Client ID (hashed string)'. The description adds no meaning beyond the schema, so the baseline of 3 applies. No enrichment provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the resource ('a client'), with the adverb 'permanently' adding emphasis. This distinguishes it from sibling tools like delete_invoice or delete_quote, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage context is provided. The description does not mention when to use this tool versus alternatives (e.g., deactivating a client instead of deleting), nor does it specify any prerequisites or contraindications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_invoiceC
Delete an invoice permanently
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only states 'permanently', implying irreversible deletion. No annotations are provided, so the description carries full burden. It does not disclose side effects, cascading deletes, permission requirements, or what happens to associated 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 very concise at 4 words, efficiently conveying the core purpose. While some might argue for more detail, it avoids unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one parameter and no output schema, the description is minimally adequate. It communicates irreversibility but lacks details on success/error behavior, prerequisites, or permissions. Given low complexity, this is acceptable but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the parameter 'invoice_id' described as 'Invoice ID (hashed string)'. The description adds no extra meaning 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 'Delete an invoice permanently' clearly states the action (delete) and the resource (invoice). The addition of 'permanently' indicates irreversibility, which adds value. However, it does not specify any scope or nuances like soft delete vs hard delete, but for a simple resource it is sufficient.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. While siblings like 'mark_invoice_paid' or 'mark_invoice_sent' are for different operations, no context is given about prerequisites (e.g., invoice must exist) or scenarios where deletion is not appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_quoteB
Delete a quote permanently
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Quote ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. It only mentions permanence, omitting details like required permissions, cascading effects, error conditions, or confirmation steps.
Agents need to know what a tool does to the 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, front-loaded sentence with no unnecessary words. It is concise and direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 deletion tool with one parameter and no output schema, the description is acceptable but minimal. It lacks context about return values, error handling, or side effects, making it barely 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% (quote_id described as hashed string). The tool description adds no additional parameter information, so 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 'delete' and the resource 'quote', and adds 'permanently' to indicate irreversibility. It distinguishes from sibling tools like approve_quote, get_quote, and list_quotes by specifying a deletion 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?
No guidance is provided on when to use this tool versus alternatives (e.g., when to delete vs. update or convert). There are no explicit conditions or prerequisites, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskC
Delete a task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only says 'Delete a task'. It does not disclose side effects, reversibility, permissions, or whether related data is affected. This is insufficient for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff. While very concise, it is efficient given the simplicity of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, the description might be considered minimally adequate. However, it lacks details on permanence, cascade effects, or return value, which are important for an agent to understand 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?
The input schema provides a description for 'task_id' ('Task ID (hashed string)'), and coverage is 100%. The description does not add additional meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete a task' clearly states the action and resource. It is specific and unambiguous, though it does not distinguish from sibling delete tools for other resources. However, the resource difference makes confusion unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'update_task' or 'get_task'. The description lacks context for usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_clientB
Get details of a specific client
| Name | Required | Description | Default |
|---|---|---|---|
| client_id | Yes | Client ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only states 'Get details of a specific client' without disclosing any behavioral traits such as read-only nature, authentication requirements, or side effects. For a simple read operation, this is acceptable but lacking.
Agents need to know what a tool does to the 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 with no redundancy. It is appropriately front-loaded but could be slightly more informative without losing 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 that there is no output schema, the description should clarify what details are returned. It fails to mention the structure or contents of the response, leaving the agent with incomplete information for a simple 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 input schema covers 100% of parameters (only client_id with description). The description adds no additional meaning beyond what the schema already provides, 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 'Get details of a specific client' uses a clear verb ('Get') and resource ('client'), specifying that it retrieves a single client by ID. It distinguishes from sibling tools like list_clients, search_clients, and create_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?
No explicit guidance on when to use this tool versus alternatives. The description implies usage when a specific client ID is known, but does not mention when not to use it or suggest other tools for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceC
Get details of a specific invoice
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Lacks details on behavior: no explicit read-only hint, no mention of data returned (just says 'details'), no side effects. Without annotations, the description should compensate but does not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no redundant words. Could benefit from slightly more detail without harming 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 get operation with no output schema, the description should hint at the return structure. It does not, leaving the agent uncertain about what 'details' means. Incomplete for a simple tool with many siblings.
Complex tools with many parameters or behaviors need more documentation. 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 provides description 'Invoice ID (hashed string)' for the single parameter. Description adds no extra meaning, but schema coverage is 100%, so 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?
Clearly states 'Get details of a specific invoice', which is a specific verb and resource. Distinguishes from siblings like list_invoices (get vs list) by implication, but no explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like list_invoices or search. Does not indicate that it's for retrieving a single invoice by ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paymentB
Get details of a specific payment
| Name | Required | Description | Default |
|---|---|---|---|
| payment_id | Yes | Payment ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only says 'get details', failing to mention read-only nature, auth requirements, or potential 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?
The description is a single, straightforward sentence with no unnecessary words. It is perfectly concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple, the description lacks context about return format, error handling, or relationship to sibling tools like list_payments. It meets minimum viability but has 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 documents the payment_id parameter. The description adds no additional 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 the tool retrieves details for a specific payment. It effectively distinguishes from list_payments, which returns multiple payments. However, it lacks specificity about what details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 versus sibling tools like list_payments or get_invoice. The description does not include when-not or alternative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quoteB
Get details of a specific quote
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Quote ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description does not disclose behavioral traits such as read-only nature, authentication needs, or potential errors. For a retrieval tool, it should at least imply idempotence.
Agents need to know what a tool does to the 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 with no unnecessary words. It is front-loaded and efficient, earning a top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get tool with one parameter and no output schema, the description is functional but minimal. It does not mention expected return structure or relationship to list_quotes, leaving some 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 'quote_id' is fully described in the schema as 'Quote ID (hashed string)'. The description adds no extra meaning beyond the schema, meeting the baseline for 100% 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 'Get details of a specific quote' clearly identifies the action (get) and resource (quote). It distinguishes from sibling tools like create_quote, delete_quote, and list_quotes, though 'details' could be more 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?
No guidance is provided on when to use this tool versus alternatives (e.g., list_quotes to find IDs, or search). There is no prerequisite or contextual hint for proper invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskB
Get details of a specific task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral burden. It only says 'Get details' without disclosing read-only nature, authentication needs, or any 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 very concise (5 words). It is efficient but somewhat lacking in structure; however, for a simple getter it 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 tool's simplicity (one param, no output schema), the description is minimally complete. However, it could mention that the tool is read-only or returns a task object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a clear parameter description ('Task ID (hashed string)'). The tool description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('details of a specific task'). It distinguishes from sibling tools like 'list_tasks' (multiple) and 'update_task' (modify).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'list_tasks' or 'update_task'. The description does not mention context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_clientsC
List all clients with optional search filter
| Name | Required | Description | Default |
|---|---|---|---|
| per_page | No | Results per page | |
| page | No | Page number | |
| filter | No | Search filter (name, email, etc.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It does not mention pagination behavior, rate limits, mutability, or any side effects, despite the schema indicating pagination parameters. The behavioral impact of the 'filter' parameter is also unclear.
Agents need to know what a tool does to the 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, which is efficient. However, it is too brief to cover necessary context, slightly reducing its effectiveness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 3 parameters, no output schema, and no annotations, the description is insufficient. It fails to mention return format, sorting, or pagination details, leaving the agent without critical information for effective 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 coverage is 100%, so the descriptions in the input schema already detail each parameter. The tool description adds no additional meaning beyond stating the filter is optional. Baseline 3 is appropriate as the description does not degrade but also does not enhance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 resource (clients) with an optional search filter. It is specific enough to distinguish from tools like create_client or delete_client, but does not explicitly differentiate from search_clients, which could 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?
There is no guidance on when to use this tool versus alternatives like search_clients. The description lacks any context about preferred use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invoicesC
List invoices with optional filters
| Name | Required | Description | Default |
|---|---|---|---|
| per_page | No | Results per page | |
| page | No | Page number | |
| client_id | No | Filter by client ID | |
| status | No | Filter by status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, authentication requirements, rate limits, or return format. It only states the basic function, leaving the agent without important context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise at six words, front-loading the key action and resource. While it lacks structural elements, it is efficient for a simple list operation. Could be a complete sentence but still 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?
Given no output schema and no annotations, the description is too minimal. It does not explain return values, pagination behavior, or common use cases. For a tool with 4 optional parameters, more context is needed for complete 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?
The input schema has 100% description coverage for its 4 parameters. The description 'with optional filters' adds minimal semantic value beyond the schema. Baseline of 3 is appropriate as the schema already documents parameters thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List invoices with optional filters' clearly states the action (list) and resource (invoices), and hints at filtering capability. However, it does not distinguish from sibling list tools (e.g., list_clients, list_quotes), which follow the same pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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_clients or list_quotes. The description implies it's for listing invoices, but lacks context on filtering, sorting, or pagination beyond what the schema provides.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_paymentsC
List payments with optional filters
| Name | Required | Description | Default |
|---|---|---|---|
| per_page | No | Results per page | |
| page | No | Page number | |
| client_id | No | Filter by client ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description must disclose behavioral traits. It does not state whether this operation is read-only, destructive, or has any side effects. It also fails to mention pagination behavior beyond parameter defaults, which are already in the schema. The description adds no behavioral clarity.
Agents need to know what a tool does to the 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: 'List payments with optional filters.' It is front-loaded with the action and resource, containing no wasted words. Every part 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 lack of annotations and output schema, the description is insufficient. It does not explain the return format, error conditions, or any special behavior (e.g., maximum results, ordering). For a list operation, more detail is expected to ensure correct 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?
The description mentions 'optional filters,' which is a generic reference to the parameters. Since schema coverage is 100% and all parameters (per_page, page, client_id) have descriptions, the description adds little meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List payments' which uses a specific verb and resource. It also mentions optional filters. However, it does not distinguish this tool from sibling list tools like list_clients or list_invoices, but the resource name 'payments' is unique enough to convey the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as get_payment for a single payment or other list tools. There are no prerequisites, exclusions, or context for when filters are appropriate. The description lacks any usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsC
List available products/services
| Name | Required | Description | Default |
|---|---|---|---|
| per_page | No | Results per page | |
| page | No | Page number | |
| filter | No | Search filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It only says 'list' implying a read operation, but does not disclose pagination behavior, rate limits, authentication, or whether 'available' implies a specific status filter. The schema hints at pagination but the description adds no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise and efficient. However, it lacks structure (e.g., no sections or bullet points) but is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and 3 parameters, the description is too minimal. It does not explain what 'products/services' means in context, whether the list is filtered by default, or what the response structure looks like. More context is needed for a complete agent 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_description_coverage is 100%, so the schema already documents all parameters (per_page, page, filter). The description does not add additional meaning or context beyond what is in 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 states 'List available products/services' which conveys the basic purpose but does not differentiate from sibling list_* tools like list_clients or list_invoices. With many similar list tools, the description lacks specificity about the entity being listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. There is no mention of prerequisites, context, or when not to use it. The sibling tools list includes other list tools but the description provides no decision help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_quotesC
List quotes with optional filters
| Name | Required | Description | Default |
|---|---|---|---|
| per_page | No | Results per page | |
| page | No | Page number | |
| client_id | No | Filter by client ID | |
| status | No | Filter by status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as pagination, ordering, or mutability. The phrase 'list quotes' implies read-only, but details about page default, result limits, or filter interactions are absent.
Agents need to know what a tool does to the 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 with no wasted words. However, it is too brief and lacks structure; a bit more detail would improve clarity without sacrificing 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 tool with 4 parameters and no output schema, the description is thin. It does not mention pagination behavior, default sorting, or the effect of combining filters. The schema covers parameters, but the description should provide operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema itself documents all parameters. The description adds no extra meaning beyond the schema, meeting the baseline of 3 per rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List quotes with optional filters' clearly states the verb (list) and resource (quotes) and mentions optional filters. However, it does not differentiate from sibling tools like list_invoices or list_clients, which have similar patterns. A 5 would require explicit scope or differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like search_clients or get_quote. It does not mention exclusions, prerequisites, or context such as default behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksC
List tasks with optional filters
| Name | Required | Description | Default |
|---|---|---|---|
| per_page | No | Results per page | |
| page | No | Page number | |
| client_id | No | Filter by client ID | |
| project_id | No | Filter by project ID | |
| status | No | Filter by status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description fails to disclose pagination behavior, whether results are sorted, or that it returns a list. The description only restates the obvious 'optional filters' without revealing how they interact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise but lacks critical information. It is front-loaded with the verb and resource but omits important details like pagination or filter 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?
With 5 parameters, no output schema, and no annotations, the description is too sparse. It does not explain the return format, pagination, or any behavioral nuances expected for a listing 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 5 parameters with descriptions (100% coverage), so baseline is 3. The description adds no extra 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?
Description states 'list tasks with optional filters', clearly identifying the action and resource. It distinguishes from sibling `get_task` (single task) but does not differentiate from other list tools (e.g., list_clients) beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like `search_clients` or `get_task`. No context on prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_task_timeA
Log time manually to a task without using start/stop timer
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID (hashed string) | |
| hours | Yes | Hours to log (e.g., 1.5 for 1 hour 30 minutes) | |
| date | No | Date for the time entry (YYYY-MM-DD), defaults to today |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates a write operation ('log time') but does not disclose details like overwrites, limits, or error handling. For a simple tool, this is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action. Every word serves a purpose, with zero redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the essential behavior. It could mention that a new time entry is created, but the current text is mostly complete for a manual logging 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?
The input schema already covers all three parameters with 100% description coverage, including format examples. The description does not add new parameter-specific details 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 the action: 'Log time manually to a task'. It distinguishes from siblings by explicitly mentioning 'without using start/stop timer', which contrasts with the timer-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (manual logging) vs alternatives (start/stop timer). However, it does not specify prerequisites or when not to use it, such as requiring a valid task_id or necessary permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_invoice_paidC
Record a payment for an invoice (marks it as paid)
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID (hashed string) | |
| payment_date | No | Payment date (YYYY-MM-DD), defaults to today | |
| payment_type_id | No | Payment method ID | |
| transaction_reference | No | Transaction reference/note | |
| amount | No | Payment amount (defaults to full balance) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure. It only states 'marks it as paid' but does not explain side effects (e.g., whether a payment record is created), permission requirements, or whether the action is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of nine words, with no redundancy. It effectively communicates the tool's core function 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?
Despite five parameters and no output schema, the description omits details such as return value, behavior for partial payments, and database changes. This is insufficient for a tool with this 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%, with all five parameters described inline. The description adds no additional parameter information, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Record' and resource 'payment for an invoice', with the effect 'marks it as paid'. It clearly distinguishes from sibling tools like 'mark_invoice_sent' and other invoice actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (e.g., after receiving payment) or when not to use it (e.g., partial payments). No mention of prerequisites or alternatives like 'convert_quote_to_invoice' or 'get_payment'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_invoice_sentA
Mark an invoice as sent (changes status without sending email)
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. States status change without email but omits side effects reversibility. Adequate for simple update tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words, directly conveys purpose and key behavioral distinction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no output schema, description is complete. Covers core function and differentiator from sibling.
Complex tools with many parameters or behaviors need more documentation. 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 fully described in schema (100% coverage). Description adds no additional meaning beyond 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?
Description clearly states action ('mark as sent'), resource ('invoice'), and distinguishes from email sending. Verb+resource 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?
Implies when to use: to mark as sent without email. Sibling tool 'send_invoice_email' provides clear alternative. No explicit exclusions but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_clientsA
Search clients by name or email
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It does not disclose case sensitivity, partial matching, pagination, or result limits. Basic search intent is clear but behavioral details are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Front-loaded with 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?
No output schema; missing details on return values (e.g., multiple results, format). For a simple search, it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (only one param 'query'). Description adds context that query searches by name or email, but schema description already says 'Search query'. Baseline 3 applies as schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Search'), resource ('clients'), and search criteria ('by name or email'). It distinguishes from siblings like list_clients which returns all clients without filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 like list_clients or get_client. Usage is implied but not differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_invoice_emailB
Send an invoice to the client by email
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID (hashed string) | |
| template | No | Email template to use |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It fails to disclose important behavioral traits: whether the email can be sent multiple times, if it marks the invoice as sent, or any side effects like rate limits. The tool's behavior on recalcitrant states is unclear.
Agents need to know what a tool does to the 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 (single sentence) but at the expense of missing critical information like usage guidance and behavioral details. It is not optimally sized; additional context would improve it without losing 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 has 2 parameters, no output schema, and no annotations, the description is too sparse. It does not explain the effect on the invoice, template constraints, or error conditions. An agent needs more context to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both parameters have descriptions in the schema). The tool description adds no extra meaning beyond what the schema provides. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Send an invoice to the client by email' clearly states the action (send), object (invoice), recipient (client), and medium (email). It directly distinguishes from the sibling tool 'send_quote_email', which sends a quote instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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, nor does it mention prerequisites or edge cases (e.g., invoice status, client email availability). It is a single sentence with no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_quote_emailC
Send a quote to the client by email
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Quote ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only states the action without mentioning side effects, required permissions, idempotency, or what happens upon success/failure.
Agents need to know what a tool does to the 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, clear sentence with no wasted words. It is appropriately concise and front-loaded, though it could be expanded with minimal context without losing 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 tool with one required parameter and no output schema, the description is complete enough to convey the primary action. However, it lacks important behavioral details like whether the quote must be in a specific state, which reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for quote_id, so the baseline is 3. The description does not add any information about the parameter beyond what the schema provides, but also does not hinder understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (send) and the resource (quote via email). It distinguishes from sibling tools like send_invoice_email by specifying 'quote' instead of 'invoice', but does not elaborate on the recipient or prerequisite state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as send_invoice_email or approve_quote. The description lacks any context about prerequisites or recommended usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_taskB
Start the timer for a task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It does not disclose side effects, such as whether it creates a time entry, if it requires a task to be in a specific state, or if it overrides an existing timer.
Agents need to know what a tool does to the 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 with no extra words. However, it could be front-loaded with more context in a second sentence without losing 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 low complexity (one parameter, no output schema, no annotations), the description is fairly complete but lacks explanation of what 'start the timer' entails operationally.
Complex tools with many parameters or behaviors need more documentation. 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% (task_id described as 'Task ID (hashed string)'). The description adds no extra meaning beyond the schema for 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?
The description clearly states the verb and resource: 'Start the timer for a task'. It is specific and distinguishes from sibling tools like 'stop_task' and 'log_task_time'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. There is no mention of prerequisites (e.g., task must exist, timer not already running) 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.
stop_taskB
Stop the timer for a task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID (hashed string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only states the action without disclosing behavior such as idempotency, error handling (e.g., timer not running), 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?
One short sentence with no filler, directly conveying the purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description is minimally adequate but lacks usage guidelines and behavioral context, leaving the agent partially informed.
Complex tools with many parameters or behaviors need more documentation. 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, which already includes a clear description. The description adds no extra meaning beyond the schema, meeting the baseline for this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Stop the timer for a task' uses a specific verb (stop) and resource (timer for a task), clearly distinguishing it from siblings like start_task or log_task_time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 related alternatives (e.g., start_task, log_task_time). No mention of prerequisites like requiring an active timer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_connectionA
Test connection to Invoice Ninja and get company info
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially discloses behavior: it is a read-only test and returns company info. However, it does not explicitly state that it is non-destructive or safe, nor does it describe what happens on success or failure.
Agents need to know what a tool does to the 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 that covers the tool's core functionality without extraneous words. It is well-structured and front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is largely complete: it tells the agent the tool tests connectivity and returns company info. Minor improvement would be to note the nature of the returned info (e.g., JSON object with company name, settings).
Complex tools with many parameters or behaviors need more documentation. 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 in the input schema, so the baseline is 4. The description adds no additional parameter information, which is acceptable since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: testing a connection and retrieving company info. The verb 'test' and resource 'connection to Invoice Ninja' are specific, and the tool is distinctly different from all CRUD 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?
No guidance is given on when or when not to use this tool. It does not suggest using it as a preliminary step before other operations or mention any prerequisites, which would be helpful for agents unfamiliar with the API.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskB
Update an existing task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID (hashed string) | |
| description | No | Task description | |
| rate | No | Hourly rate | |
| project_id | No | Project ID | |
| custom_value1 | No | Custom field 1 | |
| custom_value2 | No | Custom field 2 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits like partial vs full update, authentication needs, or side effects. It only states 'Update an existing task', which is insufficient.
Agents need to know what a tool does to the 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, front-loaded sentence 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?
For a mutation tool with 6 parameters and no output schema, the description lacks details on update behavior, return values, and error handling, making it incomplete.
Complex tools with many parameters or behaviors need more documentation. 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 no value 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 'Update' and resource 'existing task', distinguishing it from sibling tools like create_task, delete_task, and get_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when modifying an existing task, but provides no explicit guidance on when not to use it or alternatives like start_task, stop_task, or log_task_time.
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.
32 tool updates
v1.0.0- First observed
approve_quote - First observed
convert_quote_to_invoice - First observed
create_client - First observed
create_invoice - First observed
create_product - First observed
create_quote - First observed
create_task - First observed
delete_client - First observed
delete_invoice - First observed
delete_quote - First observed
delete_task - First observed
get_client - First observed
get_invoice - First observed
get_payment - First observed
get_quote - First observed
get_task - First observed
list_clients - First observed
list_invoices - First observed
list_payments - First observed
list_products - First observed
list_quotes - First observed
list_tasks - First observed
log_task_time - First observed
mark_invoice_paid - First observed
mark_invoice_sent - First observed
search_clients - First observed
send_invoice_email - First observed
send_quote_email - First observed
start_task - First observed
stop_task - First observed
test_connection - First observed
update_task
TDQS
Scored across 32 tools
Most tools target distinct resources and actions, but search_clients and list_clients overlap in search functionality, and convert_quote_to_invoice could be confused with creating an invoice manually. Overall, descriptions help differentiate them.
All tools follow a consistent verb_noun pattern with snake_case, e.g., create_client, list_invoices, mark_invoice_paid. No mixed conventions or irregular naming.
32 tools cover multiple resources (clients, invoices, quotes, products, tasks, payments) and various actions. While slightly high, each tool serves a distinct purpose and the count is reasonable for an invoicing system.
Significant gaps exist: no update operations for clients, invoices, quotes, or products; missing get/delete for products; only create and list for products. Agents cannot modify key entities, leading to likely failures.
Maintenance
Related MCP Connectors
Invoicing you drive by talking to your AI: log time, raise invoices and track what's owed via MCP.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
Related MCP Servers
- AlicenseBqualityCmaintenanceMCP server to interact with the Cuéntica accounting API, allowing users to manage invoices, expenses, income, clients, providers, and bank accounts via natural language.592MIT
- AlicenseNot gradedqualityDmaintenanceMCP server enabling AI assistants to manage invoices, contacts, products, and other accounting data through the Bukku API.6MIT
- AlicenseAqualityBmaintenanceMCP server for the Elorus invoicing and accounting platform, enabling AI assistants to create invoices, manage contacts, and query financial data through natural language.433MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that acts as a secure, multi-tenant proxy to the InvoiceShelf API, enabling AI assistants to manage invoices, estimates, customers, payments, expenses, and more with 109 tools and TOON compression for efficient token usage.GPL 3.0