Xero MCP Server
The Xero MCP Server enables MCP-compatible clients like Claude to manage Xero accounting data through a structured, domain-based navigation system.
Contacts: List, get, create, and search contacts (customers and suppliers) with pagination and filtering
Invoices: List, get, and create sales invoices or bills, and update invoice statuses (submit, authorise, void)
Payments: List, get, and record payments against invoices with optional status filtering
Accounts: Browse the chart of accounts, filterable by type and class, and view detailed account information
Financial Reports: Generate Profit & Loss statements, Balance Sheets, Aged Receivables, and Aged Payables reports
Domain Navigation: Use
xero_navigateto switch between functional areas (contacts, invoices, payments, accounts, reports)Flexible Deployment: Run in
stdiomode (local/CLI) orhttpmode (remote/web), with support for Docker, DigitalOcean, and Cloudflare WorkersMulti-tenant Gateway Mode: Pass credentials per-request via HTTP headers to support multiple Xero organisations through a single server instance
Provides tools to manage Xero accounting resources including contacts, invoices, payments, and accounts, as well as generating financial reports such as Profit and Loss and Balance Sheets.
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., "@Xero MCP ServerShow me the profit and loss report for 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.
Xero MCP Server
Model Context Protocol (MCP) server for the Xero Accounting API. Enables Claude and other MCP-compatible clients to manage Xero contacts, invoices, payments, accounts, and reports.
Features
Contacts, invoices, payments, chart of accounts, and financial reports over stdio, HTTP, or Cloudflare Workers transports
Interactive invoice card (MCP Apps, SEP-1865):
xero_invoices_getrenders as a rich, read-only card in MCP Apps hosts — neutral by default, brandable viawindow.__BRAND__injection orMCP_BRAND_*env varsGateway mode for per-request, multi-tenant credentials
Related MCP server: Python Xero MCP Server for BYB
One-Click Deployment
Note on registry auth: This server depends only on public npm packages, so the Cloudflare and DigitalOcean cloud builders install its dependencies anonymously — no token is required for one-click deploy. (If a future release adds a private
@wyre-ai/*dependency, you would supply a GitHub PAT withread:packagesas a build variable —NODE_AUTH_TOKENfor Cloudflare Workers, a build-timeGITHUB_TOKENsecret for DigitalOcean.)Installing the published package: The released package is published to the GitHub Packages npm registry, which requires authentication on every install (even for public packages). To install it, authenticate npm to
npm.pkg.github.comwith a GitHub PAT that hasread:packages:export NODE_AUTH_TOKEN=$(gh auth token) npm install @wyre-ai/xero-mcp
Quick Start
Prerequisites
Node.js >= 20
Xero OAuth2 app credentials (requires a Xero developer account)
Install and Build
npm install
npm run buildRun (stdio mode)
XERO_ACCESS_TOKEN=your-access-token XERO_TENANT_ID=your-tenant-id npm startRun (HTTP mode)
MCP_TRANSPORT=http XERO_ACCESS_TOKEN=your-access-token XERO_TENANT_ID=your-tenant-id npm startThe server listens on http://0.0.0.0:8080/mcp by default.
Docker
docker build -t xero-mcp .
docker run -p 8080:8080 \
-e MCP_TRANSPORT=http \
-e XERO_ACCESS_TOKEN=your-access-token \
-e XERO_TENANT_ID=your-tenant-id \
xero-mcpEnvironment Variables
Variable | Required | Default | Description |
| Yes (env mode) | — | Xero OAuth2 access token |
| Yes (env mode) | — | Xero tenant ID (organisation) |
| No |
| Transport type: |
| No |
| HTTP server port |
| No |
| HTTP server bind address |
| No |
| Auth mode: |
Gateway Mode
When AUTH_MODE=gateway, credentials are passed per-request via HTTP headers instead of environment variables:
X-Xero-Access-Token— OAuth2 access tokenX-Xero-Tenant-Id— Xero tenant ID
This allows a gateway/proxy to manage multi-tenant credentials.
Interactive Invoice Card (MCP Apps)
xero_invoices_get renders as an interactive card in MCP Apps hosts
(Claude Desktop/web) showing status, contact, dates, amounts, and line
items; plain-JSON behavior is unchanged in other hosts. The card is
read-only — invoices are financial records, so no write actions are
exposed from it. It is neutral by default and brandable via
window.__BRAND__ injection or MCP_BRAND_* env vars (MCP_BRAND_NAME,
MCP_BRAND_LOGO_URL, MCP_BRAND_PRIMARY_COLOR, MCP_BRAND_ACCENT_COLOR,
MCP_BRAND_BG, MCP_BRAND_TEXT) — no rebuild needed.
Available Tools
Tools are organized into domains. Use xero_navigate to select a domain, then use the domain-specific tools.
Navigation
xero_navigate— Select a domain (contacts, invoices, payments, accounts, reports)xero_back— Return to domain selection
Contacts
xero_contacts_list— List contacts with pagination and optional filteringxero_contacts_get— Get detailed contact information by IDxero_contacts_create— Create a new contact (customer or supplier)xero_contacts_search— Search contacts by name
Invoices
xero_invoices_list— List invoices with optional status and type filtersxero_invoices_get— Get detailed invoice information by IDxero_invoices_create— Create a new invoice (sales or bill)xero_invoices_update_status— Update invoice status (submit, authorise, void)
Payments
xero_payments_list— List payments with optional status filterxero_payments_get— Get detailed payment information by IDxero_payments_create— Record a payment against an invoice
Accounts
xero_accounts_list— List chart of accounts with optional type/class filterxero_accounts_get— Get detailed account information by ID
Reports
xero_reports_profit_and_loss— Profit and Loss (income statement) for a date rangexero_reports_balance_sheet— Balance Sheet as of a specific datexero_reports_aged_receivables— Aged Receivables by contactxero_reports_aged_payables— Aged Payables by contact
License
Apache-2.0
Available Tools
20 toolsxero_accounts_getA
Get detailed information about a specific account by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | The unique account ID (UUID) |
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. It does not state that the operation is read-only, does not describe error behavior (e.g., what happens if the account is not found), and lacks any mention of authentication or rate limits.
Agents need to know what a tool does to the 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 filler words. It efficiently conveys the essential 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?
The tool is simple with one parameter and no output schema, but the description's vagueness ('detailed information') does not fully compensate for the missing output schema. It lacks specifics about the return structure or error conditions, making it minimally 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 description coverage is 100%, with accountId described as 'The unique account ID (UUID)'. The description adds no additional meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('account'), and the scope ('by its ID'). It implicitly distinguishes itself from xero_accounts_list by specifying a single account rather than a list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 an account ID is known and detailed information is needed, but it does not explicitly mention alternatives like xero_accounts_list or provide criteria for when to use this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_accounts_listB
List chart of accounts in Xero. Optionally filter by account type or class.
| Name | Required | Description | Default |
|---|---|---|---|
| Type | No | Filter by account type (e.g., "BANK", "REVENUE", "EXPENSE", "CURRENT", "FIXED", "EQUITY", "CURRLIAB", "TERMLIAB", "DIRECTCOSTS", "OVERHEADS", "DEPRECIATN", "OTHERINCOME", "SALES") | |
| Class | No | Filter by account class |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It does not disclose behavioral traits such as read-only nature, pagination, sorting, or rate limits. 'List' implies read-only, but this is not explicit.
Agents need to know what a tool does to the 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 (12 words) that conveys the core functionality and optional filters. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description does not explain return format or behavior (e.g., all accounts vs partial). For a simple list tool with two optional params, it is minimally adequate but could mention default results or limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description paraphrases the filters ('Type' and 'Class') without adding new 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 action ('List'), the resource ('chart of accounts'), and the scope ('in Xero'). It also mentions optional filters, differentiating it from sibling tools like 'xero_accounts_get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., xero_accounts_get). The description only states optional filtering without context on typical use cases or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_backA
Return to domain selection (no-op in flattened mode). All tools are always available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It clearly states the tool is a no-op in flattened mode, which is a critical behavioral trait. It also adds context about tool availability. While it doesn't detail return values or behavior in non-flattened mode, the core side effect (no-op) is transparently disclosed, which is sufficient for this trivial 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?
The description is exceptionally concise: two short sentences that front-load the primary action and then provide necessary context. Every word earns its place, with no redundancy or fluff. It achieves maximum clarity in minimal space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema, no annotations), the description is nearly complete. It states the purpose, the no-op behavior in flattened mode, and the reason for that behavior. The only minor gap is not defining 'domain selection' or 'flattened mode', but these are contextual concepts likely understood from sibling tools and the environment. The description is adequate for an agent to decide whether to invoke this 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 tool has zero parameters, and the schema coverage is trivially 100% since there is nothing to document. Per baseline for 0-param tools, a score of 4 is appropriate. The description adds no parameter information because none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Return to domain selection' with a specific verb and resource, and explicitly notes it is a 'no-op in flattened mode'. This distinguishes it from data-oriented siblings like xero_contacts_list or xero_invoices_get. The purpose is unambiguous even for an agent unfamiliar with the 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?
The description implies usage context by noting the tool is a no-op in flattened mode and that 'All tools are always available', suggesting that in the current environment one might not need to call it. However, it does not explicitly state when to use this tool versus alternatives like xero_navigate, nor provide exclusions beyond the flattened mode caveat. Usage guidance is present but only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_contacts_createB
Create a new contact in Xero. Name is required; other fields are optional.
| Name | Required | Description | Default |
|---|---|---|---|
| Name | Yes | Contact name (required) | |
| Phone | No | Contact phone number | |
| LastName | No | Contact last name | |
| FirstName | No | Contact first name | |
| TaxNumber | No | Tax number (ABN in Australia, GST in NZ, VAT in UK) | |
| IsCustomer | No | Whether the contact is a customer | |
| IsSupplier | No | Whether the contact is a supplier | |
| EmailAddress | No | Contact email address | |
| AccountNumber | No | Account number for the contact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full transparency burden. It identifies the operation as creating a new contact, but does not disclose potential side effects, response behavior, or whether duplicate names cause 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?
Description is two short sentences, clear and to the point with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 scalar parameters and no output schema, the description is minimal. It does not explain what the tool returns or how to verify the created contact, which is important for a create operation. However, the schema covers parameters well.
Complex tools with many parameters or behaviors need more documentation. 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 100% coverage with descriptions for all parameters. The description only restates Name as required, which is already in the schema, adding no additional semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a contact in Xero, using a specific verb and resource. It is distinct from sibling contact tools like list/get/search due to the 'create' 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. It does not mention using list/search to find existing contacts or any exclusions. The only usage hint is implicit from the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_contacts_getA
Get detailed information about a specific contact by its ID. Returns full contact profile including addresses, phone numbers, and email.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | The unique contact ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read operation (get details) but doesn't mention side effects, permissions, or error handling. Since no annotations are provided, the description carries the full burden for transparency. It adequately describes the main behavior but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and resulting data. Every word adds value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description includes the return fields (addresses, phone numbers, email) which is helpful given no output schema. It is complete for a simple get operation, but could mention potential error responses or pagination if applicable. Still, it meets the needs for this single-param 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 schema covers the parameter fully with a description of the unique contact ID. The description adds no new semantics for the parameter; it only repeats 'by its ID'. Baseline score of 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets contact details by ID and lists specific return fields like addresses, phone numbers, and email. Distinguishes from siblings such as xero_contacts_list (list all) and xero_contacts_search (filtered) by focusing on a single contact retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you have a specific contact ID and need full details. It doesn't explicitly compare to siblings, but the purpose is clear enough from context. A brief mention of when not to use (e.g., for searches or creation) would improve it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_contacts_listA
List contacts in Xero with pagination. Optionally filter using a where clause. Returns contact details including name, email, and addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based, default: 1). Each page returns up to 100 contacts. | |
| where | No | Optional Xero where clause filter (e.g., 'ContactStatus=="ACTIVE"') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavioral traits. It mentions pagination and optional filtering, which implies a read-only, batch operation. However, it does not specify side effects, permissions, rate limits, or that it returns a list. The parameter descriptions in the schema confirm pagination limits (100 per page), so the description adds marginal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states the action and core feature (pagination), second covers optional filtering and return fields. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description usefully specifies return fields. For a simple list tool with pagination and optional filter, it covers the essentials. However, the presence of sibling xero_contacts_search suggests that guidance on when to use list versus search would enhance completeness. Error handling and data freshness are not addressed.
Complex tools with many parameters or behaviors need more documentation. 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% coverage with clear parameter descriptions for 'page' and 'where'. The description adds value by stating that results include 'name, email, and addresses', which is not in the schema (no output schema). This extra context justifies a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'List' and resource 'contacts in Xero', clearly indicating a paginated listing operation. It distinguishes from sibling tools like xero_contacts_get (single contact) and xero_contacts_search (likely full-text search) by mentioning pagination and optional where clause 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?
The description says 'Optionally filter using a where clause', implying use cases for filtered or unfiltered lists. However, it does not contrast with sibling tools like xero_contacts_search, which might be more appropriate for complex queries. No explicit when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_contacts_searchA
Search contacts by name. Returns contacts whose name contains the search term.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Search term to match against contact names |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it returns contacts matching a substring search, but lacks details on pagination, case sensitivity, maximum results, or response structure. Since no annotations exist, the description carries the full burden and provides basic but incomplete transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded, and contains no extraneous information. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with one parameter and no output schema, the description covers the essential behavior. It could mention that multiple contacts may be returned or specify case sensitivity, but it is adequate for the complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100% for the 'term' parameter, and the tool description adds no additional meaning beyond what the schema provides. The baseline is 3, as the description does not enrich parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches contacts by name and returns those whose name contains the search term. It distinguishes from sibling tools like xero_contacts_list (list all) and xero_contacts_get (get by ID) by specifying the search-by-name functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for name-based searching but does not explicitly state when to use this tool versus xero_contacts_get (for exact ID lookup) or xero_contacts_list (for retrieving all contacts). No guidance on limitations or prerequisites is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_invoices_createB
Create a new invoice in Xero. Requires type, contact, and at least one line item.
| Name | Required | Description | Default |
|---|---|---|---|
| Date | No | Invoice date in YYYY-MM-DD format | |
| Type | Yes | Invoice type: ACCREC (sales invoice) or ACCPAY (bill) (required) | |
| Status | No | Initial invoice status (default: DRAFT) | |
| DueDate | No | Due date in YYYY-MM-DD format | |
| ContactID | Yes | The contact ID to create the invoice for (required) | |
| LineItems | Yes | Array of line items (required). Each item needs Description, Quantity, UnitAmount, and AccountCode. | |
| Reference | No | Invoice reference/PO number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states 'Create a new invoice,' implying mutation, but omits side effects (e.g., immediate persistence, status defaults, idempotency, error scenarios, or permissions). This is insufficient for a write 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, direct sentence without extraneous information. It efficiently conveys the core action and mandatory requirements, earning full marks for 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?
With 7 parameters, 3 required, no output schema, and no annotations, the description is too minimal. It lacks information about return values, error handling, date formatting conventions, or typical usage flows, leaving the agent underinformed for a write 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 has 100% description coverage, so the schema already details each parameter. The description only echoes the required fields without adding meaningful contextual insight beyond what's in the schema, resulting in a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new invoice in Xero' with specific verb and resource. It lists required elements (type, contact, line items) and distinguishes itself from sibling tools like xero_invoices_list (listing) and xero_invoices_update_status (update only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions required parameters but does not provide explicit guidance on when to use this tool versus alternatives. It lacks context such as prerequisites (e.g., contact must exist) or exclusions (e.g., not for updating existing invoices).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_invoices_getA
Get detailed information about a specific invoice by its ID. Returns full invoice details including line items, amounts, and payment status.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The unique invoice ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently states what the tool returns ('full invoice details including line items, amounts, and payment status') and implies a read-only side-effect-free behavior via the verb 'Get'. It does not cover errors or auth, but for a simple lookup this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with a front-loaded verb and resource, followed by a concise statement of return value. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter, no output schema), the description fully covers what the tool does and what information it returns. It is complete enough for an agent to select and invoke it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter invoiceId is described in the schema. The description adds minimal semantic value by linking the ID to 'a specific invoice' and mentioning detailed output, but it does not go beyond the schema's existing meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' and clearly identifies the resource: 'a specific invoice by its ID'. It distinguishes this tool from sibling tools like xero_invoices_list (list all invoices) and xero_invoices_create/update_status by focusing on fetching detailed data for a single invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this tool when you have an invoice ID and need full details. It implies the contrast with listing or creating invoices, though it does not explicitly name alternative tools or exclusions. This meets the 'clear context, no exclusions' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_invoices_listA
List invoices in Xero with pagination. Optionally filter by status and type (ACCREC for sales, ACCPAY for bills).
| Name | Required | Description | Default |
|---|---|---|---|
| Type | No | Filter by invoice type: ACCREC (accounts receivable / sales invoices) or ACCPAY (accounts payable / bills) | |
| page | No | Page number (1-based, default: 1). Each page returns up to 100 invoices. | |
| Status | No | Filter by invoice status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the burden. It states listing with pagination but does not explicitly confirm read-only behavior, disclose any side effects, or mention rate limits. The word 'list' implies read-only, but transparency could be improved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no extraneous words. Purpose and optional filters are front-loaded, making it efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 3 optional parameters and no output schema. The description covers the main purpose and filters. It does not mention the return format (list of invoice objects), but this is typical for a listing tool. Minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good parameter descriptions. The description adds slight value by clarifying ACCREC and ACCPAY meanings, but the schema already defines these. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'invoices in Xero', and key features like pagination and optional filters (status and type). It distinguishes from siblings like xero_invoices_get (single invoice) and xero_invoices_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions optional filters but does not provide explicit guidance on when to use this tool versus alternatives like xero_invoices_get or xero_accounts_list. No when-not or prerequisite advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_invoices_update_statusA
Update the status of an existing invoice. Can submit, authorise, or void an invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| Status | Yes | New status for the invoice (required) | |
| invoiceId | Yes | The invoice ID to update (required) |
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. It mentions the three possible statuses but does not disclose consequences (e.g., voiding is irreversible), permissions required, or side effects. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no unnecessary information. The key action is front-loaded, and every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 params, no output schema), the description covers the essentials of what it does. However, it lacks any mention of behavior beyond the status change, such as errors or reversibility, and does not address usage context relative to sibling tools. It is minimally viable but not thorough.
Complex tools with many parameters or behaviors need more documentation. 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 provides descriptions for both parameters and an enum for Status, achieving 100% coverage. The description repeats the statuses but adds no extra meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates the status of an existing invoice, listing the specific actions (submit, authorise, void) which distinguishes it from other invoice tools like create or list. It is a specific verb+resource with clear scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (for existing invoices needing status changes) but does not explicitly mention alternatives or situations when not to use it. It lacks direct guidance on choosing this over other invoice tools, but the context is clear enough for a simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_payments_createB
Create a new payment in Xero. Records a payment against an invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| Date | Yes | Payment date in YYYY-MM-DD format (required) | |
| Amount | Yes | Payment amount (required) | |
| AccountID | Yes | The bank account ID the payment is made from/to (required) | |
| InvoiceID | Yes | The invoice ID to apply the payment to (required) | |
| Reference | No | Payment reference |
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 of behavioral disclosure. It only states the basic creation action but does not disclose side effects on the invoice, permission requirements, reversibility, or what the response contains. For a mutation tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that immediately state the action and its purpose, with no redundant or filler words. Every element 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?
With no annotations and no output schema, the description is too sparse for a creation tool. It fails to explain what happens after payment creation, whether the invoice status changes, or any error or edge-case behavior. The parameter schema is helpful but does not compensate for the lack of contextual information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides descriptions for all five parameters (100% coverage), so the schema does the heavy lifting. The description adds no additional parameter semantics, but the baseline of 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new payment in Xero') and its specific purpose ('Records a payment against an invoice'), distinguishing it from sibling tools that list or get payments. The verb 'Create' and resource 'payment' are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 phrase 'Records a payment against an invoice' implies the intended usage scenario (applying a payment to an invoice), but there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions. Context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_payments_getA
Get detailed information about a specific payment by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | The unique payment ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description indicates a read operation ('Get detailed information'), but with no annotations, it fails to disclose any behavioral traits such as auth requirements, rate limits, or side effects beyond the basic retrieval.
Agents need to know what a tool does to the 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 of 12 words, efficient and front-loaded. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with one parameter and no output schema, the description sufficiently conveys the purpose and return value ('detailed information'). Completeness is adequate, though could specify example fields.
Complex tools with many parameters or behaviors need more documentation. 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% (paymentId described as 'The unique payment ID (UUID)'), and description adds no additional parameter meaning beyond restating the schema. Baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get detailed information about a specific payment by its ID.' Uses specific verb and resource, and distinguishes from sibling tools like xero_payments_list (list all) and xero_payments_create (create).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for retrieving a single payment by ID, but provides no explicit guidance on when to use this over alternatives like listing all payments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_payments_listA
List payments in Xero with pagination. Optionally filter by status.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based, default: 1). Each page returns up to 100 payments. | |
| Status | No | Filter by payment status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It mentions pagination but relies on the schema for details. It does not mention read-only nature, rate limits, or any side effects. The minimal description adds little beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, efficiently conveying the core action and optional filter. It is front-loaded and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (2 parameters, no output schema, no nested objects), the description is adequate. It covers the main functionality (listing with pagination and filtering) but could be improved by noting the return type or that it's read-only. However, it is complete enough for a simple 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?
Schema coverage is 100% with detailed parameter descriptions for 'page' and 'Status'. The description merely echoes 'Optionally filter by status', which adds no new meaning. Baseline 3 is appropriate as schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'payments in Xero', with optional filtering by status. It is specific and distinguishes from sibling tools that list different resources (e.g., xero_accounts_list, xero_invoices_list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing payments with pagination and filtering, but does not explicitly state when to use this tool versus alternatives like xero_payments_get (single payment) or other list tools. No exclusions or contextual guidance provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_reports_aged_payablesA
Get an Aged Payables report showing outstanding supplier bills by age.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Report date in YYYY-MM-DD format (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'Get' which implies a read operation, but does not disclose potential limitations (e.g., data freshness, authorization needs, or if the report is computed on the fly). The behavioral traits are minimally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence conveys the essential information without redundancy. Every word is earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 adequate but could be improved by hinting at the age categories (e.g., 30/60/90 days). It covers the basics but lacks some context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'date' is well-described in the schema (format, required). The description adds no additional semantic detail; the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets an Aged Payables report and specifies the content ('outstanding supplier bills by age'). It distinguishes from sibling tools like xero_reports_aged_receivables and xero_reports_balance_sheet by naming the specific report type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing aged payables but does not explicitly state when to use or provide alternatives. Without guidance on when not to use or comparisons to sibling reports, an agent might lack context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_reports_aged_receivablesA
Get an Aged Receivables report showing outstanding customer invoices by age.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Report date in YYYY-MM-DD format (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It implies a read operation and specifies the report type, but lacks details on default behavior, response format, or auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence that is front-loaded with the key action and resource, no extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-param tool with no output schema, the description is adequate but could mention what the report contains (e.g., aging buckets) to be 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% and the description does not add extra meaning beyond the schema's description of the date 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 tool retrieves an Aged Receivables report with outstanding customer invoices by age, differentiating it from siblings like aged payables or balance sheet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., aged payables, balance sheet) or any prerequisites. The description is purely structural.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_reports_balance_sheetB
Get a Balance Sheet report as of a specific date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Report date in YYYY-MM-DD format (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of disclosing behavior. The description is minimal and does not mention safety, permissions, side effects, return format, or any limitations. It only describes the action without 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 concise sentence that is front-loaded with the main action and resource. There is no redundant information, making it efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one fully-described parameter, the description is adequate but leaves gaps. It lacks details about the report contents, any caveats about historical dates, or how the date is used exactly. It also does not provide usage guidance among report siblings, making it minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the parameter fully with description and format. The description adds only 'as of a specific date,' which reinforces the date parameter but does not provide additional meaning beyond the schema. With 100% schema coverage, the baseline is 3, and no extra value is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a Balance Sheet report, which is a specific resource and verb. It also mentions 'as of a specific date,' tying to the date parameter. This distinguishes it from sibling report tools like Profit and Loss or Aged Receivables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. The description only states what it does, with no context about choosing it over other report tools or any prerequisites. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_reports_profit_and_lossA
Get a Profit and Loss (income statement) report for a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| toDate | Yes | End date in YYYY-MM-DD format (required) | |
| fromDate | Yes | Start date in YYYY-MM-DD format (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. The verb 'Get' implies a read-only operation, but no details are given about permissions, return format, or error handling. It is adequate but minimal, lacking explicit safety or side-effect information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It efficiently conveys the tool's purpose without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, self-descriptive report retrieval, the description is largely sufficient. However, since there is no output schema, the description does not clarify the structure or content of the returned report, making it slightly incomplete for a fully autonomous 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?
The input schema covers 100% of parameters with clear format descriptions (YYYY-MM-DD, required). The description's mention of 'date range' adds no additional semantic value 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 clearly states the action (Get) and the resource (Profit and Loss report), making it distinct from sibling report tools like balance sheet and aged receivables. The verb and resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when a P&L report is needed) but provides no explicit guidance on selecting it over sibling report tools. There are no exclusions or alternative recommendations, relying on the tool name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xero_statusA
Show credentials status and available domains
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full responsibility for behavioral disclosure. The phrase 'Show credentials status and available domains' essentially restates the tool's purpose without adding details about side effects, safety, return format, or interpretation of 'credentials status.' This lack of extra context leaves the agent with minimal behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately states the tool's function. It is front-loaded and contains no filler, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters) and lack of output schema, the description is minimally viable but has gaps. It does not explain what 'credentials status' means, how the info is presented, or whether the operation is read-only. This incomplete context could lead to incorrect assumptions, but the simplicity of the tool partially compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, which warrants a baseline of 4. There is no parameter schema to elaborate on, so the description does not need to add parameter meaning. The baseline applies because no additional explanation is required.
Input schemas describe structure but not intent. Descriptions should explain 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 'Show' and clearly identifies the resource ('credentials status and available domains'). This distinguishes the tool from sibling tools like xero_contacts_list or xero_invoices_list, which deal with specific data entities. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of typical scenarios (e.g., checking authentication before other operations) or any explicit exclusions. The description simply states what it does without context.
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.
10 tool updates
v1.5.2- Added
xero_accounts_get - Added
xero_back - Added
xero_contacts_create - Added
xero_invoices_get - Added
xero_invoices_update_status - Added
xero_navigate - Added
xero_payments_create - Added
xero_reports_balance_sheet - Added
xero_reports_profit_and_loss - Added
xero_status
10 tool updates
v1.5.0- Removed
xero_accounts_get - Removed
xero_back - Removed
xero_contacts_create - Removed
xero_invoices_get - Removed
xero_invoices_update_status - Removed
xero_navigate - Removed
xero_payments_create - Removed
xero_reports_balance_sheet - Removed
xero_reports_profit_and_loss - Removed
xero_status
20 tool updates
v1.3.4- Added
xero_accounts_get - Added
xero_accounts_list - Added
xero_back - Added
xero_contacts_create - Added
xero_contacts_get - Added
xero_contacts_list - Added
xero_contacts_search - Added
xero_invoices_create - Added
xero_invoices_get - Added
xero_invoices_list - Added
xero_invoices_update_status - Added
xero_navigate - Added
xero_payments_create - Added
xero_payments_get - Added
xero_payments_list - Added
xero_reports_aged_payables - Added
xero_reports_aged_receivables - Added
xero_reports_balance_sheet - Added
xero_reports_profit_and_loss - Added
xero_status
20 tool updates
v1.2.0- Removed
xero_accounts_get - Removed
xero_accounts_list - Removed
xero_back - Removed
xero_contacts_create - Removed
xero_contacts_get - Removed
xero_contacts_list - Removed
xero_contacts_search - Removed
xero_invoices_create - Removed
xero_invoices_get - Removed
xero_invoices_list - Removed
xero_invoices_update_status - Removed
xero_navigate - Removed
xero_payments_create - Removed
xero_payments_get - Removed
xero_payments_list - Removed
xero_reports_aged_payables - Removed
xero_reports_aged_receivables - Removed
xero_reports_balance_sheet - Removed
xero_reports_profit_and_loss - Removed
xero_status
20 tool updates
v1.1.3- Added
xero_accounts_get - Added
xero_accounts_list - Added
xero_back - Added
xero_contacts_create - Added
xero_contacts_get - Added
xero_contacts_list - Added
xero_contacts_search - Added
xero_invoices_create - Added
xero_invoices_get - Added
xero_invoices_list - Added
xero_invoices_update_status - Changed
xero_navigate1 field changed- changed
Input schema / properties / domain / descriptionPrevious value: -"The domain to navigate to:\n- contacts: Contact management - list, get, create, and search contacts (customers and suppliers)\n- invoices: Invoice management - list, get, create invoices and update their status\n- payments: Payment management - list, get, and create payments against invoices\n- accounts: Chart of accounts - list and view account details by type and class\n- reports: Financial reports - profit & loss, balance sheet, aged receivables, and aged payables"New value: +"The domain to explore:\n- contacts: Contact management - list, get, create, and search contacts (customers and suppliers)\n- invoices: Invoice management - list, get, create invoices and update their status\n- payments: Payment management - list, get, and create payments against invoices\n- accounts: Chart of accounts - list and view account details by type and class\n- reports: Financial reports - profit & loss, balance sheet, aged receivables, and aged payables"
- Added
xero_payments_create - Added
xero_payments_get - Added
xero_payments_list - Added
xero_reports_aged_payables - Added
xero_reports_aged_receivables - Added
xero_reports_balance_sheet - Added
xero_reports_profit_and_loss - Added
xero_status
1 tool update
v0.0.0-semantically-released- First observed
xero_navigate
TDQS
Scored across 20 tools
Most tools are clearly distinct by resource and action. The main ambiguity is between xero_contacts_list and xero_contacts_search, and the three navigation/utility tools (xero_navigate, xero_status, xero_back) add some conceptual overlap, though their roles are explained.
Tool names follow a very consistent xero_<domain>_<action> pattern throughout, with predictable verbs like list, get, create, and update_status. Even the report tools use clear domain-action naming with full report names.
At 20 tools, the server is in the heavier range, especially because xero_navigate, xero_status, and xero_back are meta/navigation aids that do not add domain functionality in a flattened mode. The 17 domain tools are mostly justified, but the overall surface feels a bit bloated.
Core accounting workflows are covered—contacts, invoices, payments, accounts, and key reports—but the surface has notable lifecycle gaps. Contacts and invoices lack update/delete operations, accounts are read-only, and payments have no update or reversal capability.
Maintenance
Related MCP Connectors
Malaysian SME accounting, e-Invoice and payroll for your AI. 64 tools; writes are approved drafts.
Connect CollectiveSpend with Xero to manage contacts. Retrieve, create, and update contact records…
Bookkeeping for owner-operated businesses. Query transactions, invoices, and reports.
Taokeh is accounting software for Malaysian SMEs — double-entry books, LHDN e-Invoice (MyInvois), SST, and full statutory payroll — and this connector opens a company's live books to the AI its owner already uses. 59 tools. The reads answer real questions from the ledger: P&L and balance sheet with server-computed comparisons, cash position, A/R and A/P aging, per-channel marketplace sales, an 8-week cash-flow forecast, tax position, document search with e-Invoice standing, and a one-call daily brief. The writes are drafts only — expenses, invoices, bills, quotes, purchase orders, receipts, credit and debit notes, adjusting journals, bank-statement imports and bank-row suggestions — every figure re-checked by the server, every draft waiting for a human tap in Taokeh. The AI can also work the Shoebox: staff snap paper on free phone logins, and the connector lists the pile, reads each photo, and files the draft with the original attached — the server maps its own stored copy, so the document trail stays byte-perfect. One connection is bound to one company at consent; no tool takes a company argument. Migrating from another system? The same connector stages the chart of accounts, opening balances, contacts, products, historical documents and workspace settings onto the owner's own review screens. Bring your own AI subscription — no per-call fees.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with QuickFile UK accounting software, providing access to invoicing, client management, purchases, banking, and financial reporting through 40+ tools covering the complete QuickFile API.21 npm4MIT
- -licenseNot gradedqualityDmaintenanceEnables interaction with Xero accounting API for financial reporting, sales analysis, grant tracking, and bill management using natural language.1-
- AlicenseAqualityCmaintenanceEnables natural language interaction with Xero accounting data, managing contacts, invoices, and accounts across multiple organisations via OAuth2.12MIT
- AlicenseNot gradedqualityAmaintenanceEnables querying Xubio accounting data (clients, invoices, products, balances) through natural language by exposing 52 read-only API endpoints as MCP tools.MIT