@velocitysoft/xero-mcp-server
v1.0.20
Published
MCP server implementation for Xero integration
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/
Currently the following scopes are required for all 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", "@xeroapi/xero-mcp-server@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", "@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.attachments
accounting.attachments.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
files
files.read
payroll.settings
payroll.employees
payroll.timesheetsAvailable MCP Commands
list-accounts: Retrieve a list of accountslist-attachments: Retrieve attachments for a supported Xero objectlist-contacts: Retrieve a list of contacts from Xerolist-credit-notes: Retrieve a list of credit noteslist-file-folders: Retrieve folders from Xero Files, including the Inbox folder metadatalist-files: Retrieve files from Xero Fileslist-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 transactionadd-attachment: Upload an attachment to a supported Xero objectassociate-file: Associate a Xero Files document with a Xero objectcreate-contact: Create a new contactcreate-credit-note: Create a new credit notecreate-file-folder: Create a folder in Xero Filescreate-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 optionupload-file: Upload a file to Xero Files. If no folder is specified the file appears in Archive in the Xero UI; direct Inbox uploads are not supportedupdate-bank-transaction: Update an existing bank transactionapprove-invoice: Approve an invoice or bill by setting it toAUTHORISEDemail-invoice: Send an approved invoice to the related contact by emailapprove-and-email-invoice: Approve an invoice and send it by email in one stepupdate-contact: Update an existing contactupdate-file: Update a Xero Files documentupdate-file-folder: Update a Xero Files folderupdate-invoice-fields: Update specific invoice or bill fields such as due date without sending line itemsupdate-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-file: Delete a Xero Files documentdelete-file-folder: Delete a Xero Files folderdelete-payroll-timesheet: Delete an existing Payroll Timesheetremove-file-association: Remove an association between a Xero Files document and a Xero objectget-attachment: Retrieve the contents of an accounting attachmentget-file: Retrieve the contents of a Xero Files documentget-payroll-timesheet: Retrieve an existing Payroll Timesheet
Files and Attachments Notes
list-attachments,add-attachment, andget-attachmentall work for both sales invoices (ACCREC) and bills (ACCPAY) by usingobjectType: Invoices.add-attachmentandupload-fileboth accept base64 content or an absolute localfilePath. If bothfilePathandfileContentare provided,filePathtakes precedence.- If
contentTypeis omitted while usingfilePath, the server attempts to infer the MIME type from the file extension. add-attachmentattaches a file to a specific Xero object, whileupload-filestores a standalone document in Xero Files.get-attachmentandget-filereturn base64 content and responses can be large.list-filescan be filtered byfolderId.upload-fileworks best with an explicit non-InboxfolderIdfor reliable placement. Prefer creating a named folder such asInvoicesand uploading directly to it. If no folder is specified, files may land in Archive rather than Inbox in the Xero UI.update-filecan rename a file and move it between folders.delete-filepermanently deletes the file.list-file-foldersreturns the Inbox plus any custom folders.update-file-folderrenames a folder only.delete-file-foldercannot delete the Inbox folder.
Contact Notes
- Xero contacts do expose
SupplierandCustomerflags, but Xero marks both as read-only. Supplieris automatically set by Xero once the contact has AP activity such as bills.Customeris automatically set by Xero once the contact has AR activity such as sales invoices.create-contactandupdate-contactdo not accept writable supplier or customer fields because Xero will reject them.list-contacts,create-contact, andupdate-contactsurface the current contact role in MCP responses when Xero returns it.
Invoice Workflow Notes
list-invoicessupports server-sidestatusesfiltering, for example["DRAFT"], so you can page only through draft invoices instead of all invoices.approve-invoicesets a DRAFT or SUBMITTED invoice or bill toAUTHORISED.email-invoiceuses Xero's invoice email endpoint and requires the invoice to already be approved and the related contact to have an email address.approve-and-email-invoiceapproves a DRAFT or SUBMITTED invoice first, then emails it in the same MCP action.update-invoice-fieldssupports targeted top-level invoice changes such asdueDate,date,reference,contactId,expectedPaymentDate, andplannedPaymentDatewithout sending line items.update-invoiceremains the draft-only tool for full invoice edits where line items are being changed.
For detailed API documentation, please refer to the MCP Protocol Specification.
For Developers
Installation
# Using npm
npm install
# Using pnpm
pnpm installRun a build
# Using npm
npm run build
# Using pnpm
pnpm buildIntegrating 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.)
