Connect to Xero Accounting Data
MCP server for Xero: manage contacts, invoices, payments, reports, and payroll timesheets via OAuth2 or bearer token.
Why it matters
Integrate with Xero's accounting and business functions to standardize access to financial data. This MCP server acts as a bridge, enabling seamless interaction with Xero's API for various business operations.
Outcomes
What it gets done
Access Xero contacts, invoices, and credit notes.
Retrieve financial reports like profit and loss and balance sheets.
Manage organization details and chart of accounts.
Utilize Xero OAuth2 for secure authentication.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/vb-xero-mcp-server | bash Capabilities
Tools your agent gets
Get a list of accounts from Xero
Get a list of contacts from Xero
Get a list of credit notes from Xero
Get a list of invoices from Xero
Get a list of items from Xero
Get organization details from Xero
Get profit and loss report from Xero
Get a list of quotes from Xero
Overview
Xero-mcp-server MCP Server
An MCP server for Xero exposing read and write access to accounts, invoices, payments, financial reports, and UK/NZ payroll timesheets via OAuth2 Custom Connections or a bearer token. Use to read or manage Xero accounting and payroll data. Many commands write real financial data - test against Xero's free Demo Company first, and never commit credentials to version control.
What it does
Xero MCP Server bridges the MCP protocol to Xero's accounting API, giving AI assistants standardized access to Xero's accounting and business features. It provides list commands for reading data - accounts, contacts, credit notes, invoices, items, manual journals, organisation details, profit and loss, quotes, tax rates, payments, trial balance, bank transactions, aged receivables/payables by contact, contact groups, and tracking categories - and payroll-specific reads (employees, leave records/balances/types, leave periods, timesheets), which require a NZ or UK region. Create/update commands cover bank transactions, contacts, credit notes, invoices, items, manual journals, payments, quotes, tracking categories/options, and payroll timesheets (create, update a line, add a line, approve, revert, delete, retrieve).
Authentication supports two modes: Custom Connections (recommended for development and third-party MCP clients like Claude Desktop - configure a Xero client ID and secret scoped to one organisation) or a Bearer Token (better for supporting multiple Xero accounts at runtime, where the MCP client itself handles an OAuth flow like PKCE; the bearer token takes precedence over client ID if both are set). Custom Connection scope requirements differ by creation date - connections made before April 29, 2026 use a bundled SCOPES_V1 permission set, connections from that date onward use granular SCOPES_V2, and the server automatically tries V1 first and falls back to V2 (overridable via the XERO_SCOPES environment variable).
{
"mcpServers": {
"xero": {
"command": "npx",
"args": ["-y", "@xeroapi/xero-mcp-server@latest"],
"env": {
"XERO_CLIENT_ID": "your_client_id_here",
"XERO_CLIENT_SECRET": "your_client_secret_here",
"XERO_SCOPES": "accounting.invoices accounting.contacts accounting.settings"
}
}
}
}
When to use - and when NOT to
Use this connector when you want Claude to read or manage Xero accounting data - pulling financial reports, managing contacts and invoices, reconciling bank transactions, or handling payroll timesheets for a UK/NZ organisation.
Many commands write real financial and payroll data (create-invoice, create-payment, approve-payroll-timesheet, delete-payroll-timesheet) - Xero explicitly recommends starting with a free-trial Demo Company (pre-loaded with sample data, resettable at any time) rather than a live organisation while testing. Never commit the .env file containing XERO_CLIENT_SECRET or a bearer token to version control. Some scopes (accounting.transactions, accounting.reports.read) are deprecated in favor of more granular replacements, so check current scope requirements before configuring a new connection.
Capabilities
Read: accounts, contacts, invoices, credit notes, items, manual journals, quotes, payments, tax rates, bank transactions, financial reports (P&L, balance sheet, trial balance, aged receivables/payables), tracking categories, and full payroll data. Write: create/update contacts, invoices, credit notes, items, manual journals, payments, quotes, bank transactions, tracking categories, and payroll timesheets including approval and reversal.
How to install
Requires Node.js 18+ and a Xero developer account (free trial available). Configure via npx (npx -y @xeroapi/xero-mcp-server@latest) in Claude Desktop's claude_desktop_config.json with either XERO_CLIENT_ID/XERO_CLIENT_SECRET (Custom Connections, set up per Xero's OAuth2 custom-connections guide) or XERO_CLIENT_BEARER_TOKEN, plus optional XERO_SCOPES. For local development, clone the repo, npm install or pnpm install, npm run build, then point Claude Desktop's config at the built dist/index.js.
Who it's for
Accountants, bookkeepers, and business teams using Xero who want Claude to read financial reports and manage contacts, invoices, payments, and payroll timesheets directly.
Source README
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.
Features
- Xero OAuth2 authentication with custom connections
- Contact management
- Chart of Accounts management
- Invoice creation and management
- MCP protocol compliance
Prerequisites
- Node.js (v18 or higher)
- npm or pnpm
- A Xero developer account with API credentials
Docs and Links
- Xero Public API Documentation
- Xero API Explorer
- Xero OpenAPI Specs
- Xero-Node Public API SDK Docs
- Developer Documentation
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/
Required Scopes
Custom connections require different scopes depending on when they were created. All scopes in the relevant list must be added to your custom connection:
| Custom Connection Created | Required Scopes |
|---|---|
| Before Apr 29, 2026 | SCOPES_V1 (bundled permissions) |
| From Apr 29, 2026 | SCOPES_V2 (granular permissions) |
Note: The MCP server automatically tries V1 scopes first and falls back to V2 if needed.
You can override these by setting the
XERO_SCOPESenvironment variable to a space-separated list of 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", "@xeroapi/xero-mcp-server@latest"],
"env": {
"XERO_CLIENT_ID": "your_client_id_here",
"XERO_CLIENT_SECRET": "your_client_secret_here",
"XERO_SCOPES": "accounting.invoices accounting.contacts accounting.settings"
}
}
}
}
The XERO_SCOPES variable is optional. If omitted, the default scopes listed above will be used.
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", "@xeroapi/xero-mcp-server@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.
Required Scopes for Bearer Token
When obtaining a bearer token, you must request the appropriate scopes. The scopes you request should be:
Note: Some scopes are being deprecated in favour of more granular scopes. See the Xero OAuth 2.0 Scopes documentation for details on deprecation timelines.
accounting.transactions (Deprecated)
accounting.transactions.read (Deprecated)
accounting.invoices
accounting.invoices.read
accounting.payments
accounting.payments.read
accounting.banktransactions
accounting.banktransactions.read
accounting.manualjournals
accounting.manualjournals.read
accounting.reports.read (Deprecated)
accounting.reports.aged.read
accounting.reports.balancesheet.read
accounting.reports.profitandloss.read
accounting.reports.trialbalance.read
accounting.contacts
accounting.settings
payroll.settings
payroll.employees
payroll.timesheets
Available MCP Commands
list-accounts: Retrieve a list of accountslist-contacts: Retrieve a list of contacts from Xerolist-credit-notes: Retrieve a list of credit noteslist-invoices: Retrieve a list of invoiceslist-items: Retrieve a list of itemslist-manual-journals: Retrieve a list of manual journalslist-organisation-details: Retrieve details about an organisationlist-profit-and-loss: Retrieve a profit and loss reportlist-quotes: Retrieve a list of quoteslist-tax-rates: Retrieve a list of tax rateslist-payments: Retrieve a list of paymentslist-trial-balance: Retrieve a trial balance reportlist-bank-transactions: Retrieve a list of bank account transactionslist-payroll-employees: Retrieve a list of Payroll Employeeslist-report-balance-sheet: Retrieve a balance sheet reportlist-payroll-employee-leave: Retrieve a Payroll Employee's leave recordslist-payroll-employee-leave-balances: Retrieve a Payroll Employee's leave balanceslist-payroll-employee-leave-types: Retrieve a list of Payroll leave typeslist-payroll-leave-periods: Retrieve a list of a Payroll Employee's leave periodslist-payroll-leave-types: Retrieve a list of all available leave types in Xero Payrolllist-timesheets: Retrieve a list of Payroll Timesheetslist-aged-receivables-by-contact: Retrieves aged receivables for a contactlist-aged-payables-by-contact: Retrieves aged payables for a contactlist-contact-groups: Retrieve a list of contact groupslist-tracking-categories: Retrieve a list of tracking categoriescreate-bank-transaction: Create a new bank transactioncreate-contact: Create a new contactcreate-credit-note: Create a new credit notecreate-invoice: Create a new invoicecreate-item: Create a new itemcreate-manual-journal: Create a new manual journalcreate-payment: Create a new paymentcreate-quote: Create a new quotecreate-payroll-timesheet: Create a new Payroll Timesheetcreate-tracking-category: Create a new tracking categorycreate-tracking-option: Create a new tracking optionupdate-bank-transaction: Update an existing bank transactionupdate-contact: Update an existing contactupdate-invoice: Update an existing draft invoiceupdate-item: Update an existing itemupdate-manual-journal: Update an existing manual journalupdate-quote: Update an existing draft quoteupdate-credit-note: Update an existing draft credit noteupdate-tracking-category: Update an existing tracking categoryupdate-tracking-options: Update tracking optionsupdate-payroll-timesheet-line: Update a line on an existing Payroll Timesheetapprove-payroll-timesheet: Approve a Payroll Timesheetrevert-payroll-timesheet: Revert an approved Payroll Timesheetadd-payroll-timesheet-line: Add new line on an existing Payroll Timesheetdelete-payroll-timesheet: Delete an existing Payroll Timesheetget-payroll-timesheet: Retrieve an existing Payroll Timesheet
For detailed API documentation, please refer to the MCP Protocol Specification.
For Developers
Installation
# Using npm
npm install
# Using pnpm
pnpm install
Run a build
# Using npm
npm run build
# Using pnpm
pnpm 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"
}
}
}
}
Security
Please do not commit your .env file or any sensitive credentials to version control (it is included in .gitignore as a safe default.)
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.