Start free
reconcile_accountRead-only

Check your ledger against the bank statement

Your bank's statement balance and what your books show don't match, and you need to find out why before you close the month.

Reconciling is the check that catches everything else that went wrong — a transaction that never got imported, one categorized to the wrong bank account, a duplicate. This tool automates the comparison: give it the account, a date, and the statement's ending balance, and it tells you whether your ledger agrees, and if not, by how much.

When there's a gap, it doesn't just report the number — it surfaces the uncategorized transactions in that account that could plausibly explain it, along with their total. If that total happens to match the gap exactly, that's a strong lead. But it is only a lead: the tool tells you what adds up, not what actually happened. A matching total suggests where to look; it doesn't prove that those specific transactions are the cause, especially if there are several ways to reach the same total.

Sign convention matters here more than almost anywhere else in BalanceMCP. Enter the ending balance the way the ledger actually sees it: positive for checking or savings, negative for a credit card, because a card balance is money owed. Get this backwards and the tool will report a large discrepancy that isn't really there.

This is also where you find the bankAccountId this tool needs in the first place — it comes from cash_position's bankAccountIds array, not the chartAccountId that most other tools use. Mixing those two up is the single most common mistake when calling this tool directly.

What you would actually say"Reconcile the checking account against my June statement — ending balance $4,812.33."

What this does not do

  • A matching total among the candidate transactions is a lead, not proof — it does not confirm which specific transactions caused the discrepancy.
  • Only surfaces uncategorized transactions as candidates; a discrepancy caused by something already posted (miscategorized, duplicated) won't show up in this list.
  • Needs the bankAccountId from cash_position, not the chartAccountId used elsewhere — passing the wrong id will fail.

Arguments

NameTypeRequiredWhat it is
bookIduuidRequired
bankAccountIduuidRequiredFrom cash_position → accounts[].bankAccountIds, not chartAccountId.
asOfstringRequired
endingBalanceunknownRequiredThe statement's closing balance. Negative for a credit card.

Generated from the tool definition, so it cannot describe arguments the tool does not accept. Unrecognised arguments are rejected rather than ignored.

Common questions

What if the numbers don't match but there are no candidate transactions?
That means the discrepancy isn't explained by anything currently uncategorized in that account — the cause is more likely something already posted incorrectly, which this tool doesn't search for. Check recent categorizations and reversals instead.
Why does my credit card need a negative ending balance?
Because the ledger treats a card balance as a liability — money you owe — which reads as negative throughout BalanceMCP. Entering it as positive will make a correctly reconciled card look like it's off by twice the balance.
Where do I get the bankAccountId this needs?
From cash_position — specifically the bankAccountIds array on the row for that account, not the chartAccountId. The two ids look similar but are rejected if swapped.