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/mcpdo { 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.
- 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 - 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 apprefresh_tokenRefresh token from the same sign-in; the access token is renewed from itclient_idYour OAuth app's client idclient_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 - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates 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.0
api.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
Invoicing
3119 read · 10 write · 2 destructive
List invoices · List credit notes · List repeating invoices · Create an invoice
Payments
2613 read · 8 write · 5 destructive
List payments · List batch payments · Create a batch payment · Record a payment against an invoice
Settings
2313 read · 8 write · 2 destructive
List users · Get one user · List tax rates · List currencies
Ledger
1812 read · 5 write · 1 destructive
List chart of accounts · Create an account · Get one account · Update an account
Contacts
179 read · 6 write · 2 destructive
List contacts · List contact groups · Create a contact · Get one contact
Banking
1510 read · 4 write · 1 destructive
List bank transactions · Create a bank transaction · Get one bank transaction · Update a bank transaction
Expenses
148 read · 6 write · 0 destructive
List expense claims · Create an expense claim · List receipts · Get one expense claim
Reporting
1313 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.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
xero.invoices.listList invoices | List Xero invoices and bills, filtered by status, contact, number or date. | read | finance.invoice.list101 connectors |
xero.payments.listList payments | List Xero payments made against invoices, credit notes and prepayments. | read | finance.payment.list75 connectors |
xero.quotes.listList quotes | List Xero quotes from the connected organisation, with optional where/order filtering. | read | finance.quote.list52 connectors |
xero.purchase_orders.listList purchase orders | List Xero purchase orders from the connected organisation, with optional where/order filtering. | read | finance.purchase_order.list45 connectors |
xero.contacts.listList contacts | List Xero contacts from the connected organisation, with optional where/order filtering. | read | crm.company.list162 connectors |
xero.accounts.listList chart of accounts | List Xero chart of accounts from the connected organisation, with optional where/order filtering. | read | finance.ledger_account.list36 connectors |
xero.credit_notes.listList credit notes | List Xero credit notes from the connected organisation, with optional where/order filtering. | read | finance.credit_note.list33 connectors |
xero.users.listList users | List Xero users from the connected organisation, with optional where/order filtering. | read | identity.user.list474 connectors |
xero.invoices.createCreate an invoice | Create a Xero sales invoice or bill against a contact, with one or more line items. | write | finance.invoice.create74 connectors |
xero.payments.createRecord a payment against an invoice | Apply a payment to a Xero invoice or credit note from a bank account. | write | finance.payment.create67 connectors |
xero.batch_payments.createCreate a batch payment | Create a new Xero batch payment in the connected organisation. | destructive | finance.payment.create67 connectors |
xero.quotes.createCreate a quote | Create a new Xero quote in the connected organisation. | write | finance.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.
- Readread
Which Xero invoices are more than 30 days overdue? Group them by customer with the total owed.
calls
xero.invoices.list - Planread
Pull the month-end financial pack in Xero.
calls
xero.organisation.getxero.reports.profit_and_lossxero.reports.balance_sheetxero.reports.trial_balancexero.reports.bank_summary+1 more - Planwrite
Set up a new customer and raise their first invoice in Xero. Ask me before anything is sent or changed.
calls
xero.contacts.createxero.contact_groups.contacts_addxero.invoices.createxero.invoices.updatexero.invoices.online_url_get+1 more - Writewrite
Create an invoice in Xero. Show me exactly what you will send before you save it.
calls
xero.invoices.create - Across systemsread
For each customer, how many invoices are in Xero and how many tickets in ConnectWise PSA?
calls
xero.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, oncrm.company· ConnectWise PSAFor each customer, how many invoices are in Xero and how many tickets in HubSpot CRM?
xero.invoices.list+hubspot_crm.tickets.list, oncrm.company· HubSpot CRM
identity.user 517crm.company 227finance.invoice 91hr.employee 63finance.payment 53finance.quote 45finance.purchase_order 35finance.ledger_account 32ask { 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"] } } ]}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.
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.
Pull the month-end financial pack
Use it when Someone asks for the month-end or period-end financial reports in one go.
Chase overdue invoices by email
Use it when Someone wants to send payment reminders for invoices that are already overdue.
A person decides
Email a payment reminder for every overdue invoice listed above.
Archive contacts with no recent activity
Use it when The contact list has grown stale and dormant customers should be archived.
A person decides
Archive 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.
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 decides
Apply amount to invoice InvoiceNumber from Name.
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 decides
Approve and email the first invoice for name totalling Total.
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 decides
Raise a sales invoice for Name from quote QuoteNumber.
Void an invoice raised in error
Use it when An invoice was raised in error and must be voided rather than edited.
A person decides
Void invoice InvoiceNumber for Total. Reason: reason.
account { op: "plans.install", slug: "xero-supplier-bill-audit" }
# then ask for it by name; a schedule can run it on a timetableGovernance for Xero
Destructive actions wait for a yes.
15 Xero actions are destructive. These are all of them:
- Create a batch payment
xero.batch_payments.create - Delete a draft invoice
xero.invoices.delete - Delete a batch payment
xero.batch_payments.delete - Void an invoice
xero.invoices.void - Delete an account
xero.accounts.delete - Delete an item
xero.items.delete - Reverse a payment
xero.payments.delete - Delete a linked transaction
xero.linked_transactions.delete - Create a bank transfer
xero.bank_transfers.create - Delete a tracking category
xero.tracking_categories.delete - Remove one contact from a group
xero.contact_groups.contact_remove - Reverse a prepayment allocation
xero.prepayments.allocations_delete - Reverse an overpayment allocation
xero.overpayments.allocations_delete - Delete a tracking option
xero.tracking_options.delete - Empty a contact group
xero.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.
Delete a draft invoice?
intent: the user asked me to delete a draft invoice
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]" } ]}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
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 attachmentreadxero.credit_notes.attachments_listList credit note attachmentsreadxero.credit_notes.createCreate a credit notewritexero.credit_notes.getGet one credit notereadxero.credit_notes.history_createAdd a note to a credit notewritexero.credit_notes.history_listList credit note history and notesreadxero.credit_notes.listList credit notesreadxero.credit_notes.pdf_getGet a credit note as PDFreadxero.credit_notes.updateUpdate a credit notewritexero.invoice_reminders.settings_getGet invoice reminder settingsreadxero.invoices.attachment_getGet one invoice attachmentreadxero.invoices.attachments_listList invoice attachmentsreadxero.invoices.createCreate an invoicewritexero.invoices.deleteDelete a draft invoicedestructivexero.invoices.email_sendEmail an invoice to its contactwritexero.invoices.getGet one invoicereadxero.invoices.history_createAdd a note to an invoicewritexero.invoices.history_listList invoice history and notesreadxero.invoices.listList invoicesreadxero.invoices.online_url_getGet an invoice's online payment linkreadxero.invoices.pdf_getGet an invoice as PDFreadxero.invoices.updateUpdate an invoicewritexero.invoices.voidVoid an invoicedestructivexero.repeating_invoices.attachment_getGet one repeating invoice attachmentreadxero.repeating_invoices.attachments_listList repeating invoice attachmentsreadxero.repeating_invoices.createCreate a repeating invoicewritexero.repeating_invoices.getGet one repeating invoicereadxero.repeating_invoices.history_createAdd a note to a repeating invoicewritexero.repeating_invoices.history_listList repeating invoice history and notesreadxero.repeating_invoices.listList repeating invoicesreadxero.repeating_invoices.updateUpdate a repeating invoicewrite
Payments26
xero.batch_payments.createCreate a batch paymentdestructivexero.batch_payments.deleteDelete a batch paymentdestructivexero.batch_payments.getGet one batch paymentreadxero.batch_payments.history_createAdd a note to a batch paymentwritexero.batch_payments.history_listList batch payment history and notesreadxero.batch_payments.listList batch paymentsreadxero.overpayments.allocations_createAllocate an overpayment to an invoicewritexero.overpayments.allocations_deleteReverse an overpayment allocationdestructivexero.overpayments.getGet one overpaymentreadxero.overpayments.history_createAdd a note to an overpaymentwritexero.overpayments.history_listList overpayment history and notesreadxero.overpayments.listList overpaymentsreadxero.payment_services.createAdd a payment servicewritexero.payment_services.listList payment servicesreadxero.payments.createRecord a payment against an invoicewritexero.payments.deleteReverse a paymentdestructivexero.payments.getGet one paymentreadxero.payments.history_createAdd a note to a paymentwritexero.payments.history_listList payment history and notesreadxero.payments.listList paymentsreadxero.prepayments.allocations_createAllocate a prepayment to an invoicewritexero.prepayments.allocations_deleteReverse a prepayment allocationdestructivexero.prepayments.getGet one prepaymentreadxero.prepayments.history_createAdd a note to a prepaymentwritexero.prepayments.history_listList prepayment history and notesreadxero.prepayments.listList prepaymentsread
Settings23
xero.branding_themes.getGet one branding themereadxero.branding_themes.listList branding themesreadxero.branding_themes.payment_services_applyApply a payment service to a branding themewritexero.branding_themes.payment_services_listList a branding theme's payment servicesreadxero.currencies.createCreate a currencywritexero.currencies.listList currenciesreadxero.organisation.actions_listList organisation actionsreadxero.organisation.cis_settings_getGet organisation CIS settingsreadxero.organisation.getGet the organisationreadxero.setup.postPost conversion balances and setup datawritexero.tax_rates.createCreate a tax ratewritexero.tax_rates.get_by_typeGet one tax rate by tax typereadxero.tax_rates.listList tax ratesreadxero.tracking_categories.createCreate a tracking categorywritexero.tracking_categories.deleteDelete a tracking categorydestructivexero.tracking_categories.getGet one tracking categoryreadxero.tracking_categories.listList tracking categoriesreadxero.tracking_categories.updateUpdate a tracking categorywritexero.tracking_options.createAdd an option to a tracking categorywritexero.tracking_options.deleteDelete a tracking optiondestructivexero.tracking_options.updateUpdate a tracking optionwritexero.users.getGet one userreadxero.users.listList usersread
Ledger18
xero.accounts.attachment_getGet one account attachmentreadxero.accounts.attachments_listList account attachmentsreadxero.accounts.createCreate an accountwritexero.accounts.deleteDelete an accountdestructivexero.accounts.getGet one accountreadxero.accounts.listList chart of accountsreadxero.accounts.updateUpdate an accountwritexero.journals.getGet one journalreadxero.journals.get_by_numberGet one journal by numberreadxero.journals.listList journalsreadxero.manual_journals.attachment_getGet one manual journal attachmentreadxero.manual_journals.attachments_listList manual journal attachmentsreadxero.manual_journals.createCreate a manual journalwritexero.manual_journals.getGet one manual journalreadxero.manual_journals.history_createAdd a note to a manual journalwritexero.manual_journals.history_listList manual journal history and notesreadxero.manual_journals.listList manual journalsreadxero.manual_journals.updateUpdate a manual journalwrite
Contacts17
xero.contact_groups.contact_removeRemove one contact from a groupdestructivexero.contact_groups.contacts_addAdd contacts to a groupwritexero.contact_groups.contacts_remove_allEmpty a contact groupdestructivexero.contact_groups.createCreate a contact groupwritexero.contact_groups.getGet one contact groupreadxero.contact_groups.listList contact groupsreadxero.contact_groups.updateUpdate a contact groupwritexero.contacts.attachment_getGet one contact attachmentreadxero.contacts.attachments_listList contact attachmentsreadxero.contacts.cis_settings_getGet a contact's CIS settingsreadxero.contacts.createCreate a contactwritexero.contacts.getGet one contactreadxero.contacts.get_by_numberGet one contact by contact numberreadxero.contacts.history_createAdd a note to a contactwritexero.contacts.history_listList contact history and notesreadxero.contacts.listList contactsreadxero.contacts.updateUpdate a contactwrite
Banking15
xero.bank_transactions.attachment_getGet one bank transaction attachmentreadxero.bank_transactions.attachments_listList bank transaction attachmentsreadxero.bank_transactions.createCreate a bank transactionwritexero.bank_transactions.getGet one bank transactionreadxero.bank_transactions.history_createAdd a note to a bank transactionwritexero.bank_transactions.history_listList bank transaction history and notesreadxero.bank_transactions.listList bank transactionsreadxero.bank_transactions.updateUpdate a bank transactionwritexero.bank_transfers.attachment_getGet one bank transfer attachmentreadxero.bank_transfers.attachments_listList bank transfer attachmentsreadxero.bank_transfers.createCreate a bank transferdestructivexero.bank_transfers.getGet one bank transferreadxero.bank_transfers.history_createAdd a note to a bank transferwritexero.bank_transfers.history_listList bank transfer history and notesreadxero.bank_transfers.listList bank transfersread
Expenses14
xero.expense_claims.createCreate an expense claimwritexero.expense_claims.getGet one expense claimreadxero.expense_claims.history_createAdd a note to an expense claimwritexero.expense_claims.history_listList expense claim history and notesreadxero.expense_claims.listList expense claimsreadxero.expense_claims.updateUpdate an expense claimwritexero.receipts.attachment_getGet one receipt attachmentreadxero.receipts.attachments_listList receipt attachmentsreadxero.receipts.createCreate a receiptwritexero.receipts.getGet one receiptreadxero.receipts.history_createAdd a note to a receiptwritexero.receipts.history_listList receipt history and notesreadxero.receipts.listList receiptsreadxero.receipts.updateUpdate a receiptwrite
Reporting13
xero.budgets.getGet one budgetreadxero.budgets.listList budgetsreadxero.reports.aged_payables_by_contactGet aged payables for a contactreadxero.reports.aged_receivables_by_contactGet aged receivables for a contactreadxero.reports.balance_sheetGet the balance sheetreadxero.reports.bank_summaryGet the bank summaryreadxero.reports.budget_summaryGet the budget summaryreadxero.reports.executive_summaryGet the executive summaryreadxero.reports.get_by_idGet a report by idreadxero.reports.listList available reportsreadxero.reports.profit_and_lossGet the profit and loss reportreadxero.reports.ten_ninety_nineGet the 1099 reportreadxero.reports.trial_balanceGet the trial balanceread
Purchasing9
xero.purchase_orders.attachment_getGet one purchase order attachmentreadxero.purchase_orders.attachments_listList purchase order attachmentsreadxero.purchase_orders.createCreate a purchase orderwritexero.purchase_orders.getGet one purchase orderreadxero.purchase_orders.history_createAdd a note to a purchase orderwritexero.purchase_orders.history_listList purchase order history and notesreadxero.purchase_orders.listList purchase ordersreadxero.purchase_orders.pdf_getGet a purchase order as PDFreadxero.purchase_orders.updateUpdate a purchase orderwrite
Sales9
xero.quotes.attachment_getGet one quote attachmentreadxero.quotes.attachments_listList quote attachmentsreadxero.quotes.createCreate a quotewritexero.quotes.getGet one quotereadxero.quotes.history_createAdd a note to a quotewritexero.quotes.history_listList quote history and notesreadxero.quotes.listList quotesreadxero.quotes.pdf_getGet a quote as PDFreadxero.quotes.updateUpdate a quotewrite
Inventory7
xero.items.createCreate an itemwritexero.items.deleteDelete an itemdestructivexero.items.getGet one itemreadxero.items.history_createAdd a note to an itemwritexero.items.history_listList item history and notesreadxero.items.listList itemsreadxero.items.updateUpdate an itemwrite
Billing5
xero.linked_transactions.createCreate a linked transactionwritexero.linked_transactions.deleteDelete a linked transactiondestructivexero.linked_transactions.getGet one linked transactionreadxero.linked_transactions.listList linked transactionsreadxero.linked_transactions.updateUpdate a linked transactionwrite
Payroll4
xero.employees.createCreate an employeewritexero.employees.getGet one employeereadxero.employees.listList employeesreadxero.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.