Back to blog
10 June 2026 · 9 min read

What an AI Assistant Can Actually Do in Your Xero

Claude and ChatGPT can connect directly to Xero — listing invoices, running reports, creating contacts. Here's exactly where they stop, and why.

Xero AI Automation Reconciliation

You can connect Claude or ChatGPT to your live Xero account right now. Not via a clunky export, not via copy-paste — a direct, authenticated connection where the AI can read your invoices, run a profit-and-loss report, create a contact, or tell you which bank transactions are sitting unreconciled. It works in minutes and it is genuinely impressive the first time you see it.

It is also not reconciliation.

Understanding exactly where the connection ends — and why it ends there — matters if you’re deciding whether to spend a Saturday afternoon setting it up or waiting for something that actually closes the loop.

What the Connector Is

The Model Context Protocol explained

Xero maintains an official open-source server on GitHub (XeroAPI/xero-mcp-server) that implements the Model Context Protocol — a standard plug that lets AI assistants like Claude or ChatGPT read and write to third-party services in a structured way. Think of it as USB for AI: once you install the plug, any AI client that supports the standard can talk to Xero using your credentials.

Setting it up

Setting it up takes around twenty minutes. You create a Custom Connection in the Xero developer portal, drop a short configuration block into Claude’s settings file, and authenticate via OAuth. From that point, Claude has live read and write access to your Xero organisation.

This is not a third-party bolt-on or a beta experiment. It is the official Xero integration, built and maintained by the Xero API team.

What It Can Actually Do

Fifty actions across your Xero data

The connector exposes roughly fifty actions. Here is the verified list from the official README, grouped by what matters for day-to-day bookkeeping:

Read your books

  • list-invoices — see all invoices, filter by status, customer, or date range
  • list-contacts — your full supplier and customer list
  • list-accounts — the chart of accounts
  • list-payments — payments received and made
  • list-bank-transactions — posted bank transactions (not statement lines — more on this shortly)
  • list-credit-notes, list-items, list-quotes, list-manual-journals

Run reports

  • list-profit-and-lossP&L for any date range
  • list-report-balance-sheetbalance sheet snapshot
  • list-trial-balancetrial balance
  • list-aged-receivables-by-contact, list-aged-payables-by-contact — who owes you, who you owe

Create and update records

  • create-invoice, create-contact, create-payment, create-credit-note, create-quote
  • create-manual-journal — post a journal entry directly to Xero
  • update-invoice, update-contact, update-manual-journal, and more

What this looks like in practice

What you can do with this in practice is genuinely useful. You can ask: “Show me all invoices over £5,000 that are more than thirty days overdue” and get a formatted answer with customer names and amounts. You can say “Create an invoice for Indigo Whale Ltd for £1,200 plus VAT, due in thirty days” and it will be in Xero inside ten seconds. You can pull a P&L for the last quarter, ask why gross margin dropped in March, and have a conversation about the numbers.

For a UK founder who already uses Claude, this is a meaningful step up from opening Xero in a browser tab.

The Hard Ceiling: Reconciliation

Why the bank feed is off-limits

Here is what the connector cannot do: match an unreconciled bank statement line to an invoice, mark a transaction as reconciled, or touch the raw bank feed in any way.

This is not a gap in the connector. It is a deliberate constraint in the Xero Accounting API itself. Xero does not expose unreconciled bank statement lines via its public API — the connector sits on top of that API, so it inherits the ceiling.

Xero’s reasoning for the restriction

Xero’s own position on this is clearly stated in their developer feedback forum: reconciling via the API would require fine-grained access to raw bank statement data, which Xero cannot share for commercial and regulatory reasons. In markets such as Australia this data is treated as banking data under consumer data rights regimes. Xero’s strategy is to handle reconciliation inside the product — via bank rules, JAX (their Anthropic-powered automatic reconciliation layer), and suggested matches — not to expose it to the API surface.

The result is a clean boundary. Anything that already exists as an accounting record in Xero — a posted bank transaction, an invoice, a journal entry — is readable and writable via the connector. Anything that is still a raw bank statement line, sitting in the reconciliation queue waiting to be matched, is invisible to it.

The list-bank-transactions command returns posted transactions, not unreconciled statement lines. There is no list-unreconciled-statement-lines. There is no reconcile-transaction. There is no way to push a match decision back through the API.

What Happens When You Ask It to Reconcile

The convincingly almost-there experience

This is worth spelling out because the experience is convincingly almost-there.

You connect Claude to Xero. You ask: “Can you reconcile this month’s transactions?” Claude, being capable and helpful, will do its best. It can see the list of bank transactions. It can see the list of open invoices. It can reason about which invoice a given transaction probably settles — the amounts are in the data, the contact names are in the data.

What it produces is a set of proposed postings: “I think this payment from Coral Dolphin Ltd for £2,400 settles invoice INV-0847. I’ll create a payment record against that invoice.”

And it can do that. create-payment is in the toolkit.

Why the feed still shows unmatched lines

But the bank statement line itself — the raw line sitting in your Xero reconciliation screen — remains unreconciled. Claude has posted a payment to the invoice, which is half the job. The other half, matching that payment to the bank feed entry so the line clears, is the part the API does not support.

You end up with invoices marked as paid but a bank feed that still shows unmatched lines. Your Xero balance looks correct but the reconciliation screen still has outstanding items. An accountant reviewing your file will see it immediately. This is not a small thing.

It is not Claude’s fault. It is not the connector’s fault. It is the shape of the API.

What the Connector Is Actually Good For

Query-and-create workflows that work well

The distinction matters for choosing how to use it. The connector shines for query-and-create workflows where you already have clean data in Xero:

  • Chasing overdue invoices: ask for a list of everything past thirty days, draft follow-up emails for each, post them from your inbox. Entirely viable, genuinely time-saving.
  • Pre-month-end checks: ask for the trial balance, spot accounts that look wrong, create manual journal entries to correct them before your accountant sees the file.
  • Data entry from documents: if you receive a bill as a PDF, you can extract the line items and use the connector to create the bill in Xero directly. No copy-paste.
  • Ad-hoc reporting: “Show me gross margin by month for the last six months” is a five-second conversation rather than a Xero reporting screen to navigate.
  • Contact and invoice housekeeping: merging duplicate contacts, correcting invoice dates, updating payment terms in bulk.

The pattern is: read from Xero, reason about it, write clean structured data back. That workflow is well-supported and the AI does it well.

The pattern it does not support is: look at raw bank data, match it against the ledger, close the loop. That requires access to the reconciliation queue that the API deliberately withholds.

This maps exactly to the distinction between a Xero power user with a very sharp tool and an autonomous bookkeeper. The connector gives you the former. It does not give you the latter. As the product comparison on this topic explains, even sophisticated rule and AI tooling within Xero leaves the matching step on the operator.

Worked Example: Coral Dolphin’s Month-End

Coral Dolphin Ltd is a UK digital agency doing around £80k of invoiced work per month. Their director, James, has connected Claude to Xero via the official connector. He wants to see whether it can close out May.

What James asks Claude

“It’s the first of June. Can you reconcile May and tell me what’s outstanding?”

What Claude can do

It pulls the list of invoices with list-invoices — twenty-three invoices raised in May, fifteen showing as paid, eight in “awaiting payment.” It pulls the P&L with list-profit-and-loss for May and summarises revenue and margin. It runs list-aged-receivables-by-contact and flags three customers who have been outstanding for more than forty-five days. It drafts a chaser email for each.

Genuinely useful. James now has a clear picture of May’s receivables position and three draft chasers, in about ninety seconds.

What Claude cannot do

The Barclays bank feed has twelve statement lines in May that have not been matched to invoices or payments. They are sitting in the reconciliation queue in Xero. Claude cannot see them. They do not appear in list-bank-transactions because they are not yet posted transactions — they are raw statement lines.

Claude proposes to help: “I can create payment records against the invoices I can see matched amounts for — would you like me to proceed?” James says yes. Claude posts payments to seven of the fifteen invoices it is confident about based on amount and contact matching.

Now seven invoices show as paid in the ledger. But the twelve bank statement lines are still unreconciled in the feed. Xero’s reconciliation screen shows those lines unmatched because the matching step — the step that links the ledger entry to the feed line — never happened via the API.

James still has to open the Xero reconciliation screen and manually match those lines. The AI did the easy half — looking up what should match — but the actual clearing of the feed requires clicks inside Xero’s own interface.

What it flagged

One payment of £4,800 landed from a contact name Claude doesn’t recognise in Xero. It can’t create a payment because there’s no matching invoice and no matching contact. It flags this for James with the raw statement description and asks whether it’s a new customer or a mismatched contact name. Good behaviour — it has correctly identified its confidence boundary.

Total time saving for James: real, but incomplete. He has a clearer picture of his books and seven invoices resolved. He still has twelve bank lines to handle manually.

This is a sharper tool. It is not a bookkeeper.

Takeaway

  • The official Xero MCP connector is a legitimate, well-maintained integration that gives AI assistants roughly fifty actions across invoices, contacts, reports, journals, and payments.
  • The Xero Accounting API deliberately does not expose unreconciled bank statement lines — this is a commercial and regulatory constraint, not a gap that will be patched by a future version of the connector.
  • An AI assistant connected to Xero via the connector can read and post clean accounting data; it cannot match bank feed lines, mark transactions as reconciled, or close the gap between the feed and the ledger.
  • The result is a powerful query-and-create tool that still leaves the reconciliation step on the operator — which is exactly where most of the month-end work lives.
  • If you want to understand when this kind of AI assistance is the right call and when you need something autonomous, this post on what founders should automate first gives the framework.

Get on the list

TheBookkeeper.ai is built specifically for the gap the connector leaves open — the reconciliation step that the Xero API doesn’t support, handled autonomously for UK Xero users. Get on the waitlist if you want your bank feed cleared without opening Xero.


Sources:

Frequently asked questions

Why can't the Xero API access unreconciled bank statement lines?

Xero deliberately withholds raw bank statement data from its public API for commercial and regulatory reasons. In some markets, this data is treated as protected banking data under consumer data rights rules. Xero's position is that reconciliation belongs inside the product — handled through bank rules, suggested matches, and its own AI layer — not exposed to third-party API connections.

Is the Xero MCP connector safe to use with live company data?

Yes. The official connector is built and maintained by the Xero API team and uses OAuth for authentication — the same standard used by every authorised Xero app. You grant it access through your Xero developer portal, and you can revoke it at any time. It is not a third-party bolt-on; it is Xero's own integration for AI assistants.

Can Claude or ChatGPT create invoices and contacts in Xero automatically?

Yes, both can create invoices, contacts, credit notes, quotes, and journal entries in Xero once the MCP connector is set up. The AI can also read your chart of accounts, pull aged debtors and creditors reports, and post payments against invoices. What it cannot do is touch unreconciled bank feed lines — that part of Xero's data is not available via the API.

What month-end Xero tasks can I realistically hand to an AI assistant?

Tasks that work well include pulling overdue invoice lists and drafting chaser emails, running a trial balance to spot coding errors before your accountant reviews the file, creating bills or invoices from documents, and producing ad-hoc P&L summaries. Tasks that do not work include clearing the bank reconciliation queue — statement lines in the feed are invisible to any AI connector built on the Xero Accounting API.

If I post a payment in Xero via the API, does it clear the bank feed line?

No. Posting a payment via the API marks the invoice as paid in the ledger, but it does not match that payment to the corresponding bank statement line. The feed line remains unreconciled in Xero's reconciliation screen. You still need to open Xero and manually match the line — or let Xero's built-in bank rules and suggested-match logic handle it. The ledger and the feed are two separate layers.

Is there a service that handles Xero reconciliation autonomously without me clicking through the feed?

Xero's own JAX layer (its Anthropic-powered matching feature) applies suggested matches inside the product, but a human still needs to approve them. For UK Xero users who want the reconciliation step handled without opening Xero at all, TheBookkeeper.ai is being built specifically for that gap — taking over the matching work the API alone cannot close.

Continue

Want this running on your Xero?

We're running a private beta for UK Xero users. Get on the list and we'll show you what reconciled-by-morning looks like on your books.