Skip to main content
Glama

Invio Xero MCP

create_xero_manual_journal

create_xero_manual_journal

Proposes a manual journal (a general-purpose double-entry adjustment - reallocating an expense between accounts, recording a bank fee, writing off a small balance, and similar) in this Xero organisation - it does NOT create anything in Xero itself, and never will on its own. This queues a pending change that a human must explicitly approve (your Xero MCP connector - the exact link is this response's own approvalUrl field) before Xero is touched at all; you have no way to approve it yourself. Every line needs a real accountCode from list_xero_accounts - unlike an invoice line, a journal line has no default account to fall back to, so never invent one. lineAmount is SIGNED: positive = a debit, negative = a credit - this is Xero's own convention, and getting it backwards silently swaps a debit for a credit in a real ledger. Every line together must sum to exactly zero - an unbalanced entry is rejected before anything is queued, with the exact imbalance named so you can fix it. Tell the user plainly which accounts are debited and which are credited, by how much, and that it needs their approval in Invio before it goes anywhere - never describe it as posted or done. Even once approved, this only ever creates a DRAFT journal inside Xero - a human still posts it themselves from inside Xero, this connector never does that. You CAN also say whether a taxed line's amount includes tax (lineAmountTypes): use "Inclusive" for "$1,500 including GST", "Exclusive" for "$1,500 plus GST", "NoTax" for no tax at all. This only changes anything on a line that also names a taxType - a line with no taxType is unaffected either way. Omit it and Xero applies its own default for a manual journal, which this connector does not claim to know. Never adjust the amounts yourself to fake a tax treatment. DATES: date is strict YYYY-MM-DD, so you always have to convert whatever the user actually said. A date carrying a month name ("8 Sep", "Sept 8th"), a weekday ("last Tuesday"), or an already-unambiguous full date ("2026-09-08") is yours to convert normally. A BARE NUMERIC date with no month name - "9/8", "08/09", "9-8" - is the one that is not: it means 9 August to most of the world and 8 September in the United States, and getting it wrong puts a manual journal a month out in a way nobody skimming the approval card will catch. This Invio account is based in a country that writes the DAY first, so read a bare "9/8" as 9 August, not 8 September. Say in plain words how you read it ("I read 9/8 as 9 August") so the user can correct you before they approve. If their own wording points the other way anywhere in the same request, ask them which they meant instead of picking.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateYesDate the journal is posted, YYYY-MM-DD. If the user wrote a bare numeric date with no month name ("9/8", "08/09"), do NOT settle it on your own judgement - it is 9 August to most of the world and 8 September in the US, and nothing downstream of this field can tell which you meant once it is a date. Follow the DATES instruction in this tool's description.
lineItemsYesAt least two lines, each with a signed lineAmount (positive = debit, negative = credit) and a real accountCode. The lineAmounts across every line must sum to exactly zero - this is checked before anything is queued, not left for Xero to reject after approval.
narrationYes
organisationNoThe Xero organisation to use, by its display name. Only needed if this connection reaches more than one organisation - omit it when there is only one.
lineAmountTypesNoHow Xero reads every lineAmount below on any line that names a taxType. "Exclusive" = the amounts do NOT include tax and Xero adds it on top - "$1,500 plus GST". "Inclusive" = the amounts ALREADY include tax and Xero works the tax out of them - "$1,500 including GST", "$1,500 inc GST", "$1,500 all up". "NoTax" = no tax is calculated on any line. Set this whenever the entry has a tax dimension at all (a GST or VAT correction, a BAS adjustment, reallocating a tax-coded expense) and say which one you used. Omit it only for an entry with no tax in it, where Xero applies its own default. Never adjust the amounts yourself to fake a tax treatment, and never assume a bare "$1,500" is one or the other - ask if the user did not say.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations only saying readOnlyHint=false and openWorldHint=true, the description discloses an exceptional amount of behavior: it queues a pending change requiring human approval (the agent cannot approve), rejection of unbalanced entries before queueing, that even approved entries only become DRAFT journals in Xero, and the signed-debit/credit convention with its silent-failure risk. All of this is beyond what the annotations convey and none of it contradicts them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the most critical facts (propose-not-create, approval workflow) and every block earns its place operationally, but it is notably verbose — the date section and repeated warnings about the zero-sum and tax rules overlap with the schema, which already states the sign convention, accountCode requirement, and balancing check. It reads more like an operational playbook than a lean tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, side-effecting tool with no output schema, the description covers the approvalUrl response field, failure modes (imbalance rejection with the imbalance named), the draft-only outcome post-approval, and user-communication obligations. Minor gaps: no description of other response fields (e.g., pending-change ID) and no error-format detail beyond the imbalance case, but nothing an agent needs to invoke correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 80% schema coverage the baseline is 3, and the description adds real value on top: the DATES section gives a decision procedure for ambiguous bare numeric dates including the day-first country rule and the requirement to state the interpretation aloud; lineAmountTypes gets when-to-set/omit guidance and explicit prohibitions ('Never adjust the amounts yourself to fake a tax treatment'); lineAmount's sign convention is reinforced with the consequence of reversal. This goes beyond the schema's phrasing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource ('Proposes a manual journal') with concrete use-case examples (reallocating an expense, bank fee, writing off a balance), and immediately draws the critical distinction from siblings by clarifying it does NOT create anything in Xero. The 'proposes' vs 'create' framing cleanly separates it from create_xero_invoice, create_xero_credit_note, and the approve/reject_pending_change tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear when-to-use context via the general-purpose adjustment examples, and explicitly contrasts with a sibling ('unlike an invoice line, a journal line has no default account'), plus names list_xero_accounts as a prerequisite. However, it never systematically states when to prefer a sibling (e.g., invoice for billing customers) — the when-not is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources