Xero MCP Server
This is a Model Context Protocol (MCP) server implementation for Xero. It provides a bridge between the MCP protocol and Xero's API, allowing for standardized access to Xero's accounting and business features.
Provenance
This package is Mindstone's maintained build of Xero's community Xero MCP server, announced on the Xero Developer Blog and developed upstream at XeroAPI/xero-mcp-server. It adds improvements and hardening by Mindstone on top of the upstream project.
One-click install

After clicking the button, your host will prompt you to fill: XERO_CLIENT_ID, XERO_CLIENT_SECRET, XERO_CLIENT_BEARER_TOKEN.
Manual config for Claude Desktop / Claude Code / Goose / Continue.dev (Xero)
{
"mcpServers": {
"Xero": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-xero"
],
"env": {
"XERO_CLIENT_ID": "",
"XERO_CLIENT_SECRET": "",
"XERO_CLIENT_BEARER_TOKEN": ""
}
}
}
}
Features
- Xero OAuth2 authentication with custom connections
- Contact management
- Chart of Accounts management
- Invoice creation and management
- MCP protocol compliance
Prerequisites
- Node.js (v20 or higher)
- npm or pnpm
- A Xero developer account with API credentials
Docs and Links
Setup
Create a Xero Account
If you don't already have a Xero account and organisation already, can create one by signing up here using the free trial.
We recommend using a Demo Company to start with because it comes with some pre-loaded sample data. Once you are logged in, switch to it by using the top left-hand dropdown and selecting "Demo Company". You can reset the data on a Demo Company, or change the country, at any time by using the top left-hand dropdown and navigating to My Xero.
NOTE: To use Payroll-specific queries, the region should be either NZ or UK.
Authentication
There are 2 modes of authentication supported in the Xero MCP server:
1. Custom Connections
This is a better choice for testing and development which allows you to specify client id and secrets for a specific organisation.
It is also the recommended approach if you are integrating this into 3rd party MCP clients such as Claude Desktop.
Configuring your Xero Developer account
Set up a Custom Connection following these instructions: https://developer.xero.com/documentation/guides/oauth2/custom-connections/
Currently the following scopes are required for Custom Connection sessions: scopes
Integrating the MCP server with Claude Desktop
To add the MCP server to Claude go to Settings > Developer > Edit config and add the following to your claude_desktop_config.json file:
{
"mcpServers": {
"xero": {
"command": "npx",
"args": ["-y", "@mindstone/mcp-server-xero@latest"],
"env": {
"XERO_CLIENT_ID": "your_client_id_here",
"XERO_CLIENT_SECRET": "your_client_secret_here"
}
}
}
}
NOTE: If you are using Node Version Manager "command": "npx" section change it to be the full path to the executable, ie: your_home_directory/.nvm/versions/node/v22.14.0/bin/npx on Mac / Linux or "your_home_directory\\.nvm\\versions\\node\\v22.14.0\\bin\\npx" on Windows
2. Bearer Token
This is a better choice if you are to support multiple Xero accounts at runtime and allow the MCP client to execute an auth flow (such as PKCE) as required.
In this case, use the following configuration:
{
"mcpServers": {
"xero": {
"command": "npx",
"args": ["-y", "@mindstone/mcp-server-xero@latest"],
"env": {
"XERO_CLIENT_BEARER_TOKEN": "your_bearer_token"
}
}
}
}
NOTE: The XERO_CLIENT_BEARER_TOKEN will take precedence over the XERO_CLIENT_ID if defined.
Available MCP Commands
Tool naming: this connector's tools use unprefixed dash-case names (e.g. list-invoices, create-contact), inherited from its fork lineage. Sibling connectors use prefixed snake_case names (e.g. list_quickbooks_invoices). In multi-server hosts, unprefixed generic names can collide with other servers' tools. Renaming would be a breaking change for existing configurations, so the names are kept as-is; if your host supports namespacing/aliasing, prefer enabling it for this server.
list-accounts: Retrieve a list of accounts
list-contacts: Retrieve a list of contacts from Xero
list-credit-notes: Retrieve a list of credit notes
list-invoices: Retrieve a list of invoices
list-items: Retrieve a list of items
list-organisation-details: Retrieve details about an organisation
list-profit-and-loss: Retrieve a profit and loss report
list-bank-summary: Retrieve the bank summary report (per-account balances and movements)
list-budget-summary: Retrieve the budget summary report (budget vs actuals)
list-executive-summary: Retrieve the executive summary report (key financial metrics snapshot)
list-quotes: Retrieve a list of quotes
list-tax-rates: Retrieve a list of tax rates
list-payments: Retrieve a list of payments
list-trial-balance: Retrieve a trial balance report
list-profit-and-loss: Retrieve a profit and loss report
list-bank-transactions: Retrieve a list of bank account transactions
list-payroll-employees: Retrieve a list of Payroll Employees
list-report-balance-sheet: Retrieve a balance sheet report
list-payroll-employee-leave: Retrieve a Payroll Employee's leave records
list-payroll-employee-leave-balances: Retrieve a Payroll Employee's leave balances
list-payroll-employee-leave-types: Retrieve a list of Payroll leave types
list-payroll-leave-periods: Retrieve a list of a Payroll Employee's leave periods
list-payroll-leave-types: Retrieve a list of all avaliable leave types in Xero Payroll
list-aged-receivables-by-contact: Retrieves aged receivables for a contact
list-aged-payables-by-contact: Retrieves aged payables for a contact
list-contact-groups: Retrieve a list of contact groups
list-currencies: Retrieve currencies enabled in the connected Xero organisation
list-invoice-attachments: Retrieve files attached to a Xero invoice
list-purchase-orders: Retrieve a list of purchase orders
create-contact: Create a new contact
create-credit-note: Create a new credit note
create-invoice: Create a new invoice. Supports optional currencyCode, such as USD, when that currency is enabled in the connected Xero organisation.
create-payment: Create a new payment
create-quote: Create a new quote
create-purchase-order: Create a new purchase order
create-credit-note: Create a new credit note
create-payroll-timesheet: Create a new Payroll Timesheet
update-contact: Update an existing contact
update-invoice: Update an existing draft invoice. Supports optional currencyCode, such as USD, when that currency is enabled in the connected Xero organisation.
update-quote: Update an existing draft quote
update-credit-note: Update an existing draft credit note
get-invoice-history: Retrieve the history records for an invoice
add-invoice-note: Add an immutable note to an invoice history
get-contact-history: Retrieve the history records for a contact
add-contact-note: Add an immutable note to a contact history
get-credit-note-history: Retrieve the history records for a credit note
add-credit-note-note: Add an immutable note to a credit note history
get-bank-transaction-history: Retrieve the history records for a bank transaction
add-bank-transaction-note: Add an immutable note to a bank transaction history
get-quote-history: Retrieve the history records for a quote
add-quote-note: Add an immutable note to a quote history
update-payroll-timesheet-line: Update a line on an existing Payroll Timesheet
approve-payroll-timesheet: Approve a Payroll Timesheet
revert-payroll-timesheet: Revert an approved Payroll Timesheet
add-payroll-timesheet-line: Add new line on an existing Payroll Timesheet
delete-payroll-timesheet: Delete an existing Payroll Timesheet
get-payroll-timesheet: Retrieve an existing Payroll Timesheet
email-invoice: Email a copy of an AUTHORISED invoice to its related contact
For detailed API documentation, please refer to the MCP Protocol Specification.
For Developers
Installation
Run a build
Integrating with Claude Desktop
To link your Xero MCP server in development to Claude Desktop go to Settings > Developer > Edit config and add the following to your claude_desktop_config.json file:
NOTE: For Windows ensure the args path escapes the \ between folders ie. "C:\\projects\xero-mcp-server\\dist\\index.js"
{
"mcpServers": {
"xero": {
"command": "node",
"args": ["insert-your-file-path-here/xero-mcp-server/dist/index.js"],
"env": {
"XERO_CLIENT_ID": "your_client_id_here",
"XERO_CLIENT_SECRET": "your_client_secret_here"
}
}
}
}
License
MIT
Security
Please do not commit your .env file or any sensitive credentials to version control (it is included in .gitignore as a safe default.)