elster-mcp-server — Claude Code MCP server: UStVA filing via ELSTER
An MCP server that drives the ELSTER tax portal with Puppeteer: fills UStVA returns, prepares EÜR and ESt, reads the inbox and filing history under your own certificate.
claude mcp add --env ELSTER_CONFIG_PATH=<ELSTER_CONFIG_PATH> --env ELSTER_PFX_PATH=<ELSTER_PFX_PATH> --env ELSTER_PASSWORD=<ELSTER_PASSWORD> --env ELSTER_TAX_NUMBER=<ELSTER_TAX_NUMBER> --env ELSTER_STATE_CODE=<ELSTER_STATE_CODE> --transport stdio elster-mcp-server -- npx -y elster-mcp-serverWhat elster-mcp-server does
It logs in with your .pfx certificate and password, types the form, runs Prüfung, then stops. Nothing reaches the tax office until a second call arrives: elster_ustva_start pauses at AWAITING_CONFIRM and only elster_ustva_confirm clicks the submit button. That split is the main safety rail on the write path.
EÜR and ESt never get submitted at all. The server completes the fields, runs the check and leaves the browser window open so you press the final button yourself. Inbox and history tools are read-only. §13b suppliers are spotted by case-insensitive regexes listed under ustva.reverseChargeSuppliers, matched against the contact name or the voucher description.
You need Node.js 18 or newer, a .pfx file from “Mein ELSTER”, its password, your Steuernummer and the two-digit state code. Puppeteer downloads a bundled Chromium, roughly 150 MB, on first install. The author labels the project experimental and unaffiliated with any tax authority; ELSTER's Nutzungsbedingungen may limit automated portal access, so whether your use is allowed is on you. Filing on behalf of third parties commercially can fall under the Steuerberatungsgesetz.
What it helps with
- fill and review a UStVA return from an agent chat
- prepare Anlage EÜR without retyping every line
- flag §13b reverse-charge suppliers in vouchers
- pull submitted forms and inbox messages as PDF
- check that a certificate and password still log in
Example prompts for the agent
- Test the login with
elster_login_test - Fill last quarter's UStVA and stop before submitting
- Sync the ELSTER inbox and list unread messages
How to install elster-mcp-server
Platform CLI
claude mcp add --env ELSTER_CONFIG_PATH=<ELSTER_CONFIG_PATH> --env ELSTER_PFX_PATH=<ELSTER_PFX_PATH> --env ELSTER_PASSWORD=<ELSTER_PASSWORD> --env ELSTER_TAX_NUMBER=<ELSTER_TAX_NUMBER> --env ELSTER_STATE_CODE=<ELSTER_STATE_CODE> --transport stdio elster-mcp-server -- npx -y elster-mcp-serverReplace <…> with your own values. 9 more environment variables are in the server README
Platform CLI
codex mcp add elster-mcp-server --env ELSTER_CONFIG_PATH=<ELSTER_CONFIG_PATH> --env ELSTER_PFX_PATH=<ELSTER_PFX_PATH> --env ELSTER_PASSWORD=<ELSTER_PASSWORD> --env ELSTER_TAX_NUMBER=<ELSTER_TAX_NUMBER> --env ELSTER_STATE_CODE=<ELSTER_STATE_CODE> -- npx -y elster-mcp-serverReplace <…> with your own values. 9 more environment variables are in the server README
Config file
{
"mcpServers": {
"elster-mcp-server": {
"command": "npx",
"args": [
"-y",
"elster-mcp-server"
],
"env": {
"ELSTER_CONFIG_PATH": "<ELSTER_CONFIG_PATH>",
"ELSTER_PFX_PATH": "<ELSTER_PFX_PATH>",
"ELSTER_PASSWORD": "<ELSTER_PASSWORD>",
"ELSTER_TAX_NUMBER": "<ELSTER_TAX_NUMBER>",
"ELSTER_STATE_CODE": "<ELSTER_STATE_CODE>"
}
}
}
}Replace <…> with your own values. 9 more environment variables are in the server README
Config file
{
"servers": {
"elster-mcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"elster-mcp-server"
],
"env": {
"ELSTER_CONFIG_PATH": "<ELSTER_CONFIG_PATH>",
"ELSTER_PFX_PATH": "<ELSTER_PFX_PATH>",
"ELSTER_PASSWORD": "<ELSTER_PASSWORD>",
"ELSTER_TAX_NUMBER": "<ELSTER_TAX_NUMBER>",
"ELSTER_STATE_CODE": "<ELSTER_STATE_CODE>"
}
}
}
}Replace <…> with your own values. 9 more environment variables are in the server README
Platform CLI
gemini mcp add -e ELSTER_CONFIG_PATH=<ELSTER_CONFIG_PATH> -e ELSTER_PFX_PATH=<ELSTER_PFX_PATH> -e ELSTER_PASSWORD=<ELSTER_PASSWORD> -e ELSTER_TAX_NUMBER=<ELSTER_TAX_NUMBER> -e ELSTER_STATE_CODE=<ELSTER_STATE_CODE> elster-mcp-server npx -y elster-mcp-serverReplace <…> with your own values. 9 more environment variables are in the server README
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about elster-mcp-server
How do I install elster-mcp-server in Claude Code?
Run claude mcp add elster-mcp-server -e ELSTER_PASSWORD=<ELSTER_PASSWORD> -- npx -y elster-mcp-server. The fuller variant adds --transport stdio and passes ELSTER_CONFIG_PATH, ELSTER_PFX_PATH, ELSTER_PASSWORD, ELSTER_TAX_NUMBER and ELSTER_STATE_CODE through --env.
What does elster-mcp-server do?
It automates the ELSTER web portal through Puppeteer: fills UStVA returns, prepares EÜR and ESt forms, and reads filed forms and inbox messages. UStVA is the only thing it can submit, and only after explicit confirmation.
Can I use it to file for other people?
The author warns that commercial use, such as submitting on behalf of third parties, may fall under the Steuerberatungsgesetz, and that verifying your own licensing is up to you.