Xero MCP
MCPB · XERO-MCP.MCPB
Every Xero Accounting read plus a local SQLite ledger - aging, reconciliation, and GL tie-out
Available components
Last scanned (25 minutes ago)
Scores higher than 82% of MCPB servers
Category Finance and Payments
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 12 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability54
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 23307 tokens (~310/item across 75 items; 75 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management99
- Stability check failed: the tool surface changed between 0.1.5 and 0.1.9: 0 tool removals, 1 breaking changes, 0 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 75 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 31 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 96.
- 29 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 86 to 89.
- 28 Oct 26 0
- Package version: 0.1.5 → 0.1.9 functional
- 27 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 79 to 83.
- 24 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 69 to 73.
- 23 Oct 26 +2
- Provenance: fail → unverified ▼ security
- Stability: 0.67 → fail ▼ security
- Maintenance: unverified → pass ▲ functional
- Package version: 0.1.5 → 0.1.9 functional
- Package version: 0.1.7 → 0.1.9 functional
- Package version: 0.1.7 → 0.1.8 functional
- 22 Oct 26 −1
- Maintenance: pass → unverified ▼ functional
- Package version: 0.1.6 → 0.1.7 functional
- 21 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed mcpb/https://github.com/Servosity/msp-skills/releases/download/xero-v0.1.9/xero-mcp.mcpb@0.1.9
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | mcpb |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
accounts ~468
Get, create, update, and delete accounts
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
accounts_create ~420
Creates a new chart of accounts. Optional: AccountID, AddToWatchlist, BankAccountNumber (plus 17 more). Returns array of Account.
| Name | Type | Req | Description |
|---|---|---|---|
| AccountID | string | – | The Xero identifier for an account – specified as a string following the endpoint name e.g. |
| AddToWatchlist | boolean | – | Boolean – describes whether the account is shown in the watchlist widget on the dashboard |
| BankAccountNumber | string | – | For bank accounts only (Account Type BANK) |
| BankAccountType | string | – | For bank accounts only. See Bank Account types |
| Class | string | – | See Account Class Types |
| Code | string | – | Customer defined alpha numeric account code e.g 200 or SALES (max length = 10) |
| CurrencyCode | string | – | 3 letter alpha code for the currency – see list of currency codes |
| Description | string | – | Description of the Account. Valid for all types of accounts except bank accounts (max length = 4000) |
| EnablePaymentsToAccount | boolean | – | Boolean – describes whether account can have payments applied to it |
| HasAttachments | boolean | – | boolean to indicate if an account has an attachment (read only) |
| Name | string | – | Name of account (max length = 150) |
| ReportingCode | string | – | Shown if set |
| ReportingCodeName | string | – | Shown if set |
| ShowInExpenseClaims | boolean | – | Boolean – describes whether account code is available for use with expense claims |
| Status | string | – | Accounts with a status of ACTIVE can be updated to ARCHIVED. See Account Status Codes |
| SystemAccount | string | – | If this is a system account then this element is returned. See System Account types. |
| TaxType | string | – | The tax type from taxRates |
| Type | string | – | See Account Types |
| UpdatedDateUTC | string | – | Last modified date UTC format |
| ValidationErrors | string | – | Displays array of validation error messages from the API |
No output schema declared.
No examples provided.
accounts_delete ~40
Deletes a chart of accounts. Required: AccountID. Returns array of Account. Destructive.
| Name | Type | Req | Description |
|---|---|---|---|
| AccountID | string | yes | Unique identifier for Account object |
No output schema declared.
No examples provided.
accounts_get ~50
Retrieves the full chart of accounts. Optional: where, order. Returns array of Account.
| Name | Type | Req | Description |
|---|---|---|---|
| order | string | – | Order by an any element |
| where | string | – | Filter by an any element |
No output schema declared.
No examples provided.
accounts_get-accountid ~46
Retrieves a single chart of accounts by using a unique account Id. Required: AccountID. Returns array of Account.
| Name | Type | Req | Description |
|---|---|---|---|
| AccountID | string | yes | Unique identifier for Account object |
No output schema declared.
No examples provided.
accounts_update ~49
Updates a chart of accounts. Required: AccountID. Optional: Accounts. Returns array of Account.
| Name | Type | Req | Description |
|---|---|---|---|
| AccountID | string | yes | Unique identifier for Account object |
| Accounts | string | – | Accounts |
No output schema declared.
No examples provided.
aging ~572
Bucket outstanding invoices by how overdue they are (current / 1-30 / 31-60 / 61-90 / 90+), computed locally from the synced invoices — no Reports API call. Receivables by default; --payable buckets what you owe instead. Run `sync` first to populate the local store.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| as-of | string | – | Aging date (YYYY-MM-DD); defaults to today |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| payable | boolean | – | Bucket payable (ACCPAY) invoices instead of receivable (ACCREC) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
analytics ~521
Analyze locally synced data with count, group-by, and summary operations. Data must be synced first with the sync command.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| group-by | string | – | Field to group by |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| limit | number | – | Max groups to show (default: 25) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| type | string | – | Resource type to analyze |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
bank_recon ~513
List bank transactions still flagged unreconciled (the synced IsReconciled=false rows) and suggest likely matches against invoices and payments by same contact + equal amount. Computed locally — a reconciliation worksheet, not a live call. Run `sync` first.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
bank_transactions ~468
Get, create, and update bank transactions
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
bank_transactions_history ~468
Get and create history for bank transactions
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
bank-transactions_create ~172
Creates one or more spent or received money transaction. Optional: summarizeErrors (default: false), unitdp, BankTransactions (plus 2 more). Returns the updated BankTransactions.
| Name | Type | Req | Description |
|---|---|---|---|
| BankTransactions | string | – | Bank transactions |
| Warnings | string | – | Displays array of warning messages from the API |
| pagination-item-count | number | – | Item count |
| pagination-page | number | – | Page |
| pagination-page-count | number | – | Page count |
| pagination-page-size | number | – | Page size |
| summarizeErrors | boolean | – | If false return 200 OK and mix of successfully created objects and any with validation errors |
| unitdp | number | – | e.g. unitdp=4 – (Unit Decimal Places) You can opt in to use four decimal places for unit amounts |
No output schema declared.
No examples provided.
bank-transactions_get ~133
Retrieves any spent or received money transactions. Optional: where, order, page (plus 2 more). Returns the BankTransactions.
| Name | Type | Req | Description |
|---|---|---|---|
| order | string | – | Order by an any element |
| page | number | – | Up to 100 bank transactions will be returned in a single API call with line items details |
| pageSize | number | – | Number of records to retrieve per page |
| unitdp | number | – | e.g. unitdp=4 – (Unit Decimal Places) You can opt in to use four decimal places for unit amounts |
| where | string | – | Filter by an any element |
No output schema declared.
No examples provided.
bank-transactions_get-banktransactions ~95
Retrieves a single spent or received money transaction by using a unique bank transaction Id. Required: BankTransactionID. Optional: unitdp. Returns the BankTransactions.
| Name | Type | Req | Description |
|---|---|---|---|
| BankTransactionID | string | yes | Xero generated unique identifier for a bank transaction |
| unitdp | number | – | e.g. unitdp=4 – (Unit Decimal Places) You can opt in to use four decimal places for unit amounts |
No output schema declared.
No examples provided.
bank-transactions_history_create-bank-transaction-record ~70
Creates a history record for a specific bank transactions. Required: BankTransactionID. Optional: HistoryRecords. Returns array of HistoryRecord.
| Name | Type | Req | Description |
|---|---|---|---|
| BankTransactionID | string | yes | Xero generated unique identifier for a bank transaction |
| HistoryRecords | string | – | History records |
No output schema declared.
No examples provided.
bank-transactions_history_get-bank-transactions ~58
Retrieves history from a specific bank transaction using a unique bank transaction Id. Required: BankTransactionID. Returns array of HistoryRecord.
| Name | Type | Req | Description |
|---|---|---|---|
| BankTransactionID | string | yes | Xero generated unique identifier for a bank transaction |
No output schema declared.
No examples provided.
bank-transactions_update ~166
Updates a single spent or received money transaction. Required: BankTransactionID. Optional: unitdp, BankTransactions, Warnings (plus 1 more). Returns the new BankTransactions.
| Name | Type | Req | Description |
|---|---|---|---|
| BankTransactionID | string | yes | Xero generated unique identifier for a bank transaction |
| BankTransactions | string | – | Bank transactions |
| Warnings | string | – | Displays array of warning messages from the API |
| pagination-item-count | number | – | Item count |
| pagination-page | number | – | Page |
| pagination-page-count | number | – | Page count |
| pagination-page-size | number | – | Page size |
| unitdp | number | – | e.g. unitdp=4 – (Unit Decimal Places) You can opt in to use four decimal places for unit amounts |
No output schema declared.
No examples provided.
bank-transactions_update-or-create ~176
Updates or creates one or more spent or received money transaction. Optional: summarizeErrors (default: false), unitdp, BankTransactions (plus 2 more). Returns the new BankTransactions.
| Name | Type | Req | Description |
|---|---|---|---|
| BankTransactions | string | – | Bank transactions |
| Warnings | string | – | Displays array of warning messages from the API |
| pagination-item-count | number | – | Item count |
| pagination-page | number | – | Page |
| pagination-page-count | number | – | Page count |
| pagination-page-size | number | – | Page size |
| summarizeErrors | boolean | – | If false return 200 OK and mix of successfully created objects and any with validation errors |
| unitdp | number | – | e.g. unitdp=4 – (Unit Decimal Places) You can opt in to use four decimal places for unit amounts |
No output schema declared.
No examples provided.
contacts ~466
Get, create, and update contacts
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
contacts_create ~135
Creates multiple contacts (bulk) in a Xero organisation. Optional: summarizeErrors (default: false), Contacts, Warnings (plus 1 more). Returns the updated Contacts.
| Name | Type | Req | Description |
|---|---|---|---|
| Contacts | string | – | Contacts |
| Warnings | string | – | Displays array of warning messages from the API |
| pagination-item-count | number | – | Item count |
| pagination-page | number | – | Page |
| pagination-page-count | number | – | Page count |
| pagination-page-size | number | – | Page size |
| summarizeErrors | boolean | – | If false return 200 OK and mix of successfully created objects and any with validation errors |
No output schema declared.
No examples provided.
contacts_get ~213
Retrieves all contacts in a Xero organisation. Optional: where, order, IDs (plus 5 more). Returns the Contacts.
| Name | Type | Req | Description |
|---|---|---|---|
| IDs | string | – | Filter by a comma separated list of ContactIDs. Allows you to retrieve a specific set of contacts in a single call. |
| includeArchived | boolean | – | e.g. includeArchived=true - Contacts with a status of ARCHIVED will be included in the response |
| order | string | – | Order by an any element |
| page | number | – | e.g. page=1 - Up to 100 contacts will be returned in a single API call. |
| pageSize | number | – | Number of records to retrieve per page |
| searchTerm | string | – | Search parameter that performs a case-insensitive text search across the Name, FirstName, LastName |
| summaryOnly | boolean | – | Use summaryOnly=true in GET Contacts and Invoices endpoint to retrieve a smaller version of the response object. |
| where | string | – | Filter by an any element |
No output schema declared.
No examples provided.
contacts_get-by-number ~65
Retrieves a specific contact by contact number in a Xero organisation. Required: ContactNumber. Returns the Contacts.
| Name | Type | Req | Description |
|---|---|---|---|
| ContactNumber | string | yes | This field is read only on the Xero contact screen, used to identify contacts in external systems (max length = 50). |
No output schema declared.
No examples provided.
contacts_get-contactid ~47
Retrieves a specific contacts in a Xero organisation using a unique contact Id. Required: ContactID. Returns the Contacts.
| Name | Type | Req | Description |
|---|---|---|---|
| ContactID | string | yes | Unique identifier for a Contact |
No output schema declared.
No examples provided.
contacts_history ~466
Get and create history for contacts
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
contacts_history_create-contact ~59
Creates a new history record for a specific contact. Required: ContactID. Optional: HistoryRecords. Returns array of HistoryRecord.
| Name | Type | Req | Description |
|---|---|---|---|
| ContactID | string | yes | Unique identifier for a Contact |
| HistoryRecords | string | – | History records |
No output schema declared.
No examples provided.
contacts_history_get-contact ~42
Retrieves history records for a specific contact. Required: ContactID. Returns array of HistoryRecord.
| Name | Type | Req | Description |
|---|---|---|---|
| ContactID | string | yes | Unique identifier for a Contact |
No output schema declared.
No examples provided.
contacts_update ~116
Updates a specific contact in a Xero organisation. Required: ContactID. Optional: Contacts, Warnings, pagination. Returns the new Contacts.
| Name | Type | Req | Description |
|---|---|---|---|
| ContactID | string | yes | Unique identifier for a Contact |
| Contacts | string | – | Contacts |
| Warnings | string | – | Displays array of warning messages from the API |
| pagination-item-count | number | – | Item count |
| pagination-page | number | – | Page |
| pagination-page-count | number | – | Page count |
| pagination-page-size | number | – | Page size |
No output schema declared.
No examples provided.
contacts_update-or-create ~138
Updates or creates one or more contacts in a Xero organisation. Optional: summarizeErrors (default: false), Contacts, Warnings (plus 1 more). Returns the new Contacts.
| Name | Type | Req | Description |
|---|---|---|---|
| Contacts | string | – | Contacts |
| Warnings | string | – | Displays array of warning messages from the API |
| pagination-item-count | number | – | Item count |
| pagination-page | number | – | Page |
| pagination-page-count | number | – | Page count |
| pagination-page-size | number | – | Page size |
| summarizeErrors | boolean | – | If false return 200 OK and mix of successfully created objects and any with validation errors |
No output schema declared.
No examples provided.
context ~29
Get API domain context: resource taxonomy, auth requirements, query tips, and unique capabilities. Call this first.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
exposure ~541
Rank contacts by total outstanding receivable amount due (with an overdue split and invoice count), joining synced invoices to contacts locally. --contact <id> drills into a single contact's outstanding invoices. Run `sync` first.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| as-of | string | – | Overdue cutoff date (YYYY-MM-DD); defaults to today |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| contact | string | – | Drill into a single contact id (statement view) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
import ~539
Import data from a JSONL file by issuing POST requests for each record. Each line must be a valid JSON object. Failed records are logged to stderr but do not stop the import.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| args | string | – | Additional positional arguments or raw CLI flags to append to the command. |
| batch-size | number | – | Records per batch (future: batch API support) (default: 1) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Preview import without sending requests (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
invoices ~466
Get, create, and update invoices
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
invoices_create ~170
Creates one or more sales invoices or purchase bills. Optional: summarizeErrors (default: false), unitdp, Invoices (plus 2 more). Returns the updated Invoices.
| Name | Type | Req | Description |
|---|---|---|---|
| Invoices | string | – | Invoices |
| Warnings | string | – | Displays array of warning messages from the API |
| pagination-item-count | number | – | Item count |
| pagination-page | number | – | Page |
| pagination-page-count | number | – | Page count |
| pagination-page-size | number | – | Page size |
| summarizeErrors | boolean | – | If false return 200 OK and mix of successfully created objects and any with validation errors |
| unitdp | number | – | e.g. unitdp=4 – (Unit Decimal Places) You can opt in to use four decimal places for unit amounts |
No output schema declared.
No examples provided.
invoices_get ~314
Retrieves sales invoices or purchase bills. Optional: where, order, IDs (plus 10 more). Returns the Invoices.
| Name | Type | Req | Description |
|---|---|---|---|
| ContactIDs | string | – | Filter by a comma-separated list of ContactIDs. |
| IDs | string | – | Filter by a comma-separated list of InvoicesIDs. |
| InvoiceNumbers | string | – | Filter by a comma-separated list of InvoiceNumbers. |
| Statuses | string | – | Filter by a comma-separated list Statuses. |
| createdByMyApp | boolean | – | When set to true you'll only retrieve Invoices created by your app |
| includeArchived | boolean | – | e.g. includeArchived=true - Invoices with a status of ARCHIVED will be included in the response |
| order | string | – | Order by an any element |
| page | number | – | e.g. page=1 – Up to 100 invoices will be returned in a single API call with line items shown for each invoice |
| pageSize | number | – | Number of records to retrieve per page |
| searchTerm | string | – | Search parameter that performs a case-insensitive text search across the fields e.g. InvoiceNumber, Reference. |
| summaryOnly | boolean | – | Use summaryOnly=true in GET Contacts and Invoices endpoint to retrieve a smaller version of the response object. |
| unitdp | number | – | e.g. unitdp=4 – (Unit Decimal Places) You can opt in to use four decimal places for unit amounts |
| where | string | – | Filter by an any element |
No output schema declared.
No examples provided.
invoices_get-invoiceid ~86
Retrieves a specific sales invoice or purchase bill using a unique invoice Id. Required: InvoiceID. Optional: unitdp. Returns the Invoices.
| Name | Type | Req | Description |
|---|---|---|---|
| InvoiceID | string | yes | Unique identifier for an Invoice |
| unitdp | number | – | e.g. unitdp=4 – (Unit Decimal Places) You can opt in to use four decimal places for unit amounts |
No output schema declared.
No examples provided.
invoices_history ~466
Get and create history for invoices
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
invoices_history_create-invoice ~59
Creates a history record for a specific invoice. Required: InvoiceID. Optional: HistoryRecords. Returns array of HistoryRecord.
| Name | Type | Req | Description |
|---|---|---|---|
| HistoryRecords | string | – | History records |
| InvoiceID | string | yes | Unique identifier for an Invoice |
No output schema declared.
No examples provided.
invoices_history_get-invoice ~43
Retrieves history records for a specific invoice. Required: InvoiceID. Returns array of HistoryRecord.
| Name | Type | Req | Description |
|---|---|---|---|
| InvoiceID | string | yes | Unique identifier for an Invoice |
No output schema declared.
No examples provided.
invoices_update ~158
Updates a specific sales invoices or purchase bills. Required: InvoiceID. Optional: unitdp, Invoices, Warnings (plus 1 more). Returns the new Invoices.
| Name | Type | Req | Description |
|---|---|---|---|
| InvoiceID | string | yes | Unique identifier for an Invoice |
| Invoices | string | – | Invoices |
| Warnings | string | – | Displays array of warning messages from the API |
| pagination-item-count | number | – | Item count |
| pagination-page | number | – | Page |
| pagination-page-count | number | – | Page count |
| pagination-page-size | number | – | Page size |
| unitdp | number | – | e.g. unitdp=4 – (Unit Decimal Places) You can opt in to use four decimal places for unit amounts |
No output schema declared.
No examples provided.
invoices_update-or-create ~174
Updates or creates one or more sales invoices or purchase bills. Optional: summarizeErrors (default: false), unitdp, Invoices (plus 2 more). Returns the new Invoices.
| Name | Type | Req | Description |
|---|---|---|---|
| Invoices | string | – | Invoices |
| Warnings | string | – | Displays array of warning messages from the API |
| pagination-item-count | number | – | Item count |
| pagination-page | number | – | Page |
| pagination-page-count | number | – | Page count |
| pagination-page-size | number | – | Page size |
| summarizeErrors | boolean | – | If false return 200 OK and mix of successfully created objects and any with validation errors |
| unitdp | number | – | e.g. unitdp=4 – (Unit Decimal Places) You can opt in to use four decimal places for unit amounts |
No output schema declared.
No examples provided.
items ~468
Get, create, update, and delete items
| Name | Type | Req | Description |
|---|---|---|---|
| agent | boolean | – | Set all agent-friendly defaults (--json --compact --no-input --no-color --yes) (default: false) |
| allow-partial-failure | boolean | – | Downgrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false) |
| compact | boolean | – | Return only key fields (id, name, status, timestamps) for minimal token usage (default: false) |
| csv | boolean | – | Output as CSV (table and array responses) (default: false) |
| data-source | string | – | Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto) |
| dry-run | boolean | – | Show request without sending (default: false) |
| human-friendly | boolean | – | Enable colored output and rich formatting (default: false) |
| idempotent | boolean | – | Treat already-existing create results as a successful no-op (default: false) |
| ignore-missing | boolean | – | Treat missing delete targets as a successful no-op (default: false) |
| json | boolean | – | Output as JSON (default: false) |
| max-age | string | – | Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s) |
| no-cache | boolean | – | Bypass response cache (default: false) |
| no-color | boolean | – | Disable colored output (default: false) |
| no-input | boolean | – | Disable all interactive prompts (for CI/agents) (default: false) |
| plain | boolean | – | Output as plain tab-separated text (default: false) |
| quiet | boolean | – | Bare output, one value per line (default: false) |
| rate-limit | number | – | Max requests per second (0 to disable) (default: 0) |
| select | string | – | Comma-separated fields to include in output (e.g. --select id,name,status) |
| timeout | string | – | Request timeout (default: 1m0s) |
| yes | boolean | – | Skip confirmation prompts (for agents and scripts) (default: false) |
No output schema declared.
No examples provided.
How do I install the Xero MCP server?
Xero MCP ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 0f76db6c0f3b84be5dc85cc050ed0d18b2bf625f137660739eae0b9b9df87fb9; the commands to do that are on this page. If it does not match, do not open it.
mcpb · xero-mcp.mcpb
Download bundleCheck the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.
SHA-256
0f76db6c0f3b84be5dc85cc050ed0d18b2bf625f137660739eae0b9b9df87fb9
macOS / Linux
echo "0f76db6c0f3b84be5dc85cc050ed0d18b2bf625f137660739eae0b9b9df87fb9 xero-mcp.mcpb" | shasum -a 256 -c
Windows (PowerShell)
(Get-FileHash -Algorithm SHA256 .\xero-mcp.mcpb).Hash -eq "0f76db6c0f3b84be5dc85cc050ed0d18b2bf625f137660739eae0b9b9df87fb9"
Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.
What is the Xero MCP server?
Xero MCP is listed in the public MCP registry as io.github.Servosity/xero-mcp. Every Xero Accounting read plus a local SQLite ledger - aging, reconciliation, and GL tie-out. This page covers its MCPB bundle (https://github.com/Servosity/msp-skills/releases/download/xero-v0.1.9/xero-mcp.mcpb).
Is the Xero MCP server safe to use?
Xero MCP scores 51 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Xero MCP server expose?
Xero MCP exposes 75 tools: accounts, accounts_create, accounts_delete, accounts_get, accounts_get-accountid, and 70 more. Their descriptions and schemas cost roughly 23,307 tokens of context every time the server is loaded.
What licence is the Xero MCP server under?
Xero MCP declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.