Skip to main content
Glama

elster-mcp-server

A Model Context Protocol (MCP) server that lets Claude (or any MCP-capable client) drive the German tax portal ELSTER via Puppeteer.


English

  • This project is an experimental, community-built tool. It is not affiliated with, endorsed by, or supported by the Bundesministerium der Finanzen, the ELSTER project, or any tax authority.

  • The official, supported way to submit tax data programmatically is the ERiC library (registration as a software vendor required). This tool instead automates the public ELSTER web portal with a real user session — the same path a human user takes — using credentials YOU provide.

  • The official ELSTER terms of use ("Nutzungsbedingungen") may restrict automated access to the portal. Whether your specific use is permitted is your responsibility to verify before running this software.

  • Use at your own risk. The author(s) provide this software AS IS, WITHOUT WARRANTY OF ANY KIND (see LICENSE). The author(s) accept NO liability for incorrect tax submissions, account suspensions, missed deadlines, lost data, or any other consequences arising from the use of this software.

  • This project is not tax advice (no "Hilfeleistung in Steuersachen" in the sense of § 2 StBerG). If you are unsure whether a submission is correct, consult a Steuerberater.

  • Operators using this software in a commercial context (e.g. submitting on behalf of third parties) may be subject to the German Steuerberatungsgesetz and must verify their own licensing situation.

Deutsch

  • Dieses Projekt ist ein experimentelles, von der Community gebautes Werkzeug. Es ist weder vom Bundesministerium der Finanzen noch vom ELSTER-Projekt noch von einer Finanzbehörde unterstützt, autorisiert oder geprüft.

  • Der offizielle, vom BMF unterstützte Weg zur programmatischen Übermittlung von Steuerdaten ist die ERiC-Bibliothek (Registrierung als Softwarehersteller erforderlich). Dieses Tool nimmt stattdessen den Weg über das öffentliche ELSTER-Webportal — denselben Weg, den ein menschlicher Nutzer per Browser geht — mit Zertifikatsdaten, die DU bereitstellst.

  • Die offiziellen ELSTER-Nutzungsbedingungen können automatisierten Zugriff auf das Portal einschränken oder verbieten. Es liegt in deiner alleinigen Verantwortung zu prüfen, ob dein konkreter Anwendungsfall erlaubt ist, bevor du dieses Tool nutzt.

  • Nutzung auf eigenes Risiko. Die Autor:innen stellen die Software OHNE JEGLICHE GEWÄHRLEISTUNG bereit (siehe LICENSE). Die Autor:innen übernehmen keine Haftung für fehlerhafte Steuerübermittlungen, gesperrte Konten, versäumte Fristen, Datenverluste oder sonstige Folgen aus der Nutzung dieser Software.

  • Dieses Projekt ist keine Steuerberatung im Sinne des § 2 StBerG. In Zweifelsfällen ist ein:e Steuerberater:in zu konsultieren.

  • Wer diese Software gewerblich einsetzt (z.B. Übermittlung im Auftrag Dritter), unterliegt unter Umständen dem Steuerberatungsgesetz und muss seine Berechtigung selbst sicherstellen.

Practical safeguards built into the tool

  • The only tool that actually transmits data is elster_ustva_confirm — it requires an explicit second call after elster_ustva_start has paused at AWAITING_CONFIRM. Nothing is sent without that second confirmation.

  • The EÜR and ESt tools never submit. They only fill the form up to "Prüfen" and stop, so you review and submit yourself in the ELSTER portal.

  • All sync / history / inbox tools are read-only and never modify state on the ELSTER side.


Related MCP server: mcp-browser-kit

Features

Tool

What it does

Submits?

elster_login_test

Verifies your certificate + password can log in

No

elster_config_show

Shows the loaded config (secrets redacted)

No

elster_kennziffern_list

Returns the supported UStVA Kennziffern with descriptions

No

elster_ustva_generate_xml

Generates a UStVA XML snapshot (archive only)

No

elster_ustva_detect_reverse_charge

Detects §13b reverse-charge suppliers

No

elster_ustva_start

Logs in, fills, runs Prüfung, then pauses for confirmation

Pauses

elster_ustva_confirm

Clicks "Absenden" after you reviewed

Yes

elster_eur_start

Fills Anlage EÜR up to Prüfung, then "Speichern und Verlassen"

No

elster_est_start

Opens ESt 1 A, fills basics, runs Prüfung, keeps browser open 30 min

No

elster_sync_history

Reads "Übermittelte Formulare" (optionally with PDFs)

No

elster_sync_inbox

Reads ELSTER inbox (optionally with PDFs)

No

elster_session_status / _list / _cancel

Session management

No

Requirements

  • Node.js ≥ 18

  • An ELSTER certificate file (.pfx) — get it from https://www.elster.de → "Mein ELSTER" → "Mein Benutzerkonto" → "Zertifikat verlängern"

  • The certificate password

  • Your Steuernummer and Bundesland-Code

Install

git clone https://github.com/YOUR_USERNAME/elster-mcp-server.git
cd elster-mcp-server
npm install
npm run build

Puppeteer will install a bundled Chromium on first install (~150 MB).

Configuration

cp config.example.json config.json
$EDITOR config.json

All keys in config.json can be overridden by environment variables (ELSTER_PFX_PATH, ELSTER_PASSWORD, ELSTER_TAX_NUMBER, ELSTER_STATE_CODE, ELSTER_NAME, ELSTER_FIRST_NAME, ELSTER_STREET, ELSTER_HOUSE_NUMBER, ELSTER_ZIP, ELSTER_CITY, ELSTER_COUNTRY, ELSTER_DOWNLOAD_DIR, ELSTER_SCREENSHOT_DIR, ELSTER_HEADLESS, ELSTER_EST_SKIP_EUR). Env vars win over the file.

You can also point the loader at a different config file via ELSTER_CONFIG_PATH=/path/to/your/config.json.

The two-digit stateCode for your Finanzamt is published by ELSTER — look up the current value in the official ELSTER documentation.

Reverse-Charge supplier list

Add your §13b UStG suppliers under ustva.reverseChargeSuppliers in config.json. Patterns are case-insensitive regexes matched against the voucher's contactName or description. Example entry:

{ "pattern": "your-supplier\\s+ireland", "region": "EU", "name": "Your Supplier Ireland" }

Use with Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "elster": {
      "command": "node",
      "args": ["/absolute/path/to/elster-mcp-server/dist/index.js"],
      "env": {
        "ELSTER_CONFIG_PATH": "/absolute/path/to/elster-mcp-server/config.json"
      }
    }
  }
}

See examples/claude_desktop_config.json for the template.

Use with any MCP client

Run the server in stdio mode:

node dist/index.js

Then connect via your client's MCP transport.

Typical UStVA flow

1. elster_login_test                          → { ok: true }
2. elster_kennziffern_list                    → reference for valid codes
3. elster_ustva_start({                       → { sessionId: "ustva-..." }
     year: 2026,
     period: "Q1",
     report: { "81": 12000, "86": 300, "66": 1845.30 }
   })
4. elster_session_status({ sessionId })       → poll until status == AWAITING_CONFIRM
   (open the screenshot at screenshotPath to verify)
5. elster_ustva_confirm({ sessionId })        → { success: true, ticket: "..." }

Typical EÜR flow

1. elster_login_test
2. elster_eur_start({
     year: 2025,
     data: {
       betriebseinnahmen: 50000,
       fahrzeugkosten: 1200,
       afa: 800,
       homeOffice: 1260
     }
   })
3. elster_session_status (poll until SAVED or AWAITING_REVIEW)
4. open the ELSTER portal in your browser → "Meine Formulare" → review the draft → submit manually

Security notes

  • Never commit your .env, config.json, or .pfx. They are gitignored by default.

  • The certificate password is read from env / config and passed to Puppeteer — make sure the host running this server is trusted.

  • Set ELSTER_HEADLESS=false once to watch the first run and confirm everything is wired correctly.

Limitations

  • The ELSTER portal selectors can change. If a flow breaks, run with ELSTER_HEADLESS=false and check the screenshots written to ./screenshots/.

  • The ESt tool is intentionally a thin wrapper — German income-tax forms (Anlage G, V, N, S, KAP …) are dozens of different forms with thousands of fields. This server provides the framework (login, open, fill-by-label-or-id, Prüfen) and leaves the field choices to you.

  • No XML submission path. Official programmatic submission requires the ERiC library (registration as a software vendor). This server uses the same Online-Formular path that any taxpayer uses.

License

MIT

Contributing

PRs welcome. The most useful additions are:

  1. More robust selectors for changed ELSTER pages

  2. Pre-filled Anlage G / V / N / S templates for ESt

  3. A typed report schema validator for elster_ustva_*

When opening an issue, please run with ELSTER_HEADLESS=false and attach the screenshot under ./screenshots/ that shows the failure.

Available Tools

14 tools
elster_config_showA

Shows the currently loaded ELSTER configuration (with secrets redacted) so you can verify env vars / config.json were picked up.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a key behavioral trait: secrets are redacted, which is important for an agent to know. Without annotations, this adds value. However, it does not detail whether the tool reads from files, environment, or cache, but for a display tool this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence that is perfectly concise with no wasted words. It front-loads the action and adds necessary context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple display tool with no parameters and no output schema, the description fully covers the purpose, output behavior (redacted secrets), and usage context (verification of env vars/config).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so baseline is 4. The description adds no parameter info, but none is needed. It provides context about what is shown (config, secrets redacted) beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool shows the currently loaded ELSTER configuration with secrets redacted, specifying the action (show), resource (config), and a key detail (redaction). It distinguishes from sibling tools which are action-oriented (start, list, generate, etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to verify environment variables or config.json were picked up, but does not explicitly state when not to use it or mention alternatives. The purpose is clear enough for an agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_est_startA

Starts an ESt 1 A (Einkommensteuererklärung) form-prep session. Opens the form, fills taxpayer basics from config + any extra fields you provide (by ELSTER input id/name hint), runs Prüfung, then waits 30 min for you to review in the portal. NEVER submits.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoOptional map of field-id hints → values. Each key is matched against ELSTER input id/name as substring. Use empty {} to only fill taxpayer basics from config.
yearYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description covers key behaviors: it fills data, runs a check, waits 30 minutes, and explicitly states it never submits. However, it does not mention rate limits, authentication needs, or what happens if a session already exists. The blocking wait is mentioned but not elaborated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. First sentence states purpose, second details steps and the constraint. Information is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite low complexity (2 params, no output schema), the description omits important details like return value, how to check session status, and prerequisites. It mentions a 30-minute wait but doesn't clarify if the function blocks or returns immediately. Leaves significant gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds value for the 'data' parameter by explaining matching by substring and the use of empty object. The 'year' parameter is left without explanation beyond the schema. With 50% schema coverage, the description partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool starts an ESt 1 A form-prep session, detailing the steps: opens form, fills taxpayer basics, runs Prüfung, waits 30 minutes, and never submits. This distinguishes it from siblings like elster_ustva_start (sales tax) or elster_eur_start (another form).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description implies it is for pre-submission preparation, but lacks prerequisites like needing an active session or instructions on when to call this tool over session management tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_eur_startA

Starts an EÜR (Anlage Einnahmen-Überschuss-Rechnung) form-prep session. Fills the form up to Prüfung, then tries to "Speichern und Verlassen" so the draft survives in ELSTER. NEVER submits.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesMap of field names to numeric amounts. Supported fields: betriebseinnahmen, kfzPrivatNutzung, fahrzeugkosten, kfzSteuer, telekommunikation, versicherungen, bewirtung, reisekosten, bankgebuehren, fremdleistungen, software, buchfuehrung, beratung, werbung, gwg, steuern, uebrigeBA, afa, homeOffice, iabAbzug.
yearYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It reveals key behaviors: filling up to Prüfung, saving and exiting, and never submitting. This is transparent about the session lifecycle and constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action, and contains no extraneous words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and a complex procedure, the description explains the internal steps and final state (draft survives). It is missing prerequisites (e.g., active session) but is largely complete for the tool's purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description covers the 'data' parameter but not 'year'. The tool description does not add meaning for 'year' and merely restates the schema's field list for 'data'. Schema description coverage is 50%, but the description does not compensate for the missing parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool starts an EÜR form-prep session, fills it up to Prüfung, saves the draft, and explicitly states it NEVER submits. This distinguishes it from sibling start tools like elster_est_start and elster_ustva_start.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for EÜR form preparation and clarifies the draft-saving behavior. However, it does not explicitly state when not to use it or compare to siblings, though the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_kennziffern_listA

Returns the list of supported UStVA Kennziffern (codes 81, 86, 66 etc.) with descriptions and whether they are NET (base amount) or TAX (tax amount).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must carry the burden. It states the return content but does not disclose side effects, authentication requirements, or idempotency. Minimal but sufficient for a simple list query.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, includes specific examples and categorization. No extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, description adequately explains what is returned. Lacks mention of prerequisites like authentication, but for a simple list of codes it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so baseline is 4 per guidelines. Description adds no parameter info because none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'returns' and resource 'list of supported UStVA Kennziffern', includes examples and type distinction (NET/TAX). No sibling tool serves a similar purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. Usage is implied by the tool's name and description, but no alternatives or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_login_testA

Verifies that the configured certificate + password can log into the ELSTER portal. Returns success and final URL or an error. Use this once before submitting anything.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description must disclose behavioral traits. It states returns success/final URL or error, which covers basic behavior. However, could provide more detail on side effects (likely none) or error format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose. Every sentence provides value: first states what it does, second gives usage guidance. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (no params, no output schema), the description covers purpose, return behavior, and usage guidance adequately. A bit more detail on error cases could improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and schema coverage is trivially 100%. The description adds no param info, but with zero params, the baseline is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool verifies login ability with certificate+password, specifying both verb and resource. It distinguishes from siblings like elster_ustva_start which are for actual submissions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this once before submitting anything', providing clear context for when to use. Does not mention exclusions but given the tool's simplicity, the guidance is adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_session_cancelC

Cancels a running session (closes the browser, marks status as CANCELLED).

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the main effects (closes browser, marks cancelled) but omits important details like irreversibility, required permissions, or potential side effects. The transparency is adequate for a simple operation but could be more explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded, delivering the core action in a single sentence. Every word adds value, with no filler. It earns a 4 for efficiency, though a bit more context would not harm conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (simple), lack of output schema, and absent annotations, the description covers only the basic action. It does not address when to cancel, whether the session must be active, or what happens to other operations. The completeness is minimal for an agent to use it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, and the description adds no meaning to the 'sessionId' parameter beyond what the name implies. The parameter's purpose is obvious from context, but the tool description should clarify its role (e.g., which session, as the identifier).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('cancels') and the resource ('running session'), and adds specific behavioral details like closing the browser and marking status as CANCELLED. However, it does not explicitly distinguish from sibling session management tools, though the difference is implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus related tools like elster_session_list or elster_session_status. The description lacks context for prerequisites, such as requiring an active session, or when cancellation is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_session_listA

Lists all currently tracked sessions (USTVA / EUR / EST / SYNC) with their status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must be transparent. It states sessions are listed with status, but does not disclose if the tool is read-only, requires authentication, or has any side effects. Adequate for a simple list, but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, efficient, front-loads purpose and scope. Could be slightly more informative about what 'status' entails, but no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description is mostly complete for a simple list tool. It mentions session types and status, though it could clarify the meaning of status or mention any limits. Still adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, schema coverage 100% => baseline 4. Description does not need to add param info, so score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'Lists' and resource 'currently tracked sessions' with enumerated session types and status, making purpose immediately clear and distinguishing from sibling tools like elster_session_status which likely focus on single sessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives. The description implies it's for an overview, but does not state exclusions or conditions such as 'use this to get a list before canceling a session'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_session_statusB

Returns the current status, progress log, and any screenshot path for a session started via elster_ustva_start / elster_eur_start / elster_est_start.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Only lists outputs (status, progress log, screenshot path) without disclosing whether the tool is read-only, requires authentication, or what happens on invalid sessionId. Minimal behavioral insight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with verb and outputs, zero extraneous words. Ideal conciseness for a simple status-check tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool is simple (1 param, no output schema), but description omits return value details (e.g., status codes, progress log structure) and does not compensate for missing schema documentation. Adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% with no description for sessionId. Description adds no meaning beyond the schema, failing to clarify format, constraints, or purpose of the single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'Returns' and names three resources: status, progress log, screenshot path. It explicitly links to sibling start tools (elster_ustva_start, etc.), distinguishing from listing or cancellation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage after starting a session via named tools, but lacks explicit guidance on when to use versus alternatives like elster_session_list or elster_session_cancel. No when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_sync_historyC

Reads "Übermittelte Formulare" (transmission history) from ELSTER. Optionally downloads PDFs.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearsNo
downloadPdfsNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must carry full burden. It indicates a read operation with optional download, but does not disclose side effects, permission requirements, or whether downloading modifies state. Minimal transparency beyond the obvious.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise (one sentence) but sacrifices detail. It is front-loaded with the main action, but could usefully add more information without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters, no output schema, and no annotations, the description is incomplete. It does not explain years, return format, or prerequisites (e.g., valid session). Among many sibling tools, more context would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema describes two parameters (years, downloadPdfs) with 0% description coverage. The tool description hints at 'downloads PDFs' but does not explain the years parameter or its purpose. No parameter-level documentation provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reads transmission history from ELSTER and optionally downloads PDFs. The verb 'reads' and resource 'transmission history' are specific. However, it does not explicitly differentiate from sibling tools like elster_sync_inbox, though the name suggests history vs inbox.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. Does not mention prerequisites, ideal scenarios, or when to avoid using it. Sibling tools are listed but not addressed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_sync_inboxC

Reads ELSTER inbox messages ("Posteingang"). Optionally downloads each message as PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxPagesNo
downloadPdfsNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits but only states two actions: reading and optionally downloading PDFs. It fails to mention authentication requirements, side effects (e.g., state changes from downloads), pagination behavior, or error handling, which are critical for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, properly front-loaded with the primary action. However, it could benefit from slightly more structure to separate reading from downloading, though overall it remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and only two parameters, the description lacks detail on the return format (e.g., message list with metadata), prerequisites, and edge cases. While the tool appears simple, the description omits information needed for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain parameters. It only hints at 'downloadPdfs' via 'Optionally downloads each message as PDF', but provides no meaning for 'maxPages'. The parameter semantics for half the parameters are entirely unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'Reads' and the resource 'ELSTER inbox messages', with an optional action 'downloads each message as PDF'. It differentiates from sibling tools which cover config, sessions, forms, etc., making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., for specific inbox filtering or batch operations). The description does not mention prerequisites or when not to use it, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_ustva_confirmA

Confirms submission of a UStVA session that is in AWAITING_CONFIRM state. Triggers the final "Absenden" click. Returns the transmission ticket on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It mentions the final action and return value (transmission ticket), but lacks details on error behavior, idempotency, or side effects. The state requirement adds some transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero fluff. The first sentence states the purpose and required state, and the second adds the action and return value. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the description covers the core functionality and return value. It does not explain error conditions or idempotency, but given the tool's straightforward nature, it is largely complete. Minor gaps in parameter documentation reduce completeness slightly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter (sessionId) has no description in the schema (0% coverage) and the tool description does not mention it at all. The description fails to add meaning beyond the schema, leaving the agent to guess the expected format or role of sessionId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool confirms submission of a UStVA session in a specific state (AWAITING_CONFIRM) and triggers the final 'Absenden' click. It identifies the specific resource and action, distinguishing it from sibling tools like elster_ustva_generate_xml or elster_ustva_start.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the required state (AWAITING_CONFIRM), implying when to use. It does not explicitly mention when not to use or provide alternatives, but the context from sibling tools makes the usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_ustva_detect_reverse_chargeC

Tests whether a voucher would be detected as Reverse-Charge (§13b UStG) based on the configured supplier patterns. Returns matched supplier and region (EU / NON_EU), or null.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactNameNo
descriptionNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must cover behavior. It mentions returns but omits side effects, required permissions, error cases, or whether the tool is read-only. The phrase 'based on the configured supplier patterns' hints at external configuration not explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no unnecessary words. It front-loads the action ('Tests whether...') and quickly states output. However, it sacrifices completeness for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the domain-specific tax context, lack of output schema, and zero parameter explanations, the description fails to equip an agent for correct invocation. Essential details about input fields, configuration, and error conditions are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not explain the parameters contactName and description. Agents cannot determine what values to provide or how these relate to the voucher being tested. This is a critical gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool tests reverse-charge detection based on supplier patterns and specifies the output (matched supplier and region or null). It distinguishes from sibling tools like elster_ustva_confirm or elster_ustva_generate_xml by focusing on detection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs. alternatives. The description only states what it does, without clarifying prerequisites, scenarios, or exclusions. Agents must infer context from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_ustva_generate_xmlA

Generates an ELSTER UStVA XML snapshot for archiving. Does NOT submit (submission goes via elster_ustva_start). Useful for audit trails.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesTax year, e.g. 2026
periodYesMonth (1-12) or quarter as "Q1".."Q4"
reportYesMap of Kennziffer → amount in EUR. Keys are the bare 2-3 digit code (e.g. "81", "66"). Net amounts for NET-type codes, tax amounts for TAX-type codes.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of disclosure. It clarifies the non-submitting nature and archiving purpose, which is helpful, but lacks details on side effects, performance, or permissions. It does not contradict any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, consisting of two sentences that front-load the purpose and key differentiator. Every sentence adds value without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters with a nested object) and lack of output schema, the description adequately explains its primary function and distinction from siblings. However, it could be more complete by briefly mentioning what the output is (e.g., returned XML string or file), but overall it is sufficient for an expert user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage, so parameters are well described in the schema. The description adds no additional information about the parameters beyond what the schema already provides, so it meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('generates') and resource ('ELSTER UStVA XML snapshot'), clearly stating its archiving purpose and distinguishing itself from the sibling 'elster_ustva_start' by explicitly noting it does NOT submit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool ('for archiving', 'useful for audit trails') and when not to ('does NOT submit'), pointing to the correct sibling tool ('submission goes via elster_ustva_start').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elster_ustva_startA

Starts a UStVA submission session. Opens a browser, logs in, fills the form, runs Prüfung, then PAUSES at AWAITING_CONFIRM. You must explicitly call elster_ustva_confirm to send. Returns a sessionId — poll status via elster_session_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
periodYesMonth (1-12) or "Q1".."Q4"
reportYesMap of Kennziffer → amount in EUR (bare digit keys, e.g. "81":12345.67).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavioral traits: opens a browser, logs in, fills form, runs Prüfung, pauses at AWAITING_CONFIRM, and returns a sessionId. It does not mention authorization or rate limits, but the core behavior is well-covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with critical sequence of actions. No wasted words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multi-step, no output schema), the description is fairly complete: explains the workflow, return value, and next steps. Minor gap: no mention of error handling or prerequisites (e.g., existing config).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is ~67%, so the schema already documents most parameters. The description does not add additional meaning beyond listing the parameters (year, period, report). Adequate but not enhanced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool starts a UStVA submission session, detailing the sequence of actions (opens browser, logs in, fills form, runs Prüfung, pauses). It distinguishes from sibling tools like elster_ustva_confirm by noting the session pauses and requires a confirm call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (to start a UStVA submission) and what not to do (must call elster_ustva_confirm to send, poll status via elster_session_status). Provides clear context for alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv0.1.0
    • First observedelster_config_show
    • First observedelster_est_start
    • First observedelster_eur_start
    • First observedelster_kennziffern_list
    • First observedelster_login_test
    • First observedelster_session_cancel
    • First observedelster_session_list
    • First observedelster_session_status
    • First observedelster_sync_history
    • First observedelster_sync_inbox
    • First observedelster_ustva_confirm
    • First observedelster_ustva_detect_reverse_charge
    • First observedelster_ustva_generate_xml
    • First observedelster_ustva_start

TDQS

A3.6/5.0

Scored across 14 tools

Disambiguation5/5

Each tool targets a distinct operation: configuration, login testing, session management, specific form types (UStVA, EÜR, ESt), and sync features. While some tool names are similar (e.g., elster_ustva_start vs elster_ustva_generate_xml), their descriptions clearly differentiate intent.

Naming Consistency5/5

All tools follow a consistent snake_case pattern with the prefix 'elster_', followed by domain area and verb (e.g., elster_session_list, elster_ustva_start). This makes the set predictable and easy to navigate.

Tool Count5/5

14 tools is well-scoped for a tax form submission server. Each tool serves a necessary function without overloading the surface; covers configuration, login, multiple form workflows, and history retrieval.

Completeness4/5

The tool set covers core workflows: configuration, login verification, session management, UStVA submission (including XML generation and reverse charge detection), and sync/history. Minor gaps exist (e.g., no explicit tool to delete sessions or update configuration), but these are not critical for the primary use case.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers