Skip to content

Connectors · Accounting & finance

Xero MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Xero and the rest of your systems. It gives your agent 191 Xero actions (116 reads, 60 writes and 15 that wait for a confirmation) and holds the Xero credential itself, so the agent never does. It paces Xero's limits and records every call. Connecting Xero needs your own Xero OAuth app and one admin sign-in.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "xero.organisation.get",  intent: "check which Xero account is connected"}# Get the organisation · read · 1 upstream call
  • 191actionsin one signed file
  • 116readlook, never change
  • 60writecreate and update
  • 15wait for a yesdestructive, confirmed first

Set up

Connect Xero in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect Xero.

    OAuth 2.0, authorization code with PKCE. You register your own OAuth app with Xero, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on. actionlake stores what you paste write-only, sealed under your tenant's key.

    Before the first sign-in, Xero needs an OAuth app of your own, registered in its developer portal. actionlake has no Xero app to lend you.

    • access_tokenAccess token from one sign-in with your own OAuth app
    • refresh_tokenRefresh token from the same sign-in; the access token is renewed from it
    • client_idYour OAuth app's client id
    • client_secretYour OAuth app's client secret

    Found for you at connect: the organisations, sites or workspaces the credential can reach. Each one is its own connection.

    account { op: "connections.requirements", service: "xero" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "xero.organisation.get" }# get the organisation · read · 1 upstream callcheck { action: "xero.invoices.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

Xero at a glance

Sign-in
OAuth 2.0, authorization code with PKCE. You register your own OAuth app with Xero, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on.
You provide
access_tokenrefresh_tokenclient_idclient_secret
Found for you
the organisations, sites or workspaces the credential can reach
Limits we pace to
60 calls a minute and 5,000 a day, at most 5 at a time, per connection
API covered
Xero Accounting API 2.0api.xero.com/api.xro/2.0
Built from
Xero's documentation, read 14 September 2026OpenAPI spec (GitHub)developer.xero.com
Service file
Version 4.0.0, signed (Ed25519)
Cached reads
116 of 116 reads, for up to an hour; a write clears what it affects
Ready-made plans
8 in the store
Shared entities
14, so ask can line Xero up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in Xero.

191 actions in 13 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 116readlook, never change
  • 60writecreate and update
  • 15destructivewait for a confirmation
  1. Invoicing

    31

    19 read · 10 write · 2 destructive

    List invoices · List credit notes · List repeating invoices · Create an invoice

  2. Payments

    26

    13 read · 8 write · 5 destructive

    List payments · List batch payments · Create a batch payment · Record a payment against an invoice

  3. Settings

    23

    13 read · 8 write · 2 destructive

    List users · Get one user · List tax rates · List currencies

  4. Ledger

    18

    12 read · 5 write · 1 destructive

    List chart of accounts · Create an account · Get one account · Update an account

  5. Contacts

    17

    9 read · 6 write · 2 destructive

    List contacts · List contact groups · Create a contact · Get one contact

  6. Banking

    15

    10 read · 4 write · 1 destructive

    List bank transactions · Create a bank transaction · Get one bank transaction · Update a bank transaction

  7. Expenses

    14

    8 read · 6 write · 0 destructive

    List expense claims · Create an expense claim · List receipts · Get one expense claim

  8. Reporting

    13

    13 read · 0 write · 0 destructive

    List budgets · Get one budget · List available reports · Get aged payables for a contact

5 more areas · 34 actions
  • Purchasing 9
  • Sales 9
  • Inventory 7
  • Billing 5
  • Payroll 4

Xero's own MCP server

Xero's MCP server, or actionlake?

Xero publishes an MCP server that you run on your own machine (the @xeroapi/xero-mcp-server package), signed in with a Xero custom connection or a bearer token.

Use Xero's server when one person wants to work in Xero through a server they run on their own machine. Use actionlake when you also want Xero behind the same endpoint as your other systems: a key per agent with allowed actions and a spending cap, a named person's approval before destructive actions, a sealed record of every call, and one ask across Xero and another system.

Source: Xero's documentation, checked 22 October 2026.

Top actions

The Xero API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 111 of Xero's 116 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
xero.invoices.listList invoicesList Xero invoices and bills, filtered by status, contact, number or date.readfinance.invoice.list101 connectors
xero.payments.listList paymentsList Xero payments made against invoices, credit notes and prepayments.readfinance.payment.list75 connectors
xero.quotes.listList quotesList Xero quotes from the connected organisation, with optional where/order filtering.readfinance.quote.list52 connectors
xero.purchase_orders.listList purchase ordersList Xero purchase orders from the connected organisation, with optional where/order filtering.readfinance.purchase_order.list45 connectors
xero.contacts.listList contactsList Xero contacts from the connected organisation, with optional where/order filtering.readcrm.company.list162 connectors
xero.accounts.listList chart of accountsList Xero chart of accounts from the connected organisation, with optional where/order filtering.readfinance.ledger_account.list36 connectors
xero.credit_notes.listList credit notesList Xero credit notes from the connected organisation, with optional where/order filtering.readfinance.credit_note.list33 connectors
xero.users.listList usersList Xero users from the connected organisation, with optional where/order filtering.readidentity.user.list474 connectors
xero.invoices.createCreate an invoiceCreate a Xero sales invoice or bill against a contact, with one or more line items.writefinance.invoice.create74 connectors
xero.payments.createRecord a payment against an invoiceApply a payment to a Xero invoice or credit note from a bank account.writefinance.payment.create67 connectors
xero.batch_payments.createCreate a batch paymentCreate a new Xero batch payment in the connected organisation.destructivefinance.payment.create67 connectors
xero.quotes.createCreate a quoteCreate a new Xero quote in the connected organisation.writefinance.quote.create52 connectors

Try it

Prompts to paste into Claude.

Each one names the Xero actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    Which Xero invoices are more than 30 days overdue? Group them by customer with the total owed.

    callsxero.invoices.list

  2. Planread

    Pull the month-end financial pack in Xero.

    callsxero.organisation.getxero.reports.profit_and_lossxero.reports.balance_sheetxero.reports.trial_balancexero.reports.bank_summary+1 more

  3. Planwrite

    Set up a new customer and raise their first invoice in Xero. Ask me before anything is sent or changed.

    callsxero.contacts.createxero.contact_groups.contacts_addxero.invoices.createxero.invoices.updatexero.invoices.online_url_get+1 more

  4. Writewrite

    Create an invoice in Xero. Show me exactly what you will send before you save it.

    callsxero.invoices.create

  5. Across systemsread

    For each customer, how many invoices are in Xero and how many tickets in ConnectWise PSA?

    callsxero.invoices.listconnectwise_manage.tickets.list

Across your systems

Xero, joined to the rest of your business.

One ask fetches from Xero and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

  • For each customer, how many invoices are in Xero and how many tickets in ConnectWise PSA?

    xero.invoices.list + connectwise_manage.tickets.list, on crm.company · ConnectWise PSA

  • For each customer, how many invoices are in Xero and how many tickets in HubSpot CRM?

    xero.invoices.list + hubspot_crm.tickets.list, on crm.company · HubSpot CRM

Also mapped by other connectorsidentity.user 517crm.company 227finance.invoice 91hr.employee 63finance.payment 53finance.quote 45finance.purchase_order 35finance.ledger_account 32
ask
ask {  intent: "for each customer, how many invoices are in Xero and how many tickets in ConnectWise PSA",  steps: [    { action: "xero.invoices.list", as: "inv", input: {}, limit: 100, max_pages: 5 },    { action: "connectwise_manage.tickets.list", as: "tix", input: {}, limit: 100, max_pages: 5 },    { join: {        left: "inv",        right: "tix",        on: "crm.company",        group_by: "inv.company_name",        select: ["inv.company_name", "count(inv.id) as invoices", "count(tix.id) as tickets"]    } }  ]}
Example. Run it through check first: it validates the steps and prices them, and it is free.

The plan store

Ready-made plans for Xero.

8 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.

  1. Audit recent supplier bills and purchase orders

    Use it when Someone wants to review what has been committed and billed by suppliers over a period.

    Effect
    read
    Steps
    4 · loops
    Needs
    since
    Install
    xero-supplier-bill-audit
  2. Pull the month-end financial pack

    Use it when Someone asks for the month-end or period-end financial reports in one go.

    Effect
    read
    Steps
    6
    Needs
    from date and to date
    Install
    xero-month-end-financials
  3. Chase overdue invoices by email

    Use it when Someone wants to send payment reminders for invoices that are already overdue.

    A person decidesEmail a payment reminder for every overdue invoice listed above.

    Effect
    write
    Steps
    4 · loops
    Needs
    cutoff date
    Install
    xero-chase-overdue-invoices
  4. Archive contacts with no recent activity

    Use it when The contact list has grown stale and dormant customers should be archived.

    A person decidesArchive number of contact ids Xero contacts named by the caller. The dormant candidates and every authorised invoice were listed above — decline if any named contact still has money outstanding.

    Effect
    write
    Steps
    5 · loops
    Needs
    since and contact ids
    Install
    xero-archive-dormant-contacts
  5. Record a payment against an invoice

    Use it when A customer payment has landed and needs to be recorded against a specific invoice.

    A person decidesApply amount to invoice InvoiceNumber from Name.

    Effect
    write
    Steps
    6
    Needs
    account id, amount, date and invoice id
    Install
    xero-record-invoice-payment
  6. Set up a new customer and raise their first invoice

    Use it when A new customer needs to be created in Xero and billed for the first time.

    A person decidesApprove and email the first invoice for name totalling Total.

    Effect
    write
    Steps
    7
    Needs
    contact group id, due date, email address, line items and name
    Install
    xero-new-customer-first-invoice
  7. Turn an accepted quote into an invoice

    Use it when A customer has accepted a quote and it needs to become a real sales invoice.

    A person decidesRaise a sales invoice for Name from quote QuoteNumber.

    Effect
    write
    Steps
    7
    Needs
    due date and quote id
    Install
    xero-quote-to-invoice
  8. Void an invoice raised in error

    Use it when An invoice was raised in error and must be voided rather than edited.

    A person decidesVoid invoice InvoiceNumber for Total. Reason: reason.

    Effect
    destructive
    Steps
    5
    Needs
    invoice id and reason
    Install
    xero-void-draft-invoice
install a plan
account { op: "plans.install", slug: "xero-supplier-bill-audit" }
# then ask for it by name; a schedule can run it on a timetable

Governance for Xero

Destructive actions wait for a yes.

15 Xero actions are destructive. These are all of them:

  • Create a batch paymentxero.batch_payments.create
  • Delete a draft invoicexero.invoices.delete
  • Delete a batch paymentxero.batch_payments.delete
  • Void an invoicexero.invoices.void
  • Delete an accountxero.accounts.delete
  • Delete an itemxero.items.delete
  • Reverse a paymentxero.payments.delete
  • Delete a linked transactionxero.linked_transactions.delete
  • Create a bank transferxero.bank_transfers.create
  • Delete a tracking categoryxero.tracking_categories.delete
  • Remove one contact from a groupxero.contact_groups.contact_remove
  • Reverse a prepayment allocationxero.prepayments.allocations_delete
  • Reverse an overpayment allocationxero.overpayments.allocations_delete
  • Delete a tracking optionxero.tracking_options.delete
  • Empty a contact groupxero.contact_groups.contacts_remove_all

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

doxero.invoices.deleteconfirm_policy: human

Delete a draft invoice?

intent: the user asked me to delete a draft invoice

run suspended · waiting for a named person · key xero-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "xero-agent",  allowed_actions: ["xero.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "xero.batch_payments.create", approver: "[email protected]" },    { match: "xero.invoices.delete", approver: "[email protected]" },    { match: "xero.batch_payments.delete", approver: "[email protected]" }  ]}
Illustrative. Scoped to Xero only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What Xero costs on actionlake.

Every Xero action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Xero refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 191 Xero actions
  • 11actions pageeach page of a long list is one call
  • 116reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every Xero action.

191 actions by area: the id your agent calls, what it does, and its effect.

Invoicing31
  • xero.credit_notes.attachment_getGet one credit note attachmentread
  • xero.credit_notes.attachments_listList credit note attachmentsread
  • xero.credit_notes.createCreate a credit notewrite
  • xero.credit_notes.getGet one credit noteread
  • xero.credit_notes.history_createAdd a note to a credit notewrite
  • xero.credit_notes.history_listList credit note history and notesread
  • xero.credit_notes.listList credit notesread
  • xero.credit_notes.pdf_getGet a credit note as PDFread
  • xero.credit_notes.updateUpdate a credit notewrite
  • xero.invoice_reminders.settings_getGet invoice reminder settingsread
  • xero.invoices.attachment_getGet one invoice attachmentread
  • xero.invoices.attachments_listList invoice attachmentsread
  • xero.invoices.createCreate an invoicewrite
  • xero.invoices.deleteDelete a draft invoicedestructive
  • xero.invoices.email_sendEmail an invoice to its contactwrite
  • xero.invoices.getGet one invoiceread
  • xero.invoices.history_createAdd a note to an invoicewrite
  • xero.invoices.history_listList invoice history and notesread
  • xero.invoices.listList invoicesread
  • xero.invoices.online_url_getGet an invoice's online payment linkread
  • xero.invoices.pdf_getGet an invoice as PDFread
  • xero.invoices.updateUpdate an invoicewrite
  • xero.invoices.voidVoid an invoicedestructive
  • xero.repeating_invoices.attachment_getGet one repeating invoice attachmentread
  • xero.repeating_invoices.attachments_listList repeating invoice attachmentsread
  • xero.repeating_invoices.createCreate a repeating invoicewrite
  • xero.repeating_invoices.getGet one repeating invoiceread
  • xero.repeating_invoices.history_createAdd a note to a repeating invoicewrite
  • xero.repeating_invoices.history_listList repeating invoice history and notesread
  • xero.repeating_invoices.listList repeating invoicesread
  • xero.repeating_invoices.updateUpdate a repeating invoicewrite
Payments26
  • xero.batch_payments.createCreate a batch paymentdestructive
  • xero.batch_payments.deleteDelete a batch paymentdestructive
  • xero.batch_payments.getGet one batch paymentread
  • xero.batch_payments.history_createAdd a note to a batch paymentwrite
  • xero.batch_payments.history_listList batch payment history and notesread
  • xero.batch_payments.listList batch paymentsread
  • xero.overpayments.allocations_createAllocate an overpayment to an invoicewrite
  • xero.overpayments.allocations_deleteReverse an overpayment allocationdestructive
  • xero.overpayments.getGet one overpaymentread
  • xero.overpayments.history_createAdd a note to an overpaymentwrite
  • xero.overpayments.history_listList overpayment history and notesread
  • xero.overpayments.listList overpaymentsread
  • xero.payment_services.createAdd a payment servicewrite
  • xero.payment_services.listList payment servicesread
  • xero.payments.createRecord a payment against an invoicewrite
  • xero.payments.deleteReverse a paymentdestructive
  • xero.payments.getGet one paymentread
  • xero.payments.history_createAdd a note to a paymentwrite
  • xero.payments.history_listList payment history and notesread
  • xero.payments.listList paymentsread
  • xero.prepayments.allocations_createAllocate a prepayment to an invoicewrite
  • xero.prepayments.allocations_deleteReverse a prepayment allocationdestructive
  • xero.prepayments.getGet one prepaymentread
  • xero.prepayments.history_createAdd a note to a prepaymentwrite
  • xero.prepayments.history_listList prepayment history and notesread
  • xero.prepayments.listList prepaymentsread
Settings23
  • xero.branding_themes.getGet one branding themeread
  • xero.branding_themes.listList branding themesread
  • xero.branding_themes.payment_services_applyApply a payment service to a branding themewrite
  • xero.branding_themes.payment_services_listList a branding theme's payment servicesread
  • xero.currencies.createCreate a currencywrite
  • xero.currencies.listList currenciesread
  • xero.organisation.actions_listList organisation actionsread
  • xero.organisation.cis_settings_getGet organisation CIS settingsread
  • xero.organisation.getGet the organisationread
  • xero.setup.postPost conversion balances and setup datawrite
  • xero.tax_rates.createCreate a tax ratewrite
  • xero.tax_rates.get_by_typeGet one tax rate by tax typeread
  • xero.tax_rates.listList tax ratesread
  • xero.tracking_categories.createCreate a tracking categorywrite
  • xero.tracking_categories.deleteDelete a tracking categorydestructive
  • xero.tracking_categories.getGet one tracking categoryread
  • xero.tracking_categories.listList tracking categoriesread
  • xero.tracking_categories.updateUpdate a tracking categorywrite
  • xero.tracking_options.createAdd an option to a tracking categorywrite
  • xero.tracking_options.deleteDelete a tracking optiondestructive
  • xero.tracking_options.updateUpdate a tracking optionwrite
  • xero.users.getGet one userread
  • xero.users.listList usersread
Ledger18
  • xero.accounts.attachment_getGet one account attachmentread
  • xero.accounts.attachments_listList account attachmentsread
  • xero.accounts.createCreate an accountwrite
  • xero.accounts.deleteDelete an accountdestructive
  • xero.accounts.getGet one accountread
  • xero.accounts.listList chart of accountsread
  • xero.accounts.updateUpdate an accountwrite
  • xero.journals.getGet one journalread
  • xero.journals.get_by_numberGet one journal by numberread
  • xero.journals.listList journalsread
  • xero.manual_journals.attachment_getGet one manual journal attachmentread
  • xero.manual_journals.attachments_listList manual journal attachmentsread
  • xero.manual_journals.createCreate a manual journalwrite
  • xero.manual_journals.getGet one manual journalread
  • xero.manual_journals.history_createAdd a note to a manual journalwrite
  • xero.manual_journals.history_listList manual journal history and notesread
  • xero.manual_journals.listList manual journalsread
  • xero.manual_journals.updateUpdate a manual journalwrite
Contacts17
  • xero.contact_groups.contact_removeRemove one contact from a groupdestructive
  • xero.contact_groups.contacts_addAdd contacts to a groupwrite
  • xero.contact_groups.contacts_remove_allEmpty a contact groupdestructive
  • xero.contact_groups.createCreate a contact groupwrite
  • xero.contact_groups.getGet one contact groupread
  • xero.contact_groups.listList contact groupsread
  • xero.contact_groups.updateUpdate a contact groupwrite
  • xero.contacts.attachment_getGet one contact attachmentread
  • xero.contacts.attachments_listList contact attachmentsread
  • xero.contacts.cis_settings_getGet a contact's CIS settingsread
  • xero.contacts.createCreate a contactwrite
  • xero.contacts.getGet one contactread
  • xero.contacts.get_by_numberGet one contact by contact numberread
  • xero.contacts.history_createAdd a note to a contactwrite
  • xero.contacts.history_listList contact history and notesread
  • xero.contacts.listList contactsread
  • xero.contacts.updateUpdate a contactwrite
Banking15
  • xero.bank_transactions.attachment_getGet one bank transaction attachmentread
  • xero.bank_transactions.attachments_listList bank transaction attachmentsread
  • xero.bank_transactions.createCreate a bank transactionwrite
  • xero.bank_transactions.getGet one bank transactionread
  • xero.bank_transactions.history_createAdd a note to a bank transactionwrite
  • xero.bank_transactions.history_listList bank transaction history and notesread
  • xero.bank_transactions.listList bank transactionsread
  • xero.bank_transactions.updateUpdate a bank transactionwrite
  • xero.bank_transfers.attachment_getGet one bank transfer attachmentread
  • xero.bank_transfers.attachments_listList bank transfer attachmentsread
  • xero.bank_transfers.createCreate a bank transferdestructive
  • xero.bank_transfers.getGet one bank transferread
  • xero.bank_transfers.history_createAdd a note to a bank transferwrite
  • xero.bank_transfers.history_listList bank transfer history and notesread
  • xero.bank_transfers.listList bank transfersread
Expenses14
  • xero.expense_claims.createCreate an expense claimwrite
  • xero.expense_claims.getGet one expense claimread
  • xero.expense_claims.history_createAdd a note to an expense claimwrite
  • xero.expense_claims.history_listList expense claim history and notesread
  • xero.expense_claims.listList expense claimsread
  • xero.expense_claims.updateUpdate an expense claimwrite
  • xero.receipts.attachment_getGet one receipt attachmentread
  • xero.receipts.attachments_listList receipt attachmentsread
  • xero.receipts.createCreate a receiptwrite
  • xero.receipts.getGet one receiptread
  • xero.receipts.history_createAdd a note to a receiptwrite
  • xero.receipts.history_listList receipt history and notesread
  • xero.receipts.listList receiptsread
  • xero.receipts.updateUpdate a receiptwrite
Reporting13
  • xero.budgets.getGet one budgetread
  • xero.budgets.listList budgetsread
  • xero.reports.aged_payables_by_contactGet aged payables for a contactread
  • xero.reports.aged_receivables_by_contactGet aged receivables for a contactread
  • xero.reports.balance_sheetGet the balance sheetread
  • xero.reports.bank_summaryGet the bank summaryread
  • xero.reports.budget_summaryGet the budget summaryread
  • xero.reports.executive_summaryGet the executive summaryread
  • xero.reports.get_by_idGet a report by idread
  • xero.reports.listList available reportsread
  • xero.reports.profit_and_lossGet the profit and loss reportread
  • xero.reports.ten_ninety_nineGet the 1099 reportread
  • xero.reports.trial_balanceGet the trial balanceread
Purchasing9
  • xero.purchase_orders.attachment_getGet one purchase order attachmentread
  • xero.purchase_orders.attachments_listList purchase order attachmentsread
  • xero.purchase_orders.createCreate a purchase orderwrite
  • xero.purchase_orders.getGet one purchase orderread
  • xero.purchase_orders.history_createAdd a note to a purchase orderwrite
  • xero.purchase_orders.history_listList purchase order history and notesread
  • xero.purchase_orders.listList purchase ordersread
  • xero.purchase_orders.pdf_getGet a purchase order as PDFread
  • xero.purchase_orders.updateUpdate a purchase orderwrite
Sales9
  • xero.quotes.attachment_getGet one quote attachmentread
  • xero.quotes.attachments_listList quote attachmentsread
  • xero.quotes.createCreate a quotewrite
  • xero.quotes.getGet one quoteread
  • xero.quotes.history_createAdd a note to a quotewrite
  • xero.quotes.history_listList quote history and notesread
  • xero.quotes.listList quotesread
  • xero.quotes.pdf_getGet a quote as PDFread
  • xero.quotes.updateUpdate a quotewrite
Inventory7
  • xero.items.createCreate an itemwrite
  • xero.items.deleteDelete an itemdestructive
  • xero.items.getGet one itemread
  • xero.items.history_createAdd a note to an itemwrite
  • xero.items.history_listList item history and notesread
  • xero.items.listList itemsread
  • xero.items.updateUpdate an itemwrite
Billing5
  • xero.linked_transactions.createCreate a linked transactionwrite
  • xero.linked_transactions.deleteDelete a linked transactiondestructive
  • xero.linked_transactions.getGet one linked transactionread
  • xero.linked_transactions.listList linked transactionsread
  • xero.linked_transactions.updateUpdate a linked transactionwrite
Payroll4
  • xero.employees.createCreate an employeewrite
  • xero.employees.getGet one employeeread
  • xero.employees.listList employeesread
  • xero.employees.updateUpdate an employeewrite

Questions

The Xero MCP server, answered.

Is there a Xero MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 191 Xero actions across invoicing, payments, settings and ledger, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Xero.

Does Xero have its own MCP server?

Xero publishes an MCP server that you run on your own machine (the @xeroapi/xero-mcp-server package), signed in with a Xero custom connection or a bearer token. (Xero's documentation, checked 22 October 2026.) Use Xero's server when one person wants to work in Xero through a server they run on their own machine. Use actionlake when you also want Xero behind the same endpoint as your other systems: a key per agent with allowed actions and a spending cap, a named person's approval before destructive actions, a sealed record of every call, and one ask across Xero and another system.

What do I need to connect Xero?

Your own Xero OAuth app, registered with Xero (its client id and client secret), and the access and refresh tokens from one admin sign-in. actionlake has no Xero app of its own, so this is not a one-step consent. actionlake renews the access token as it expires. actionlake finds the organisations, sites or workspaces the credential can reach for you when you connect. Each one is its own connection, so an agent can work across several by name. The free call account { op: "connections.requirements", service: "xero" } lists exactly what to paste.

Can an AI agent delete or change things in Xero?

Only if its key allows it, and only with an explicit confirmation. 15 Xero actions are destructive, including create a batch payment, delete a draft invoice and delete a batch payment. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

Will an AI agent use up my Xero API limit?

actionlake paces every call to the limits in the Xero service file: 60 calls a minute and 5,000 a day, at most 5 at a time per connection. Repeated reads are answered from cache (116 Xero actions can be), which never reaches Xero.

What does a Xero action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (11 Xero actions page). Cache hits, searches, dry runs and calls Xero refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which Xero API does it cover?

The Xero Accounting API 2.0 at api.xero.com/api.xro/2.0. It is built from Xero's documentation as read on 14 September 2026. 191 actions in 13 areas, each one in the signed service file (version 4.0.0).

Can I combine Xero with my other systems?

Yes. ask joins Xero to ConnectWise PSA or HubSpot CRM on the same customer and returns the answer rather than every row. Xero maps crm.company, which 227 other connectors also map.

Does actionlake keep my Xero data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Xero credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent Xero today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.