For AI assistants

CTDS Chimney Top Books

The arithmetic behind Chimney Top Books, offered to AI assistants as 9 tools over the Model Context Protocol.

Bookkeeping arithmetic from Chimney Top Books for a sole proprietor: trial balance, profit and loss, Schedule C summary, the estimated-tax worksheet, statement reconciliation, bank CSV preview and money parsing. Money is integer cents (positive money in, negative money out on a register); dates are YYYY-MM-DD; accounts are named by the code of the default chart (list_chart_of_accounts). Nothing here is tax advice: present Schedule C and estimated-tax figures as a worksheet for the owner or a preparer to confirm. The server holds no books of its own; the caller passes the transactions.

Connect

The server is at https://books.chimneytopdigital.com/api/mcp. It is free, asks for no sign-in and keeps nothing between calls. Rate limits apply per address.

ClientHow
Claude CodeOne command in a terminal:
claude mcp add --transport http ctds-bookkeeping https://books.chimneytopdigital.com/api/mcp
Claude (web and desktop apps)Settings → Connectors → Add custom connector, with the URL https://books.chimneytopdigital.com/api/mcp. No sign-in is asked for.
Codex CLIOne command in a terminal:
codex mcp add ctds-bookkeeping --url https://books.chimneytopdigital.com/api/mcp
Any other MCP clientUse the Streamable HTTP transport with the URL https://books.chimneytopdigital.com/api/mcp: one JSON-RPC message per POST, JSON answers, no session and no authentication.

To see the raw protocol, list the tools and call one from a terminal:

curl -s https://books.chimneytopdigital.com/api/mcp -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

curl -s https://books.chimneytopdigital.com/api/mcp -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_chart_of_accounts","arguments":{}}}'

Tools

Every tool is read-only and idempotent, so a client may run it without asking you first. Arguments are checked before a tool runs; a wrong one comes back as a message naming the field.

list_chart_of_accounts The default chart of accounts

Every account of the default sole-proprietor chart with its code (the id the other tools take), name, type, register kind for bank, card and clearing accounts, and the IRS Schedule C line it rolls up to. Call it first to pick account codes.

  • type (asset | liability | equity | income | expense): Only accounts of this type
trial_balance Trial balance

Turns the transactions into balanced ledger lines (debits positive, credits negative, as the app stores them) and sums them by account between two dates. Total debits always equal total credits; a transaction that does not balance or names an unknown account is a tool error.

  • transactions (array, required): The transactions to sum
  • from (string): First date included
  • to (string): Last date included
profit_and_loss Profit and loss

Income and expense accounts by month, quarter or year for one calendar year, with column totals and net profit, from the transactions given (transfers and equity movements such as owner draws are not income or expenses). Amounts are integer cents in their natural sign.

  • transactions (array, required): The transactions of the year (others are ignored)
  • year (integer, required)
  • grain (month | quarter | year, default "year")
schedule_c Schedule C summary

Rolls the transactions up to the lines of IRS Schedule C (Form 1040) as the default chart maps them: gross receipts, returns, each expense line, the 50% meals limit, Part V other expenses, lines 3, 5, 7, 28, 29 and 31, and any income or expense account with no line. Bookkeeping arithmetic, not tax advice.

  • transactions (array, required): The transactions of the year
  • year (integer, required)
  • from (string): Start of a partial-year range (with to)
  • to (string): End of a partial-year range (with from)
estimated_tax Quarterly estimated-tax worksheet

The app's federal estimated-tax worksheet for a sole proprietor: annualizes the year-to-date Schedule C profit (Form 2210 Schedule AI periods), computes self-employment tax, the standard deduction, a simplified QBI deduction and bracket income tax, applies the prior-year safe harbor when given, and suggests the payment due this quarter with its due date. A planning worksheet, not tax advice; federal only, no credits or state tax.

  • year (integer, required): Tax year (published tables exist for 2025 and 2026; other years use the newest table and say so)
  • quarter (1 | 2 | 3 | 4, required): Installment: periods end Mar 31, May 31, Aug 31, Dec 31
  • ytd_net_profit_cents (integer, required): Schedule C net profit (line 31) from Jan 1 through the period end, cents
  • paid_so_far_cents (integer, default 0): Estimated payments already made for the year, cents
  • filing_status (single | mfj, default "single"): single or married filing jointly
  • other_income_cents (integer, default 0): Annual income from outside the business, cents
  • withholding_cents (integer, default 0): Annual W-2 withholding expected, cents
  • other_ss_wages_cents (integer, default 0): W-2 wages subject to Social Security, cents
  • prior_year_tax_cents (integer): Last year's total tax, for the safe harbor; omit when unknown
  • prior_year_high_income (boolean, default false): Last year's AGI was over $150,000: the safe harbor is 110%
reconcile_statement Reconcile a register against a statement

Compares the cleared transactions of a bank, card or clearing account on or before the statement date with the statement's ending balance (card balances owed are positive, as on the statement) and lists the cleared transactions to mark reconciled and the outstanding ones. Mark each transaction cleared: true when it appears on the statement.

  • account_id (string, required): Register account code (1000, 1010, 1020, 1100 or 2000)
  • statement_date (string, required): Statement ending date
  • statement_balance_cents (integer, required): Statement ending balance, cents (a card balance owed is positive)
  • transactions (array, required): Transactions touching the account, with cleared flags
preview_bank_csv Preview a bank or card CSV export

Reads the text of a bank or card CSV export the way the import does: detects the delimiter, skips preamble lines, finds the header, guesses which columns hold the date, description and amount (or debit and credit) and the date format, then parses the rows into signed cents. Returns the guessed mapping, the first rows and any row errors by line number. Nothing is imported.

  • csv (string, required): The file contents
  • delimiter (, | ; | | |): Force a delimiter; omit to detect it
  • max_rows (integer, default 20): How many parsed rows to return
parse_money Parse a dollar amount into cents

Parses a typed amount ("$1,234.56", "-5", "(45.00)") into integer cents exactly as the app does; anything that is not dollars and cents is a tool error.

  • input (string, required)
allocate_cents Split an amount without losing a cent

Splits a total into parts proportional to the weights (largest-remainder method), so the parts always add up to the total: $10.00 three ways is 334, 333, 333. Use equal weights for an even split.

  • total_cents (integer, required): The amount to split, cents (signed)
  • weights (array, required): One weight per part

Resources

  • ctds://bookkeeping/tax-notice: Not tax advice. Worksheet, not tax advice: the notice to repeat with any Schedule C or estimated-tax figure.

Limits

  • The tools compute from the values the assistant passes in. They cannot read or change anything in your Chimney Top Books account; for that, use the app.
  • Results carry the same notices the app shows. They are estimates and working aids, not professional advice; ask your assistant to show the notice with the figure.
  • Rate limits apply per address. A request over the limit gets a plain error the assistant can read.
  • The tool list may grow. This page is generated from the running server, so it shows the tools as they are today.

If something fails

"Couldn't reach the MCP server", or a 404
Check the address character by character: the server answers only at https://books.chimneytopdigital.com/api/mcp, over HTTPS. Nothing else on this host speaks MCP.
405 Method Not Allowed
The client sent a GET. The server speaks the Streamable HTTP transport without an event stream: one JSON-RPC message per POST, a JSON answer, no session. A notification gets an empty 202.
429 Too Many Requests
Your address passed the fair-use limit. The Retry-After header says how many seconds to wait; the limit resets on its own.
413 Payload Too Large
One request may carry 256 KiB. Send fewer rows per call, or summarize before you send.
A tool answers with an error naming a field
The argument did not match the tool's schema above: money is integer cents (or plain dollars where the tool says so), dates are YYYY-MM-DD, and lists are JSON arrays. Fix the named field and call again; nothing was stored.
Still stuck
Write to support@chimneytopdigital.com with the tool name, the arguments you sent (with nothing personal in them), the time in UTC and the exact message. We keep no record of calls, so what you send us is all we can look at.

How we built the servers, and the rules every one follows: our guide. Questions: hello@chimneytopdigital.com.