xero-oauth-mcp-server
This is an MCP server that lets you interact with Xero accounting data across multiple organisations using natural-language tool calls.
Organisations & accounts: list connected orgs, choose the default org, and list the chart of accounts.
Contacts: list/search contacts, get a contact by ID, create new contacts, and update or archive existing contacts.
Invoices: list/search invoices, get invoice details by ID or number, list overdue sales invoices, and list recurring invoice templates.
Create & update invoices: create sales invoices (ACCREC) or bills (ACCPAY) with line items, and update invoices (status, reference, due date, line items).
PDFs: get a single invoice PDF or download multiple invoice PDFs (per the README capabilities).
Org targeting: every tool accepts an optional
orgargument resolved by alias, tenantId, or name substring.Safety controls: optional read-only mode disables all write tools, and write operations are clearly marked.
Provides tools for managing Xero contacts, invoices, and accounts, supporting multiple organisations.
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-oauth-mcp-server list my overdue invoices"
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-oauth-mcp-server
A custom Model Context Protocol server for
Xero, using the standard OAuth2 authorization-code + refresh-token flow
(no paid Custom Connection required). Supports multiple connected
organisations (tenants) — every tool takes an optional org argument.
Capabilities
Contacts:
list_contacts,get_contact,create_contact,update_contactInvoices:
list_invoices,get_invoice,get_invoice_pdf,download_invoice_pdfs,create_invoice,update_invoice,list_overdue_invoices,list_recurring_invoicesUtility:
list_organisations,list_accounts
Related MCP server: Xero MCP Server
How org selection works
Each tool accepts an optional org. It is resolved (case-insensitive) against:
an alias from
XERO_ORG_ALIASES(e.g.main→ a tenantId),an exact
tenantId, thena substring of the org's name in Xero.
If org is omitted, the server uses XERO_DEFAULT_ORG (which may itself be an
alias), or the first connected org when that is unset.
One-time setup
1. Create a Xero app
developer.xero.com → New app → Web app.
Add redirect URI:
http://localhost:49831/callbackCopy the Client ID and generate a Client Secret.
Newer Xero apps use granular scopes. This server requests
accounting.contacts,accounting.invoices, andaccounting.settings.read(plusopenid profile email offline_access). Make sure those are enabled on the app.
2. Build
npm install
npm run build3. Authorize (interactive, once)
XERO_CLIENT_ID=xxx XERO_CLIENT_SECRET=yyy npm run authA browser opens — log in and authorize each organisation you want to use
(re-run to add more later). The refresh token and the connected tenant list are
saved to ~/.xero-mcp-id/tokens.json (chmod 600). The refresh token rotates
automatically on every use.
4. Register with an MCP client
Example (Claude Code):
claude mcp add xero -s user \
-e XERO_CLIENT_ID=xxx \
-e XERO_CLIENT_SECRET=yyy \
-e XERO_DEFAULT_ORG=main \
-e XERO_ORG_ALIASES='{"main":"<tenant-guid>","secondary":"<tenant-guid>"}' \
-- node /absolute/path/to/dist/index.jsEnvironment variables
Var | Default | Purpose |
| — | App credentials (required) |
| first org | Org used when a tool omits |
|
| JSON map of friendly alias → tenantId |
|
| Local callback port (must match the app's redirect URI) |
|
| Where the PDF tools save files when no path is given |
| unset | When |
|
| Where the token store lives |
Security
No credentials or tokens are stored in this repository.
Client ID/secret are passed via environment; the refresh token + tenant list live only in
XERO_TOKEN_DIR(default~/.xero-mcp-id/, chmod 600), which is git-ignored.Write tools (
create_*/update_*) can be globally disabled withXERO_READONLY=true.
License
MIT
Available Tools
12 toolscreate_contactC
[WRITE] Create a new contact.
Inputs: name (required), org, firstName, lastName, +3 more.
create_invoiceB
[WRITE] Create an invoice (sales ACCREC by default). Defaults to DRAFT status.
Inputs: lineItems (required), org, type, contactId, +7 more.
get_contactA
Get a single contact by its contactID.
Inputs: contactId (required), org.
get_invoiceA
Get a single invoice (with line items) by invoiceID or invoice number.
Inputs: org, invoiceId, invoiceNumber.
list_accountsA
List the chart of accounts (codes, names, types, tax types) for an org — useful before creating invoices.
Inputs: org, where.
list_contactsB
List/search contacts in an org.
Inputs: org, searchTerm, where, page, +1 more.
list_invoicesC
List/search invoices in an org. Filter by status, contact, invoice number, or a raw Xero filter.
Inputs: org, statuses, contactIds, invoiceNumbers, +3 more.
list_organisationsA
List the connected Xero organisations (orgs) and the default one.
Inputs: no named parameters.
list_overdue_invoicesA
List overdue sales (ACCREC) invoices: AUTHORISED, past due date, with an outstanding balance.
Inputs: org, order.
list_recurring_invoicesC
List repeating (recurring) invoice templates in an org.
Inputs: org, where, order.
update_contactA
[WRITE] Update an existing contact (only supplied fields change).
Inputs: contactId (required), org, name, firstName, +5 more.
update_invoiceB
[WRITE] Update an invoice by invoiceID (e.g. change status, reference, due date, or line items).
Inputs: invoiceId (required), org, status, reference, +4 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Each tool targets a distinct resource and action (contact, invoice, accounts, etc.). Even specialized invoice tools like list_overdue_invoices and list_recurring_invoices have clear names that prevent ambiguity.
All tools follow a consistent verb_noun pattern (create_*, get_*, list_*, update_*), making it predictable and easy for an agent to infer purpose from the name.
With 12 tools covering core CRUD for contacts and invoices plus useful listing filters, the set is well-scoped for a Xero accounting API server—neither too sparse nor too overwhelming.
Covers the main workflows for contacts and invoices (create, read, update, list) with additional filters. Missing delete operations and account creation/update, but these are often handled externally or are less critical for basic usage.
Maintenance
Related MCP Connectors
Connect Xero to AI agents with secure read or write access across multiple organisations.
Query and export Xero finance data and prepare accounting drafts in your xpnAI Workspace.
Accounts receivable automation for Xero and QuickBooks Online, inside your AI assistant. Ask Claude, ChatGPT or any MCP client for a receivables summary, find customers and invoices, read the email and SMS replies your customers sent, and see what Paidnice sent or skipped. Ask why a reminder, late fee or statement did or did not go out, and update a customer's contact people straight into your ledger. Secure OAuth sign-in. One connection covers every organisation you tick, with Read or Read and Write access.
AI accounting: ask about your live AccountsOS books in plain English. Read-only tools for transactions, cash balances, invoices, bills, VAT, filing deadlines and reports across 32 countries. OAuth sign-in; free 14-day trial at accounts-os.com.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables interaction with Xero accounting software to create and manage invoices, bills, expenses, and expense claims with file attachments through PKCE authentication.211MIT
- AlicenseAqualityBmaintenanceEnables interaction with the Xero Accounting API to manage contacts, invoices, payments, accounts, and financial reports. It provides a suite of tools for natural language access to accounting records and business performance data.201Apache 2.0
- -licenseNot gradedqualityDmaintenanceEnables interaction with Xero accounting API for financial reporting, sales analysis, grant tracking, and bill management using natural language.1-
- AlicenseNot gradedqualityDmaintenanceAn enhanced MCP server for Xero, enabling natural language interaction with your Xero organisation for accounting tasks like invoices, contacts, bank transactions, and payroll.MIT