Taxes via MCP
Prepare German tax filings with your own AI agent
Your own AI agent — Claude Code, Codex or any other MCP client — can prepare a German company's tax filings in jahresabschluss.io: it reads the figures, runs the official ELSTER validation without sending anything, freezes the values in a prepared operation and hands you an approval link, and you then file in the app with your own ELSTER PIN. That covers the VAT return (UStVA), the EC sales list (ZM), the Dauerfristverlängerung (permanent filing extension) with its special prepayment, the annual VAT return, the E-Bilanz, corporate and trade tax and the Anlage EÜR. Corrections and a few named special cases stay in the app; payroll and withholding tax returns are not part of the tax API.
Last reviewed: 2026-10-19
Which filings your agent can prepare
Each filing type has a fixed identifier, passed to the tax tools as art, plus one reference to the period or the saved return.
VAT return — UStVA (art=ustva)
The Umsatzsteuer-Voranmeldung for a calendar month or quarter, due on the tenth day after the period ends (§ 18(1) UStG). The agent passes the period as YYYY-MM or YYYY-Qn; the figures come straight from the books.
EC sales list — ZM (art=zm)
The Zusammenfassende Meldung reports supplies to business customers in other EU countries to the Federal Central Tax Office, by the 25th day after the month (§ 18a UStG). create_tax_draft builds it for a period from the bookings; the agent then works with its source_id.
Dauerfristverlängerung and special prepayment (art=dauerfrist, sovz)
The permanent extension gives every VAT return one more month (§ 46 UStDV); monthly filers pay a special prepayment of one eleventh of last year's prepayments (§ 47 UStDV). create_tax_draft creates the application for the current year; monthly filers send it as art=sovz.
Annual VAT return (art=ustje)
The USt-Jahreserklärung under § 18(3) UStG. Its draft is created in the app, where the official fields need several human confirmations; the agent then checks and prepares the saved return by source_id.
E-Bilanz (art=ebilanz)
The balance sheet and P&L in the tax authorities' electronic format (§ 5b EStG). The XBRL file is generated in the app; the agent checks and prepares it by filing_id.
Corporate and trade tax (art=kst, gewst)
The Körperschaftsteuer- and Gewerbesteuererklärung of a year. A person releases the return and its facts in the app first; then the agent checks and prepares it by year.
Anlage EÜR (art=euer)
The cash-basis profit statement of sole traders and partnerships (§ 4(3) EStG) — not relevant for a GmbH, which keeps double-entry books. It must be released in the app first, otherwise the API answers 409 freigabe_in_app.
From the books to the filing in five steps
The order in which an agent works, with the MCP tools it calls.
- Find what is due. list_tax_deadlines returns the year's deadlines exactly as the app's tax calendar shows them — VAT returns, special prepayment, EC sales lists, annual returns, prepayments set by the tax office — each with due date, done or overdue. list_tax_filings lists every filing with status and transfer ticket, the reference ELSTER assigns to a transmission.
- Create a draft where needed. create_tax_draft builds an EC sales list or the Dauerfristverlängerung from the books, but only after you have confirmed that no special case applies. An existing draft is never overwritten.
- Check officially. check_tax_filing runs the official ELSTER validation (ERiC, with the test flag). Nothing is transmitted. The answer says whether the data is valid, lists field errors and names every blocker (hindernisse).
- Prepare. prepare_tax_filing freezes the values (manifest) and their SHA-256 fingerprint (manifest_sha256) for 30 minutes and says whether the filing is ready (sendebereit). The agent shows you type, period, the values — for a VAT return the box figures and the amount payable — and each blocker.
- Approve and file. request_tax_filing_approval returns a link that stays valid for 7 days. You open it in the app, which tells you whether the figures are unchanged since the agent prepared them, and you file on the usual filing page with your second factor and ELSTER PIN. get_tax_operation then shows the result.
Example: the September VAT return in one conversation
A request to Claude Code or Codex, and the calls the agent makes:
You: Prepare the VAT return for September 2026. Tell me what is
still missing and give me the link once it is ready.
Agent calls:
list_tax_deadlines (year 2026, status offen) → September is open
get_entity_settings → monthly filer, extension active
get_vat_return (period 2026-09) → box figures, amount payable
get_vat_supplementary (period 2026-09) → the form's conditional questions
Agent: Does any of these apply to September — a triangular
transaction, VAT shown in error (§ 14c), an input-tax
adjustment (§ 15a)?
You: No, none of them.
confirm_vat_supplementary (keine_sonderfaelle, confirm)
check_tax_filing (art ustva, period 2026-09) → valid, no blockers
prepare_tax_filing (art ustva, period 2026-09) → values + manifest_sha256
request_tax_filing_approval (id) → link, valid 7 days
You open the link and file in the app with your second factor and PIN.
get_tax_operation (id) → filed, transfer ticketWhy you file, not the agent
A German tax return is the taxpayer's own declaration: the information must be given truthfully to the best of one's knowledge and belief (§ 150(2) AO). A VAT return takes effect when it arrives — it counts as a tax assessment subject to review (§ 168 AO) — and afterwards it can only be changed by a corrected return. That is why the last step stays with a person.
API keys carry the rights read, write, send, webhooks and finalize. A right that would let the agent transmit to ELSTER itself is not granted at present, so the approval link is the way to file. Your ELSTER PIN is entered in the app and never reaches the chat or the model provider. The server's instructions to every agent say the same: show the values and the fingerprint, recommend the approval link, and never repeat or store a PIN.
What stays in the app
Named limits of the tax API — the response tells the agent which page in the app to open.
- Corrections of a filing that was already sent (Berichtigungen): 422 api_berichtigung_nur_in_app.
- Trade tax with apportionment between municipalities (Zerlegung): 422 api_zerlegung_nur_in_app.
- Payroll tax returns, withholding tax on dividends, the partnership determination return and personal income tax are not part of the tax API.
- Releasing the corporate and trade tax returns and the Anlage EÜR, creating the annual VAT draft and generating the E-Bilanz file.
- Any special case in the VAT return's conditional questions — the agent can only confirm that none applies.
- The company's ELSTER certificate, your PIN and the second factor, as well as company settings such as the VAT period.
Keys, rights and limits
- One key belongs to exactly one company, which follows from the key. It is sent as Authorization: Bearer jab_live_… (or as X-API-Key) and stored only as a hash.
- Deadlines, filings and operations need read, which every key has. Checking, drafting, preparing and requesting the approval link need write.
- Keys are created in the app under Bookkeeping → Settings → “AI agent & API”, confirmed with the second factor. A company that uses only the tax module finds the same card in the settings of the Taxes area; its keys (read and write) reach the tax routes and basic company data, every other route answers 403 nur_steuer_routen.
- Checks, preparations and drafts share a limit of 30 per hour per key; on top of that, 120 requests per minute per key apply.
- In a sandbox twin of the company the official check works as usual, and nothing ever leaves the sandbox.
- What a transmission costs depends on your plan — the pricing page lists it.
Together with your Steuerberater
An agent that prepares filings does not replace your Steuerberater (tax adviser); it gets the figures ready earlier. Your adviser can work in the same software — there is a dedicated area for tax firms — and look at the prepared values before you open the approval link.
A split that works: the agent books and prepares, your adviser checks the special cases such as reverse charge, triangular transactions or corrections, and you file. The software gives no tax advice; the agent's output is a proposal, and responsibility for every filing stays with the company.
Frequently asked questions
Can an AI agent file my German VAT return?
It prepares it: it reads the figures, runs the official ELSTER check and creates an approval link. You file in the app with your second factor and ELSTER PIN. A right that would let the agent transmit by itself is not granted at present.
Which German tax filings can an agent prepare?
The VAT return (UStVA), the EC sales list (ZM), the Dauerfristverlängerung with special prepayment, the annual VAT return, the E-Bilanz, corporate tax, trade tax and the Anlage EÜR. Corrections, trade tax with apportionment, payroll tax, withholding tax and income tax stay outside the API.
Does the official check send anything to the tax office?
No. check_tax_filing runs the ELSTER validation with the test flag and transmits nothing — in a sandbox as well as in the real company.
Does the agent ever see my ELSTER PIN?
No. With the approval link you enter the PIN in the app, so the agent has no use for it. The server also instructs agents never to repeat or store a PIN.
Do I need the bookkeeping subscription for the tax tools?
Not necessarily. With the tax module alone, keys reach the tax routes and the company's master data. Bookkeeping data such as the journal or bank lines needs the bookkeeping or EÜR subscription.
How long does a prepared filing stay valid?
The frozen values hold for 30 minutes; the approval link stays valid for 7 days. When you open it, the app tells you whether the figures changed since the agent prepared them.