Full year via MCP
A full bookkeeping year with one AI agent
Yes — one AI agent connected to the jahresabschluss.io MCP server can run a German company's bookkeeping year from the opening balances to the Saldenliste (trial balance). It books receipts, imports and matches bank statements, issues invoices, keeps the cash book, records fixed assets and depreciation, sets up provisions and accruals, reads the VAT return figures and locks finished periods; at year end it hands the trial balance to the annual-accounts module in the app. Bank connections, company settings, partners' bank details, a first year's manual opening balance and every ELSTER filing stay in the app.
Last reviewed: 2026-10-17
What you need
A subscription
The interface — REST API and MCP server — comes at no extra charge with the bookkeeping subscription (Solo or Gesamtpaket) or the EÜR subscription. It works for corporations such as a GmbH or UG (German limited companies), partnerships and sole traders, on SKR03 or SKR04 (the standard German charts of accounts).
A key with the right rights
read is always included. write covers almost the whole year; send adds emailing invoices; finalize adds locking periods. Create the key under Buchhaltung → Einstellungen → “KI-Agent & API”, confirmed with the second factor. It expires after 30, 90 or 365 days.
An MCP-capable AI program
Any program that can send the key, directly or through the bridge — Claude Code, Claude Desktop, Codex, Gemini CLI, GitHub Copilot, Le Chat and others. See which AI can do your bookkeeping.
Settings done in the app
Chart of accounts, profit method, VAT settings and bank connections are set once in the app. The agent reads them with get_entity_settings but cannot change them.
The year, step by step
The order in which an agent runs a fiscal year, with the tools it calls.
- Fiscal year and opening balances: list_fiscal_years and create_fiscal_year (an existing year comes back unchanged). get_opening_balances shows whether the opening is in place. If the previous year is kept in the system, balance-sheet accounts run over the year end automatically — the new opening is computed from last year's closing, nothing is booked. Where a booked carry-forward is possible, carry_forward_opening_balances takes it from a final previous year; from an open one it books nothing.
- Receipts: upload_receipt puts a PDF, image or XRechnung/ZUGFeRD e-invoice into the receipt inbox. Clear cases are booked by the Autopilot; for the rest the agent reads get_receipt_proposal and books with confirm_receipt or files the receipt as not to be booked with dismiss_receipt. Supplier invoices can also go through book_incoming_invoice.
- Bank: import_bank_statement imports CSV, CAMT.053 or MT940 for a bank account set up in the app. The agent reads the lines with list_bank_transactions, matches payments to open invoices with match_bank_transaction, books the rest with book_bank_transaction and sets private or irrelevant lines aside with ignore_bank_transaction.
- Invoices: create_outgoing_invoice issues the invoice and books revenue, VAT and receivable — after you confirm recipient and amount. With the send right, send_outgoing_invoice emails it as PDF, ZUGFeRD or XRechnung to an address stored for the partner. Corrections: cancel_outgoing_invoice or create_outgoing_credit_note.
- Kassenbuch (cash book): book_cash_entry records cash in and out, list_cash_book reads it, reverse_cash_entry reverses an entry after your confirmation.
- Fixed assets and AfA (depreciation): create_fixed_asset adds the asset to the register — the purchase invoice itself is booked through the receipt. run_depreciation books the year's depreciation, optionally split by month or quarter; dispose_fixed_asset and book_fixed_asset_movement cover disposals, additional costs, impairments and write-ups.
- Rückstellungen (provisions) and Rechnungsabgrenzung (prepaid expenses and deferred income): create_provision, use_provision and release_provision; create_accrual and release_accrual.
- VAT: get_vat_return reads the Umsatzsteuer-Voranmeldung (VAT return) figures for a month or quarter, with Dauerfristverlängerung (permanent filing extension) and Sondervorauszahlung (special advance payment). You submit in the app.
- Festschreibung (period lock): list_bookkeeping_periods shows each month's status; finalize_bookkeeping_period locks up to a date — only with the finalize right, your explicit yes and confirm=true.
- Hand-over: get_saldenliste shows whether debits and credits balance; publish_trial_balance hands the Saldenliste to the annual-accounts module and returns its ID, mapping counts and notes.
Example: closing January in one request
What a monthly request to an agent with access to your files can look like — and the calls behind it.
Receipts go through the hosted server up to about 7 MB each; larger files up to 20 MB go through the REST API. Sending the same file again returns the same receipt instead of a duplicate.
You: Close January 2027. Upload the four PDFs in belege/2027-01,
import the January CAMT.053 statement for the business account,
match payments to open invoices, book what has a receipt or a rule,
show me the VAT figures, and lock January only after I say yes.
Agent calls:
list_fiscal_years, get_opening_balances → is 2027 ready?
upload_receipt (x4), list_receipts → receipts in, Autopilot status
get_receipt_proposal, confirm_receipt → the rest, after your OK
list_bank_accounts, import_bank_statement → statement in
list_bank_transactions, list_open_items,
match_bank_transaction, book_bank_transaction → payments matched and booked
get_vat_return (period 2027-01) → VAT return figures
finalize_bookkeeping_period (until 2027-01-31, confirm=true)
→ only after your yesYear end: from trial balance to annual accounts
Before the hand-over, the agent books what belongs to the closing: run_depreciation for the last months, provisions such as the cost of preparing the annual accounts, and accruals for payments that cover next year. It checks the result with get_saldenliste, compares bank statement balances with book balances through list_bank_accounts for the fiscal year, and goes through list_open_items.
When you are satisfied, it locks the year with finalize_bookkeeping_period and calls publish_trial_balance — the hand-over expects the year's entries to be locked and otherwise reports how many are still open. The annual accounts (Jahresabschluss: balance sheet, profit and loss account and, where required, notes) and the E-Bilanz are then prepared in the app's annual-accounts module — that part is not done by the agent.
Cash-basis businesses on the EÜR subscription use get_euer instead: a preview of the Anlage EÜR with income, expenses and profit. The filing stays in the app.
What stays in the app
Deliberately not part of the interface — these steps need your login, your bank's approval or an official filing.
- Creating API keys — with the second factor.
- The bank connection via OAuth and the mapping of each bank account to a ledger account.
- Company settings such as chart of accounts, profit method or VAT method.
- IBAN and BIC of business partners, as protection against payment-redirection fraud.
- The manual opening balance of a first year with no previous year in the system.
- Every ELSTER filing (the tax authorities' electronic channel), including the VAT return.
- Preparing the annual accounts and the E-Bilanz.
Guardrails the server enforces
- Same booking core as manual entry in the app, under GoBD (the German rules for proper digital bookkeeping): every entry balances debit and credit, booked entries are never deleted or overwritten, corrections are Storno reversals, and nobody books into a locked period.
- For balance-sheet companies, no bank line books to income or expense without a receipt; EÜR businesses book when the money moves.
- Before issuing or emailing an invoice, cancelling one, deleting a receipt or locking a period, our server instructs the agent to state exactly what will happen and wait for your explicit yes — one confirmation per action.
- Invoices are emailed only to addresses stored for the partner, at most 3 sends per invoice and 100 per company in 24 hours.
- Text from receipts, bank references and partner names is data, not instructions. Retries with the same idempotency_key never book twice.
- Our advice: confirm every write tool, give finalize only to the key that should lock, and create a read-only key for analysis.
Working with your Steuerberater
An agent keeping the books does not replace your Steuerberater (tax adviser) — it gives them cleaner books earlier. export_bookkeeping delivers the journal and the trial balance as CSV, and Kanzlei Software batch files or the GoBD export as downloads; get_receipt_archive provides the receipt archive for a fiscal year.
Agree with your adviser when to lock: a good rhythm is that the agent books, your adviser reviews, and only then the period is locked.
Frequently asked questions
Can an AI agent really keep a German company's books for a whole year?
Yes, through our MCP server: fiscal year, receipts, bank, invoices, cash book, fixed assets, provisions, accruals, VAT figures, period lock and the trial balance hand-over. A few steps stay in the app on purpose, such as bank OAuth and ELSTER filings.
Does the agent need a new instruction for every step?
No. You can give it a month at a time, as in the example. It still stops before irreversible steps — issuing or emailing an invoice, locking a period — and waits for your yes.
What happens with the opening balances in the first year?
If there is no previous year in the system, the opening balance is entered manually in the app. From the second year on, balance-sheet accounts carry over automatically; get_opening_balances shows the state.
Can the agent submit the VAT return to ELSTER?
No. get_vat_return reads the figures for a month or quarter; every ELSTER filing happens in the app.
Who prepares the annual accounts?
The app's annual-accounts module, with you or your Steuerberater. The agent's last step is publish_trial_balance, which hands over the trial balance.
What if the agent books something wrong?
Before the period is locked it reverses the entry: storno_journal_entry for a booking, storno_payment for a payment, cancel_incoming_invoice for a supplier invoice, storno_journal_batch for a whole import. Nothing is deleted; after the lock, the period stays as it is.