tieout
Ties QuickBooks Online General Ledger or Transaction Detail by Account CSV exports to bank statements month by month, identifying items in transit, unrecorded bank lines, unrecorded book lines, likely transposed digits, opening differences, and unexplained remainders.
Matches Stripe payouts to bank deposits one-to-one, including timing differences, missing deposits, failed payouts, and currencies. Can also read Stripe payouts and balance transactions with a restricted API key, and uses itemized payout reconciliation reports to verify gross sales, refunds, disputes, fees, and adjustments inside each payout.
Ties Xero Account Transactions CSV exports to bank statements month by month, identifying items in transit, unrecorded bank lines, unrecorded book lines, likely transposed digits, opening differences, and unexplained remainders.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tieouttie out statement.csv and stripe-payouts.csv for last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tieout
Tie your Stripe payouts to your bank deposits, and your QuickBooks or Xero books to your bank statement, month by month, from the CSV exports you already have. tieout lists what does not tie, with the amount and the likely reason, and writes a dated sheet an accountant can review.
Prepared for your review. Not tax or accounting advice.
npx --allow-git=root github:agentwares/tieout statement.csv stripe-payouts.csvAdd the itemized payout reconciliation report to see inside each payout, and your books to tie them too:
npx --allow-git=root github:agentwares/tieout statement.csv stripe-payouts.csv stripe-itemized.csv general-ledger.csv --account CheckingNo account, no bank linking, no LLM. It reads the files you name and makes no network request, unless you ask it to read Stripe with your own restricted key (below).
What it tells you
Stripe payouts against bank deposits. A Stripe payout is the net of many charges, refunds,
disputes and fees, and it lands days after the sales it carries, so it never equals a day's sales.
tieout matches each payout to its deposit, one to one: the same amount, within 5 days of Stripe's
estimated arrival date (--window). Each payout:
ties: the same amount, the same day;
timing: the same amount, a few days off. It says how many days, and whether the payout left Stripe in one month and reached the bank in the next. Such a payout was in transit at that month's end, which is a reconciling item, not an error.
no deposit: with the likely reason:
still in transit after the statement ends;
an instant payout to a debit card;
a different bank account on the Stripe account;
failed, after the statement or other currency: no deposit is expected.
Bank lines naming Stripe that no payout explains are listed too: another Stripe account, or a payout outside the export's dates.
What is inside each payout, from the itemized report: gross sales, refunds, disputes (with Stripe's $15 dispute fee), fees and other adjustments. tieout checks that they add up to the payout, and writes them as balanced journal lines for review. Booking the deposit alone understates sales and leaves the fees out.
Your books against the statement. For each month, the statement's ending balance is set against the books'. Each month ties, differs by timing only, or does not tie. A difference is explained by:
items in transit at the month end;
bank lines not in the books: a bank fee, interest, an unrecorded payout;
book lines not on the statement: a duplicate, a void, a check not yet cashed;
likely transposed digits: a difference that divides by 9;
an opening difference;
any remainder no item explains. When the statement has a running balance, that remainder means rows are missing from the export.
The first month that does not tie is where a fix starts. Later months carry it.
Related MCP server: finance-reconcile-mcp
The files, and where to get them
File | Where |
Bank statement | Your bank's website, as CSV (one file or one per month). Signed amounts, debit and credit columns, or amount and type; |
Stripe payouts | Dashboard → Balances → Payouts → Export. |
Stripe itemized payouts | Reports → Payout reconciliation → Download → Itemized, for the payouts' arrival dates. |
Balance transactions | Instead of the itemized report, a balance-transactions export with a payout column. |
QuickBooks Online | Reports → General Ledger or Transaction Detail by Account → Export to CSV, for the bank account ( |
Xero | Accounting → Reports → Account Transactions → Export → CSV, for the bank account. |
Files given without a flag are sorted by what they hold. Use --bank, --stripe and --ledger to
say it outright.
Stripe's own reports, and when they are enough
US accounts on automatic payouts: if you will link your bank account to Stripe, Stripe's free Bank reconciliation report marks each payout Reconciled or Unreconciled against your deposits in the Dashboard.
Who it does not cover: it is "only available for users with direct US-based Stripe accounts using an automated payout schedule". It does not cover Connect accounts, accounts outside the US, or manual and instant payouts. It also does not look at your books.
What tieout adds: the same tie from a CSV, with no bank linking, for any account and payout type, and the books against the statement.
The payout reconciliation report itemizes automatic payouts only. You are "responsible for reconciling instant payouts", and manual payouts go through the Balance report.
Reading Stripe with your own key
TIEOUT_STRIPE_KEY=rk_live_… npx --allow-git=root github:agentwares/tieout --bank statement.csv --stripe-apiThe key: create a restricted key with Read on Payouts and on Balance and nothing else (Dashboard → Developers → API keys). tieout reads it only from
TIEOUT_STRIPE_KEY, never from an argument.Secret keys are refused. An
sk_key can move money, so tieout stops before sending any request.What is sent: only GET requests, to api.stripe.com: the payouts arriving across the statement's dates, and the balance transactions inside each automatic payout (Stripe's guide).
What is kept: the key is never printed or written.
The sheet
tieout-<date>/ holds:
tie-out.md: the summary, every payout, every month, what does not tie with its likely reason, the journal lines, the sources and a reviewer line;payouts.csv,exceptions.csv,months.csvandjournal.csv.
Each file opens with the disclaimer, and all are written with owner-only permissions. Other options:
--jsonprints the whole result;--no-fileswrites nothing;--outputs the sheet elsewhere.
For agents: tieout mcp
A local stdio MCP server with two read-only tools:
tieout_check_payouts: Stripe payouts against deposits, and the books when a ledger is given.tieout_check_account: the books against the statement, month by month.
Both tools:
take file paths only, never a key, and write nothing;
set all four annotations: read-only, not destructive, idempotent, closed-world.
{
"mcpServers": {
"tieout": {
"command": "npx",
"args": ["-y", "--allow-git=root", "github:agentwares/tieout", "mcp"]
}
}
}Catch-up bookkeeping
Catch-up bookkeeping by agent, priced per month behind, is not built.
What it would do:
the months that do not tie, done from your statements and Stripe;
every transaction categorized;
every payout booked gross with its fees, refunds and disputes;
every account-month tied to its statement;
review by a person before delivery.
No price is set. The CLI's last line links to a page where one click is counted; it gets built only if enough people ask.
--quietdrops that line.
Recorded run
On invented data (tieout demo): a bank statement, Stripe's payouts and itemized exports, and a
QuickBooks General Ledger for three months.
$ npx --allow-git=root github:agentwares/tieout demo --out tieout-demo
SYNTHETIC demo data: an invented company, bank statement, Stripe exports and books. Nothing here is anyone's real data.
tieout 0.1.0 · prepared 9 Oct 2026
Prepared for your review. Not tax or accounting advice.
Read
synthetic-bank-statement.csv
bank statement, 22 rows, 1 Jan 2026 to 31 Mar 2026, running balance
synthetic-stripe-payouts.csv
Stripe payouts export, 11 payouts
synthetic-stripe-itemized-payout-reconciliation.csv
Stripe itemized payout reconciliation report, 9 payouts, 21 items
synthetic-quickbooks-general-ledger.csv
QuickBooks General Ledger, Checking, 23 rows
Stripe payouts to bank deposits (USD)
6 tie: same amount, same day
2 timing: same amount, a few days off (1 across a month end)
1 no deposit on the statement
1 failed or cancelled: no deposit expected
1 arrives after the statement's last day
1 bank line names Stripe and matches no payout
Inside 9 itemized payouts: sales 4,043.00 · refunds -50.00 · disputes -120.00 · fees 137.66 · other 640.00
The books against the statement (Checking)
Jan 2026 ties
Feb 2026 timing only -1,200.00 1 in transit
Mar 2026 does not tie 392.00 2 not in the books, 3 not on the statement
What does not tie (7)
1. payout with no deposit 17 Feb 2026 300.00 po_SYNTH0006
synthetic-stripe-payouts.csv
- an instant payout: these often go to a debit card, not this bank account, and Stripe does not itemize them
- paid to a debit card, not a bank account
2. Stripe deposit with no payout 20 Mar 2026 412.50 STRIPE TRANSFER ST-OTHERACCT SYNTHETIC
synthetic-bank-statement.csv row 3
- a payout from another Stripe account, or one outside the dates of the Stripe export: export Payouts for a wider range
3. on the statement, not in the books 17 Mar 2026 397.51 STRIPE TRANSFER ST-SYNTH0010 SYNTHETIC EXAMPLE CO
synthetic-bank-statement.csv row 4
- transposed digits? the books have 379.51 on 2026-03-17 (synthetic-quickbooks-general-ledger.csv row 28); the difference, 18.00, divides by 9
- a Stripe payout not recorded: book it gross, with its fees, from the payout's itemized report
4. on the statement, not in the books 31 Mar 2026 -25.00 MONTHLY SERVICE FEE
synthetic-bank-statement.csv row 2
- a bank fee or interest, which the bank books and the books often miss
- a payment not recorded in the books
5. in the books, not on the statement 6 Mar 2026 49.00 Software subscription
synthetic-quickbooks-general-ledger.csv row 25
- recorded twice? the same amount is on 2026-03-05 (synthetic-quickbooks-general-ledger.csv row 24), and the bank shows it once
- a payment in the books that never left the bank (a void, or another account)
6. in the books, not on the statement 17 Mar 2026 -379.51 Stripe payout po_SYNTH0010
synthetic-quickbooks-general-ledger.csv row 28
- transposed digits? the statement has 397.51 on 2026-03-17
- a deposit in the books that never reached the bank (a void, or another account)
7. in the books, not on the statement 27 Mar 2026 350.00 Check 1042 to contractor
synthetic-quickbooks-general-ledger.csv row 30
- an outstanding check, not yet cashed
- recorded near the statement's end: it may clear on the next statement
Wrote ./tieout-demo: tie-out.md, exceptions.csv, payouts.csv, journal.csv, months.csv
Catch-up bookkeeping by agent, priced per month behind, is not built. Count me in: https://agentwares.vercel.app/reconcile/waitlist/cli
(exit 0)
$ ls tieout-demo
exceptions.csv
journal.csv
months.csv
payouts.csv
synthetic-bank-statement.csv
synthetic-quickbooks-general-ledger.csv
synthetic-stripe-itemized-payout-reconciliation.csv
synthetic-stripe-payouts.csv
tie-out.mdSources
Read 9 October 2026:
Stripe: Pricing: cards 2.9% + 30¢, $15 per dispute received, instant payouts 1.5% (minimum 50¢)
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Free, non-custodial MCP: validate bounded USDC/USDT payout plans, look up public transfers (read-only), reconcile payouts. Never holds funds or keys.
MCP server for Modern Treasury — payment orders, transactions, counterparties and ledgers.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
Related MCP Servers
- AlicenseAqualityDmaintenanceA read-only MCP server that enables users to analyze their real bank, credit card, loan, and brokerage data through Plaid. It provides financial analysis tools for transactions, balances, investments, liabilities, and debt while keeping all access tokens and data locally stored.1224MIT
- AlicenseAqualityDmaintenanceRead-only MCP server for reconciling SimpleFIN bank data against Firefly III ledger, enabling audit and review workflows without mutation.199 npm1MIT
- AlicenseNot gradedqualityCmaintenanceA local-first MCP server for financial wire message forensics, providing read-only tools to parse, validate, and detect SR2026 address compliance in ISO 8583, SWIFT MT, and ISO 20022 messages.Apache 2.0
- FlicenseNot gradedqualityCmaintenanceA read-only personal finance MCP server for analyzing transaction CSVs, providing tools to filter transactions, summarize spending, categorize charges, and flag unusual activity.1-