mcpField
E
elster-mcp-server

elster-mcp-server

本地服务
github.com/lukasschwarz金融数据2815 周前更新

关于 elster-mcp-server

elster-mcp-server 是通过 Puppeteer 操作德国税务门户 ELSTER 的实验性 MCP 服务,可用于提交增值税预申报(UStVA)、准备 EÜR 与 ESt 表单以及同步收件箱。它由社区开发,与税务机关无关联,使用前需自行核实合规性。

主要功能

  1. 01UStVA 表单填写与两步确认提交
  2. 02EÜR 和 ESt 表单填写至检查步骤为止
  3. 03已提交表单与收件箱的只读同步
  4. 04§13b 反向征税供应商识别
  5. 05会话状态查询与取消管理

适用场景

  1. 01在 ELSTER 门户中准备季度增值税预申报
  2. 02为年度 EÜR 收入与支出数据预填表单
  3. 03读取已提交表单历史与收件箱文件

MCP 相关

该项目是一个 MCP 服务,向 MCP 客户端暴露登录测试、表单填写、确认提交及会话管理等工具,其中仅 elster_ustva_confirm 会实际提交数据。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"lukasschwarz-elster": {
"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>",
"ELSTER_NAME": "<ELSTER_NAME>",
"ELSTER_FIRST_NAME": "<ELSTER_FIRST_NAME>",
"ELSTER_STREET": "<ELSTER_STREET>",
"ELSTER_HOUSE_NUMBER": "<ELSTER_HOUSE_NUMBER>",
"ELSTER_ZIP": "<ELSTER_ZIP>",
"ELSTER_CITY": "<ELSTER_CITY>",
"ELSTER_COUNTRY": "<ELSTER_COUNTRY>",
"ELSTER_HEADLESS": "<ELSTER_HEADLESS>",
"ELSTER_EST_SKIP_EUR": "<ELSTER_EST_SKIP_EUR>"
}
}
}
}
启动命令npx -y elster-mcp-server
需要配置的环境变量
ELSTER_CONFIG_PATHPath to a config.json that holds all settings below. Recommended.
ELSTER_PFX_PATHAbsolute path to your ELSTER certificate (.pfx).
ELSTER_PASSWORD密钥Password for the .pfx certificate.
ELSTER_TAX_NUMBERYour Steuernummer in the format issued by your Finanzamt.
ELSTER_STATE_CODETwo-digit ELSTER federal-state code of your Finanzamt.
ELSTER_NAMELast name / company name.
ELSTER_FIRST_NAMEFirst name.
ELSTER_STREETStreet.
ELSTER_HOUSE_NUMBERHouse number.
ELSTER_ZIPZIP code.
ELSTER_CITYCity.
ELSTER_COUNTRYISO country code, default DE.
ELSTER_HEADLESSRun Chromium headless (true/false). Default true.
ELSTER_EST_SKIP_EURIf 1, skip the EUER pre-hook in ESt sessions.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmelster-mcp-server0.1.0

工具

14

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

elster-mcp-server

一个模型上下文协议(MCP)服务,可让 Claude(或任何支持 MCP 的客户端) 通过 Puppeteer 操作德国税务门户 ELSTER。


⚖️ 法律声明 / 法律提示

英语

  • 本项目是一个实验性的社区开发工具。它与德国联邦财政部、ELSTER 项目或任何税务机关均无关联,也未获得其认可或支持。
  • 以编程方式提交税务数据的官方支持途径是 ERiC 库(需要注册为软件供应商)。本工具则使用你提供的凭据,通过真实用户会话自动操作公开的 ELSTER 网站门户——与普通用户采取的途径相同。
  • ELSTER 官方**使用条款(“Nutzungsbedingungen”)**可能限制自动访问门户。运行本软件之前,你有责任确认自己的具体用途是否获得许可。
  • 使用风险自负。 作者按**“现状”提供本软件,不作任何形式的担保(请参阅 LICENSE)。对于因使用本软件而导致的错误税务申报、账户停用、错过截止日期、数据丢失或任何其他后果,作者不承担任何责任**。
  • 本项目不提供税务建议(不属于 § 2 StBerG 所指的“税务事务协助”)。如果你不确定申报是否正确,请咨询 Steuerberater。
  • 在商业场景中使用本软件的运营者(例如代表第三方提交申报)可能受德国 Steuerberatungsgesetz 约束,并必须自行确认其许可资质。

德语

  • 本项目是一个实验性的社区开发工具。它既未获得德国联邦财政部、ELSTER 项目或任何税务机关的支持、授权或审核。
  • 以编程方式提交税务数据的官方且受德国联邦财政部支持的途径是 ERiC 库(需要注册为软件开发商)。本工具则使用你提供的证书数据,通过公开的 ELSTER 网站门户操作——与用户通过浏览器自行办理的途径相同。
  • ELSTER 官方使用条款可能限制或禁止自动访问门户。在使用本工具之前,确认你的具体用途是否获准,完全由你自行负责。
  • 使用风险自负。 作者按不提供任何担保的方式提供本软件(请参阅 LICENSE)。对于因使用本软件而导致的错误税务申报、账户停用、错过截止日期、数据丢失或其他后果,作者不承担任何责任。
  • 本项目不提供税务咨询,不属于 § 2 StBerG 所指的税务咨询。如有疑问,请咨询税务顾问。
  • 将本软件用于商业目的的人员(例如代表第三方提交申报)可能受《税务咨询法》约束,必须自行确认具备相应资质。

工具内置的实用防护措施

  • 唯一实际传输数据的工具是 elster_ustva_confirm——在 elster_ustva_start 暂停于 AWAITING_CONFIRM 后,必须再次显式调用该工具。未经这第二次确认,不会发送任何数据。
  • EÜR 和 ESt 工具绝不会提交。它们只会填写表单,直到“Prüfen”步骤,然后停止,让你在 ELSTER 门户中自行检查并提交。
  • 所有同步、历史记录和收件箱工具均为只读,不会修改 ELSTER 端的状态。

功能

工具功能说明是否提交?
elster_login_test验证你的证书和密码能否登录否
elster_config_show显示已加载的配置(机密信息已隐藏)否
elster_kennziffern_list返回受支持的 UStVA Kennziffern 及其说明否
elster_ustva_generate_xml生成 UStVA XML 快照(仅存档)否
elster_ustva_detect_reverse_charge检测 §13b 反向征税供应商否
elster_ustva_start登录、填写、运行 Prüfung,然后暂停等待确认暂停
elster_ustva_confirm在你审核后点击 "Absenden"是
elster_eur_start填写 Anlage EÜR 直到 Prüfung,然后点击 "Speichern und Verlassen"否
elster_est_start打开 ESt 1 A,填写基本信息,运行 Prüfung,并保持浏览器打开 30 分钟否
elster_sync_history读取 "Übermittelte Formulare"(可选包含 PDF)否
elster_sync_inbox读取 ELSTER 收件箱(可选包含 PDF)否
elster_session_status / _list / _cancel会话管理否

要求

  • Node.js ≥ 18
  • ELSTER 证书文件(.pfx)——从 https://www.elster.de → "Mein ELSTER" → "Mein Benutzerkonto" → "Zertifikat verlängern" 获取
  • 证书密码
  • 你的 Steuernummer 和 Bundesland-Code

安装

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

Puppeteer 会在首次安装时安装捆绑的 Chromium(约 150 MB)。

配置

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

config.json 中的所有键都可以通过环境变量覆盖 (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)。环境变量优先于文件中的值。

你也可以通过 ELSTER_CONFIG_PATH=/path/to/your/config.json 指定其他配置文件。

你的 Finanzamt 对应的两位数 stateCode 由 ELSTER 发布—— 请在 ELSTER 官方文档中查找当前值。

反向征税供应商列表

在 config.json 的 ustva.reverseChargeSuppliers 下添加你的 §13b UStG 供应商。 匹配规则是不区分大小写的正则表达式,会针对凭证的 contactName 或 description 进行匹配。示例条目:

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

与 Claude Desktop 配合使用

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %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"
      }
    }
  }
}

模板参见 examples/claude_desktop_config.json。

与任意 MCP 客户端配合使用

以 stdio 模式运行服务:

node dist/index.js

然后通过客户端的 MCP 传输方式连接。

典型的 UStVA 流程

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: "..." }

典型的 EÜR 流程

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

安全说明

  • 切勿提交你的 .env、config.json 或 .pfx。 默认情况下,这些文件已被 git 忽略。
  • 证书密码会从环境变量或配置中读取并传递给 Puppeteer——请确保运行此服务的主机可信。
  • 首次运行时,将 ELSTER_HEADLESS=false 设置一次,以观察运行过程并确认所有配置均已正确连接。

限制

  • ELSTER 门户的选择器可能会变化。如果流程中断,请使用 ELSTER_HEADLESS=false 运行,并检查写入 ./screenshots/ 的截图。
  • ESt 工具有意设计为轻量封装——德国所得税表格(Anlage G、V、N、S、KAP 等)有数十种,包含数千个字段。此服务提供框架(登录、打开、按标签或 ID 填写、Prüfen),而字段选择由你决定。
  • 不支持 XML 提交。官方程序化提交需要 ERiC 库(需注册为软件供应商)。此服务使用与所有纳税人相同的 Online-Formular 流程。

许可证

MIT

贡献

欢迎提交 PR。最有用的补充包括:

  1. 为改版后的 ELSTER 页面提供更可靠的选择器
  2. 为 ESt 提供预填的 Anlage G / V / N / S 模板
  3. 为 elster_ustva_* 提供类型化的 report 架构验证器

提交 issue 时,请使用 ELSTER_HEADLESS=false 运行,并附上 ./screenshots/ 下显示故障的截图。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。