使用说明
einvoice mcp
用于德国电子发票合规的MCP服务器——XRechnung 3.0和ZUGFeRD 2.x
MCP服务器,使AI代理(Claude、Cursor、Copilot)能够根据EN 16931验证、生成、解析和检查电子发票的合规性,而无需一行集成代码。
为什么存在
德国自2025年1月起强制B2B电子发票接收(BMF 2024-11-15)。发行授权将于2027年(Vorjahresumsat>80万)和2028年(所有企业)执行。每家德国公司都需要工具——这个MCP服务器为AI代理提供了这种能力。
合规证明
675次测试| 100%覆盖率(2106 stmts)| 0次失败|棉绒清洁(ruff+mypy严格)
跑 make test 以验证。
EN 16931/X计算3.0现场覆盖
在生成的XML输出中测试每个强制性业务术语:
| BT | 现场 | 测试 | 结果 |
|---|---|---|---|
| BT-1 | 发票号码 | test_contains_invoice_id |
通行证 |
| BT-2 | 发布日期 | test_produces_valid_xml |
通行证 |
| BT-3 | 发票类型代码(380/381/384) | test_type_code_380_rechnung, test_type_code_381_gutschrift |
通行证 |
| BT-5 | 货币代码(欧元) | test_currency_eur |
通行证 |
| BT-10 | 买方参考/Liteweg ID | test_buyer_reference_set |
通行证 |
| BT-27 | 卖方名称 | test_contains_seller |
通行证 |
| BT-31 | 卖方增值税ID(schemeID=VA) | test_tax_registration_scheme_id_correct |
通行证 |
| BT-32 | 卖方税号(schemeID=FC) | test_steuernummer_bt32_scheme_fc |
通行证 |
| BT-34 | 卖方电子地址(schemaID=EM) | test_seller_electronic_address_bt34 |
通行证 |
| BT-35..38 | 卖方地址 | test_contains_seller |
通行证 |
| BT-39 | 卖方国家细分 | test_country_subdivision_seller_buyer |
通行证 |
| BT-40 | 卖方国家代码 | test_contains_seller |
通行证 |
| BT-41 | 卖方联系人姓名(BR-DE-5) | test_seller_contact_br_de_5 |
通行证 |
| BT-42 | 卖家联系电话 | test_seller_contact_phone |
通行证 |
| bt-43 | 卖家联系邮箱(br de-7) | test_seller_contact_email_br_de_7 |
通行证 |
| BT-44 | 买方名称 | test_contains_buyer |
通行证 |
| BT-49 | 买方电子地址(方案ID=EM) | test_buyer_electronic_address_bt49 |
通行证 |
| BT-50..53 | 买方地址 | test_contains_buyer |
通行证 |
| BT-54 | 买方国家细分 | test_country_subdivision_seller_buyer |
通行证 |
| BT-55 | 买方国家代码 | test_contains_buyer |
通行证 |
| BT-71 | 交货日期(美国法典第14条第4款第6项) | test_delivery_date_bt71 |
通行证 |
| BT-20 | 付款条件文本 | test_payment_terms_text_roundtrip |
通行证 |
| BT-22 | 发票备注 | test_invoice_note_roundtrip |
通行证 |
| BT-73/74 | 服务期开始/结束 | test_service_period_bt73_bt74 |
通行证 |
| BT-11 | 项目参考 | test_project_reference_bt11 |
通行证 |
| BT-12 | 合同参考 | test_contract_reference_bt12 |
通行证 |
| BT-13 | 采购订单参考 | test_purchase_order_reference_bt13 |
通行证 |
| BT-25 | 前面的发票号码 | test_preceding_invoice_bt25 |
通行证 |
| BT-81 | 付款方式类型代码 | test_payment_means_type_code_custom |
通行证 |
| BT-83 | 汇款信息 | test_remittance_information_roundtrip |
通行证 |
| BT-84 | IBAN(SEPA贷记转账) | test_iban_in_xml |
通行证 |
| BT-9 | 到期日 | test_due_date_roundtrip |
通行证 |
| BT-14 | 销售订单参考 | test_sales_order_roundtrip |
通行证 |
| BT-29 | 卖家注册ID(GLN) | test_seller_registration_id_roundtrip |
通行证 |
| BT-36/37 | 卖家地址2/3行 | test_address_lines_full_roundtrip |
通行证 |
| BT-44 | 买方联系人姓名 | test_buyer_contact_roundtrip |
通行证 |
| BT-46 | 买方联系电话 | test_buyer_contact_roundtrip |
通行证 |
| BT-47 | 买家联系邮箱 | test_buyer_contact_roundtrip |
通行证 |
| BT-51/52 | 买方地址行2/3 | test_address_lines_full_roundtrip |
通行证 |
| BT-70..80 | 交货地点 | test_delivery_location_roundtrip |
通行证 |
| BT-127 | 行项目注释 | test_item_note_roundtrip |
通行证 |
| BT-155 | 卖方项目标识符 | test_seller_item_id_roundtrip |
通行证 |
| BT-156 | 买方项目标识符 | test_buyer_item_id_roundtrip |
通行证 |
| BT-157 | 标准项目ID(GTIN) | test_standard_item_id_roundtrip |
通行证 |
| BG-20/21 | 文件级津贴/费用 | test_allowance_roundtrip |
通行证 |
| BG-27/28 | 线路级津贴/费用 | test_line_allowance_roundtrip |
通行证 |
| BT-16 | 调度建议参考 | test_despatch_advice_roundtrip |
通行证 |
| BT-18 | 发票对象标识符 | test_invoiced_object_identifier_roundtrip |
通行证 |
| BT-23 | 业务流程类型 | test_business_process_type_roundtrip |
通行证 |
| BT-89 | SEPA授权参考(BG-19) | test_sepa_direct_debit_roundtrip |
通行证 |
| BT-91 | 买方IBAN(BG-19) | test_sepa_direct_debit_roundtrip |
通行证 |
| BT-120 | 增值税免税原因文本(BR-E-10) | test_exemption_reason_roundtrip |
通行证 |
| BT-121 | 增值税免税原因代码 | test_exemption_reason_roundtrip |
通行证 |
| BT-28 | 卖方交易名称 | test_trading_names_roundtrip |
通行证 |
| BT-45 | 买方交易名称 | test_trading_names_roundtrip |
通行证 |
| BT-17 | 投标书或标段参考 | test_tender_reference_roundtrip |
通行证 |
| BT-133 | 买方会计参考 | test_bt133_roundtrip |
通行证 |
| BT-134/135 | 线路级计费周期 | test_line_period_roundtrip |
通行证 |
| BT-147/148 | 总价/价格折扣 | test_gross_price_and_discount_roundtrip |
通行证 |
| BT-158 | 项目分类(CPV等) | test_item_classification_roundtrip |
通行证 |
| BG-11 | 卖方税务代表(BT-62..65) | test_seller_tax_rep_roundtrip |
通行证 |
| BG-10 | 收款方(BT-59..61) | test_payee_party_roundtrip |
通行证 |
| BG-18 | 支付卡(BT-87/88) | test_payment_card_roundtrip |
通行证 |
| BT-159 | 项目原产国 | test_country_of_origin_roundtrip |
通行证 |
| BG-30 | 项目属性(BT-160/161) | test_single_attribute_roundtrip |
通行证 |
| BT-15 | 接收建议参考 | test_receiving_advice_roundtrip |
通行证 |
| BT-71 | 交货地点标识符 | test_delivery_location_id_roundtrip |
通行证 |
| BT-82 | 付款方式为文本 | test_payment_means_text_roundtrip |
通行证 |
| BG-24 | 支持文件(BT-122..125) | test_supporting_doc_with_uri |
通行证 |
| Skonto | 付款折扣条款 | test_skonto_roundtrip |
通行证 |
计算规则
| 规则 | 描述 | 测试 | 结果 |
|---|---|---|---|
| BR-CO-14 | 税款总额=每组计算金额的总和 | test_br_co_14_tax_total_equals_sum_of_trade_tax |
通行证 |
| BR-CO-14 | PDF/XML/API总计使用相同的逐组舍入 | test_total_tax_uses_per_group_rounding |
通行证 |
| BR-CO-10 | 行项目行总金额量化为0.01 | test_line_item_net_amount_quantized |
通行证 |
| BR-DE-23 | 当Payment MeansCode=58时,IBAN是强制性的 | test_iban_missing_flags_bt84 |
通行证 |
| §14/4/2 | BT-31或BT-32必须存在 | test_neither_bt31_nor_bt32_flags_missing |
通行证 |
| §14/4/6 | BT-71或BT-73/74必须存在 | test_no_delivery_date_or_period_flags_missing |
通行证 |
| BT-3 | 根据EN 16931规范验证的TypeCode | test_invalid_type_code_rejected |
通行证 |
| BT-25 | 贷记单(381)必须参考之前的发票 | test_credit_note_without_bt25_flags_missing |
通行证 |
| 384-BT-25 | 更正发票(384)必须参考之前的发票 | test_384_with_preceding_ref |
通行证 |
| RC-CONTRY | 反向收费:卖方≠买方国家咨询 | test_ae_same_country_advisory |
通行证 |
| IC-COUNTRY | 共同体内部:卖方≠买方国家要求 | test_k_same_country_error |
通行证 |
| §13b UStG | 反向收费:卖方+买方增值税ID,0%税率 | test_reverse_charge_* |
通行证 |
| §4/1b UStG | 社区内部(K):买方增值税ID,0%税率 | test_k_* |
通行证 |
| §19 UStG | 小型企业家:豁免说明咨询 | test_exempt_without_note_suggests_ku |
通行证 |
| LW-FMT | Leitweg-ID 格式咨询 | test_invalid_leitweg_format |
通行证 |
| VAT-FMT | 德国USt识别号。格式建议(DE+9位数字) | test_invalid_german_vat_format |
通行证 |
| §4/1a UStG | 出口(G):0%税率 | test_export_g_* |
通行证 |
| §33 增值税 | 小额账户咨询 (≤250欧元) | test_small_invoice_gets_kb_hint |
通行证 |
| BR-E-10 | E类税所需的豁免理由 | test_compliance_missing_exemption_reason |
通行证 |
| BR-DE-24 | SEPA DD:授权书(BT-89)+买方IBAN(BT-91) | test_dd_missing_mandate_and_iban |
通行证 |
| BR-DE-15 | XRechnung所需的付款条件(BT-20) | test_payment_terms_missing |
通行证 |
| BR-DE-20 | 最多一种付款指令类型(不混合CT+DD) | test_mixed_ct_and_dd_flagged |
通行证 |
| CC-BT-87 | 代码=48时需要信用卡PAN | test_credit_card_missing_pan |
通行证 |
| REP-BT-63 | 当BG-11出现时,需要税务代表增值税ID | test_tax_rep_without_tax_id |
通行证 |
| IBAN | IBAN格式验证(ISO 13616) | test_invalid_iban_* |
通行证 |
| BIC | BIC格式验证(ISO 9362) | test_invalid_bic_* |
通行证 |
解析忠诚
| 场景 | 描述 | 测试 | 结果 |
|---|---|---|---|
| SchemeID剥离 | DE123456789 (VA) → DE123456789 |
test_str_element_strips_scheme_id |
通行证 |
| 数字方案ID | 4000000000098 (9930) → 4000000000098 |
test_strips_numeric_scheme |
通行证 |
| 说明文本 | Reisekosten (pauschal) 保存完好 |
test_preserves_lowercase_parens |
通行证 |
| Unicode安全 | Artikel (3Ü) 保存(未剥离) |
test_preserves_unicode_parens |
通行证 |
| BT-32 roundtrip | 税号 FC generate → parse | test_steuernummer_roundtrip |
通行证 |
| TypeCode roundtrip | 381 Credit generate → parse | test_type_code_381_roundtrip |
通行证 |
| 交货日期往返 | BT-71生成→ 解析 | test_delivery_date_roundtrip |
通行证 |
| 服务期往返 | BT-73/74发电→ 解析 | test_service_period_roundtrip |
通行证 |
| 电子地址往返 | BT-34生成→ 解析 | test_seller_electronic_address_roundtrip |
通行证 |
| 发票票据往返 | BT-22生成→ 解析 | test_invoice_note_roundtrip |
通行证 |
| 付款条件往返 | BT-20生成→ 解析 | test_payment_terms_text_roundtrip |
通行证 |
| 付款条件优先 | BT-20文本优先于天数 | test_payment_terms_text_overrides_days |
通行证 |
| 采购订单往返 | BT-13生成→ 解析 | test_purchase_order_reference_bt13 |
通行证 |
| 合同往返 | BT-12发电→ 解析 | test_contract_reference_bt12 |
通行证 |
| 项目往返 | BT-11发电→ 解析 | test_project_reference_bt11 |
通行证 |
| 前一张发票往返 | BT-25生成→ 解析 | test_preceding_invoice_bt25 |
通行证 |
| 汇款往返 | BT-83生成→ 解析 | test_remittance_information_roundtrip |
通行证 |
| 空方案剥离 | "PO-42 ()" → "PO-42" |
test_strips_empty_parens |
通行证 |
| 往返发票 | 生成→ 解析→ 验证关键字段 | test_xrechnung_roundtrip |
通行证 |
| 截止日期往返 | BT-9生成→ 解析 | test_due_date_roundtrip |
通行证 |
| 地址行2/3往返 | BT-36/37,BT-51/52生成→ 解析 | test_address_lines_full_roundtrip |
通行证 |
| 买方联系往返 | BT-44/46/47生成→ 解析 | test_buyer_contact_roundtrip |
通行证 |
| 注册ID往返 | BT-29生成→ 解析 | test_seller_registration_id_roundtrip |
通行证 |
| 销售订单往返 | BT-14生成→ 解析 | test_sales_order_roundtrip |
通行证 |
| 项目标识符往返 | BT-155/156/157生成→ 解析 | test_all_item_ids_together |
通行证 |
| 行项目注释往返 | BT-127生成→ 解析 | test_item_note_roundtrip |
通行证 |
| 交货地点往返 | BT-70..80生成→ 解析 | test_delivery_location_roundtrip |
通行证 |
| 返程补贴 | BG-20生成→ 解析 | test_allowance_roundtrip |
通行证 |
| 充电往返 | BG-21发电→ 解析 | test_charge_roundtrip |
通行证 |
| 线路允许往返 | BG-27生成→ 解析 | test_line_allowance_roundtrip |
通行证 |
| 调度建议往返 | BT-16生成→ 解析 | test_despatch_advice_roundtrip |
通行证 |
| 发票对象往返 | BT-18生成→ 解析 | test_invoiced_object_identifier_roundtrip |
通行证 |
| 业务流程往返 | BT-23生成→ 解析 | test_business_process_type_roundtrip |
通行证 |
| SEPA直接借记往返 | BG-19生成→ 解析 | test_sepa_direct_debit_roundtrip |
通行证 |
| Skonto往返 | 付款折扣条款生成→ 解析 | test_skonto_roundtrip |
通行证 |
| BT-133往返 | 生成买方会计参考→ 解析 | test_bt133_roundtrip |
通行证 |
| 交易名称往返 | BT-28/BT-45生成→ 解析 | test_trading_names_roundtrip |
通行证 |
| 投标参考往返 | BT-17生成→ 解析 | test_tender_reference_roundtrip |
通行证 |
| 豁免原因往返 | BT-120/BT-121生成→ 解析 | test_exemption_reason_roundtrip |
通行证 |
| 线路周期往返 | BT-134/BT-135发电→ 解析 | test_line_period_roundtrip |
通行证 |
| 卖方税务代表往返 | BG-11生成→ 解析 | test_seller_tax_rep_roundtrip |
通行证 |
| 收款人往返 | BT-59/60/61生成→ 解析 | test_payee_party_roundtrip |
通行证 |
| 支付卡往返 | BT-87/88生成→ 解析 | test_payment_card_roundtrip |
通行证 |
| 总价往返 | BT-147/148生成→ 解析 | test_gross_price_and_discount_roundtrip |
通行证 |
| 分类往返 | BT-158生成→ 解析 | test_item_classification_roundtrip |
通行证 |
| 原产国往返 | BT-159生成→ 解析 | test_country_of_origin_roundtrip |
通行证 |
| 项目属性往返 | BT-160/161生成→ 解析 | test_single_attribute_roundtrip |
通行证 |
| 接收建议往返 | BT-15生成→ 解析 | test_receiving_advice_roundtrip |
通行证 |
| 交货地点ID往返 | BT-71生成→ 解析 | test_delivery_location_id_roundtrip |
通行证 |
| 付款方式文本往返 | BT-82生成→ 解析 | test_payment_means_text_roundtrip |
通行证 |
| 支持文档往返 | BG-24生成→ 解析 | test_supporting_doc_with_uri |
通行证 |
| 支持文件+招标参考 | BG-24+BT-17共存 | test_supporting_docs_coexist_with_tender_ref |
通行证 |
| 国家细分往返 | BT-39/BT-54生成→ 解析 | test_country_subdivision_seller_buyer |
通行证 |
| 支付方式类型代码往返 | BT-81生成→ 解析 | test_sepa_type_code_roundtrip |
通行证 |
| 买方参考往返 | BT-10生成→ 解析 | test_buyer_reference_roundtrip |
通行证 |
| 税务代表细分往返 | BG-11 BT-39生成→ 解析 | test_tax_rep_subdivision_roundtrip |
通行证 |
| 组合项目特征 | BT-159+BG-30+BT-148一起 | test_all_item_features_together |
通行证 |
| 多参照共存 | BT-17+BT-18在同一发票中 | test_tender_and_invoiced_object_coexist |
通行证 |
| 非ASCII政党名称 | 西里尔文/中文名称 | test_non_ascii_party_names |
通行证 |
| 所有类型代码 | 380、381、384、389、875、876、877 | test_all_type_codes |
通行证 |
| 所有税种 | S、Z、E、AE、K、G、O、L、M | test_all_tax_categories |
通行证 |
| 50行项目 | 大发票构建+解析 | test_many_line_items |
通行证 |
| 混合税种 | 同一发票中的S+G项目 | test_mixed_tax_category_invoice |
通行证 |
| Unicode安全(变音) | 所有文本字段中的ÄÖÜäöüß | test_unicode_invoice |
通行证 |
| 大额发票 | 50行金额高的项目 | test_high_value_invoice |
通行证 |
| 混合税率 | 7%+19%,精确四舍五入 | test_reduced_tax_rate |
通行证 |
| 分类版本 | BT-158-2版本往返 | test_classification_with_version_roundtrip |
通行证 |
| UBL检测 | UBL发票/贷方票据被拒绝 | test_ubl_invoice_rejected |
通行证 |
| 防御性处理程序 | 买方参考/税务申报/收款人/豁免中的异常 | TestDefensiveExceptionHandlers |
通行证 |
| Pydantic BT映射 | 验证错误显示BT编号 | test_invalid_iban_shows_bt84 |
通行证 |
税种覆盖范围(欧盟所有9个增值税类别)
| 类别 | 代码 | 描述 | 结果 |
|---|---|---|---|
| 标准 | S | 19%/7%USt | PASS |
| 零 | Z | 0%评分 | PASS |
| 豁免 | E | 豁免 | PASS |
| Reverse Charge(英语:Reverse Charge) | |||
| Intra-community | K | 欧盟供应 | PASS |
| 出口 | G | 欧盟以外 (第三国交付) | PASS |
| 无主题 | O | 无增值税 | PASS |
| 加那利群岛 | L | IGIC | PASS |
| 休达/梅利利亚 | M | IPSI | 通行证 |
安全强化
| 攻击向量 | 保护 | 测试 | 结果 |
|---|---|---|---|
| XXE实体扩展 | defectedxml预筛选 | test_parse_xml_blocks_xxe |
通行证 |
| 十亿笑声(实体炸弹) | defectedxml预屏 | test_parse_xml_blocks_billion_laughs |
通行证 |
| 外部实体注入 | defectedxml预筛选 | test_parse_xml_blocks_external_entity |
通行证 |
| XML炸弹(>10 MB) | 大小限制 | test_validate_rejects_oversized_xml |
通行证 |
| PDF炸弹(>50 MB base64) | 大小限制 | test_validate_rejects_oversized_pdf |
通行证 |
| 解码后的PDF炸弹(>50 MB) | 解码后保护 | test_validate_rejects_oversized_decoded_pdf |
通行证 |
| KoSIT响应炸弹 | 10 MB+512 KB上限 | test_oversized_content_length_header |
通行证 |
| 错误中的输入反映 | 山宁泰 | test_parse_rejects_unknown_file_type |
通行证 |
| 错误详细信息泄漏 | 通用消息 | test_connection_error_no_hostname_in_message_de |
通行证 |
| 通过重定向进行SSRF | follow_redirects=False |
纵深防御 | 强化 |
| 供应链(Docker) | SHA-256校验和验证 | Dockerfile.kosit |
硬化 |
| 容器权限 | 非root用户(两个容器) | Dockerfile, Dockerfile.kosit |
硬化 |
| 端口暴露 | KoSIT仅绑定到127.0.0.1 | docker-compose.yml |
硬化 |
| 供应链(Python) | uv.lock 用于可重复构建 |
uv.lock |
硬化 |
| IBAN注射 | ISO 13616格式验证 | test_invalid_iban_* |
硬化 |
| BIC注射 | ISO 9362格式验证 | test_invalid_bic_* |
硬化 |
个人资料覆盖范围
| 配置文件 | 生成 | 解析 | 验证 | 合规性 |
|---|---|---|---|---|
| XRechnung 3.0 | 通过 | 通过 | ||
| ZUGFeRD EN16931 | 通过 | 通过 | ||
| ZUGFRD基础 | 通过* | - | - | - |
| ZUGFeRD延长 | 通过* | - | - | - |
*生成生成具有正确指南URI的XML;计划提供完整的解析/验证/合规支持。
模块覆盖范围
| 模块 | 行 | 描述 |
|---|---|---|
config.py |
16 | Pydantic设置 |
errors.py |
36 | 自定义例外 |
models/ |
600+ | Pydantic模型(发票、派对、行项目、结果、枚举) |
prompts/guides.py |
633 | 14个德国税收情景提示 |
prompts/guides_advanced.py |
511 | 8 advanced prompts (欧盟贸易,经常性,结算,形式,第三国,信用) |
prompts/guides_additional.py |
304 | 5 additional prompts (更正, RC+税务代表, 部分结算, IG deep, 折扣) |
resources/ |
1200+ | 24种资源(模式、参考代码、合规性、SEPA、CPV、BT-23、增值税豁免、UNCL 5189) |
services/invoice_builder.py |
576 | 通过drafthorse生成CII XML |
services/invoice_data_builder.py |
320 | 平面参数生成器 |
services/cii_extractors.py |
457 | 党、项目、属性提取 |
services/kosit.py |
80 | KoSIT HTTP客户端 |
services/pdf_generator.py |
182 | 视觉PDF+制作-x嵌入 |
services/xml_parser.py |
720 | CII/ZUGFRD XML解析器 |
tools/compliance.py |
217 | 合规性编排 |
tools/compliance_checks.py |
795 | BR-DE/BR-CO 现场检查 |
tools/arithmetic_checks.py |
230 | BR-CO-10/11/12/13/14/15/16数学检查 |
tools/generate.py |
50 | 生成工具 |
tools/parse.py |
39 | 解析工具 |
tools/validate.py |
33 | 验证工具 |
server.py 排除——FastMCP上下文不能进行单元测试;测试助手 test_server_helpers.py.
工具
| 工具 | 说明 |
|---|---|
einvoice_validate_xrechnung |
根据KoSIT验证器验证XRechnung XML |
einvoice_validate_zugferd |
验证ZUGFeRD PDF(提取+验证嵌入的XML) |
einvoice_generate_xrechnung |
生成符合XRechnung标准的CII XML发票 |
einvoice_generate_zugferd |
生成ZUGFeRD混合PDF(视觉+机器可读) |
einvoice_parse |
将电子发票(XML或PDF)解析为结构化数据 |
einvoice_check_compliance |
根据德国建议检查必填字段+KoSIT验证 |
MCP资源
| 资源URI | 描述 |
|---|---|
einvoice://schemas/line-item |
发票项目的 JSON 架构 (items-Array) |
einvoice://schemas/allowance-charge |
加入/减少的 JSON 方案 |
einvoice://schemas/item-attribute |
文章特征的 JSON 架构 (BG-30) |
einvoice://schemas/supporting-document |
文件的 JSON 架构 (BG-24) |
einvoice://schemas/invoice-data InvoiceData 的完整 JSON 架构 |
|
einvoice://reference/type-codes |
Rechnungstyp-Codes (380, 381, 384, 389, 875, 876, 877) |
einvoice://reference/payment-means-codes 付款方式代码(58=SEPA,59=直接支付,48=信用卡,…) |
|
einvoice://reference/tax-categories 欧盟增值税类别(S,Z,E,AE,K,G,O,L,M) |
|
einvoice://reference/unit-codes |
数量单位代码(H87=单位,HUR=小时,KGM=公斤,…) |
einvoice://reference/eas-codes |
电子地址方案 (EM=电子邮件, 9930=税号, …) |
einvoice://system/kosit-status |
按需KoSIT验证器状态 |
einvoice://reference/e-rechnung-pflichten 2020-2028年电子账户义务及其法律依据 |
|
einvoice://reference/br-de-rules |
德国商业规则 (BR-DE-1..24) 与解决方案说明 |
einvoice://reference/skr04-mapping |
SKR04 常见发票类型账户分配 (DATEV) |
einvoice://reference/credit-note-reasons |
信用原因和更正代码与建议 |
einvoice://reference/leitweg-id-format 路由 ID 结构 (粗地址-细地址检查码), Regex, 示例 |
|
einvoice://reference/tax-category-decision-tree 税务类别决策树(S/Z/E/AE/K/G/O/L/M) |
|
einvoice://reference/sepa-mandate-type-codes SEPA授权类型(CORE/B2B)、序列类型(FRST/RCUR/OOFF)、债权人ID |
|
einvoice://reference/cpv-classification-codes 公共采购CPV代码(BT-158),IT/建筑/咨询/健康 |
|
einvoice://reference/business-process-identifiers |
BT-23 业务流程类型标识符 (Peppol BIS, XInvoice) |
einvoice://reference/vat-exemption-reason-texts |
免税理由 (BT-120/BT-121) — §19, §4, §13b UStG与文本 |
einvoice://reference/uncl-5189-allowance-reason-codes UNCL 5189折扣代码(折扣,折扣,附加费) |
MCP提示
| 提示 | 描述 |
|---|---|
gutschrift_erstellen |
一步一步:创建信用 (381) |
reverse_charge_checkliste 检查清单:反向充电(§13b UStG,AE类) |
|
xrechnung_schnellstart |
快速入门:公共采购商的X账单 |
korrekturrechnung_erstellen |
说明:创建校正 (384) |
abschlagsrechnung_guide |
分期付款/分期付款(型号875/876/877) |
ratenzahlung_rechnung |
创建分期付款发票 |
handwerkerrechnung_35a 按照§35a EStG工人账户 |
|
typecode_entscheidungshilfe |
决策帮助:什么类型的代码适用于什么场合? |
b2b_pflicht_2027 |
清单:从2027年开始准备B2B电子账户 |
steuerprüfung_checkliste 准备电子发票进行业务审计(GoBD,§147 AO) |
|
kleinunternehmer_guide 小型企业家(§19 UStG) — 不含销售税的电子发票 |
|
bauleistungen_13b_guide 建筑服务 / §13b UStG — 建筑行业的反向收费 |
|
differenzbesteuerung_25a_guide 二手商品经销商的差价税(§25a UStG) |
|
stornobuchung_workflow 取消:381 vs 384 vs 新 380 — 决策树 |
|
reiseleistungen_25_guide 旅游服务(§25 UStG) — 利润税 |
|
innergemeinschaftliche_lieferung_guide 欧盟内部交付(UStG第4条第1b款/UStG第6a款) |
|
dauerrechnung_guide 经常性服务的持续发票/月度发票 |
|
steuernummer_vs_ustidnr_guide 税号 vs. 税号 — 决策辅助 (BR-DE-26) |
|
schlussrechnung_nach_abschlag 预付金额(prepaid_amount,BT-113) |
|
proforma_rechnung_guide |
形式发票 — 法律分类, 电子发票处理 |
drittlandlieferung_guide 欧盟以外的出口(UStG第4条第1a款,税务类别G,国际贸易条款) |
|
gutschriftverfahren_389_guide |
信用记录程序 / 自我计费 (TypeCode 389, §14 第 2 款) |
rechnungsberichtigung_vs_storno 381与384:信用,更正或取消?决策树 |
|
reverse_charge_steuervertreter_combined |
Reverse Charge + Tax Representative (BG-11):组合方案 |
teilrechnung_workflow 875 → 877 生命周期:扣除,部分结算,最终结算 |
|
innergemeinschaftliche_deep_dive |
IG交付:抵达确认,ZM,证明义务,eVatR |
skonto_berechnung_guide |
折扣:计算,BT-20编码,§17 UStG税收处理 |
快速开始
先决条件
- Python 3.11+
- Docker(用于KoSIT验证器)
安装
git clone https://github.com/Mavengence/einvoice-mcp.git
cd einvoice-mcp
pip install -e ".[dev]"
启动KoSIT验证器
make docker-up
在端口8081上启动KoSIT验证器(v1.6.2,XRechnung场景v2026-01-31)。
本地操作(stdio)
make dev
配置
克劳德桌面版
{
"mcpServers": {
"einvoice": {
"command": "python",
"args": ["-m", "einvoice_mcp"],
"env": {
"KOSIT_URL": "http://localhost:8081"
}
}
}
}
克劳德代码
claude mcp add einvoice -- python -m einvoice_mcp
光标
添加 .cursor/mcp.json:
{
"mcpServers": {
"einvoice": {
"command": "python",
"args": ["-m", "einvoice_mcp"],
"env": {
"KOSIT_URL": "http://localhost:8081"
}
}
}
}
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
KOSIT_URL |
http://localhost:8081 |
Kosh验证器URL |
LOG_LEVEL |
INFO |
日志级别(调试、信息、警告、错误、严重) |
示例提示
Validiere diese XRechnung: [XML einfügen]
Erstelle eine Rechnung von TechCorp GmbH (DE123456789) an ClientCorp GmbH
für 40 Stunden Software-Beratung à 150€/Stunde mit 19% USt.
Parse diese E-Rechnung und zeig mir die Positionen.
Prüfe ob diese Rechnung XRechnung-konform ist und gib Verbesserungsvorschläge.
高级示例
Erstelle eine Gutschrift (TypeCode 381) für Rechnung RE-2025-099 über
200€ netto mit 19% USt.
Erstelle eine Rechnung mit Reverse Charge (§13b UStG, Kategorie AE):
Verkäufer DE123456789, Käufer ATU12345678, Dienstleistung 5.000€.
Erstelle eine Rechnung mit 2% Skonto bei Zahlung innerhalb von 10 Tagen.
Erstelle eine Rechnung mit SEPA-Lastschrift (PaymentMeansCode 59),
Käufer-IBAN DE89370400440532013000, Mandatsreferenz MREF-2025-001.
Erstelle eine Rechnung mit Lieferort: Lager Hamburg, Hafenstraße 42,
20457 Hamburg.
Erstelle eine innergemeinschaftliche Lieferung (Kategorie K) an
einen französischen Kunden (FR12345678901).
Erstelle eine steuerbefreite Rechnung (§19 UStG, Kleinunternehmer)
mit Befreiungsgrund und Code vatex-eu-132.
Erstelle eine Rechnung für ein Vergabeverfahren mit Losnummer VERGABE-2026-42
und Kontierungsreferenz KST-4711 pro Position.
Erstelle eine Korrekturrechnung (TypeCode 384) für die fehlerhafte Rechnung
RE-2026-001 mit korrigiertem Steuersatz.
建筑
[AI Client] --> stdio --> [FastMCP Server]
|-- drafthorse (CII XML generation/parsing)
|-- factur-x (PDF/A-3 embedding/extraction)
|-- reportlab (Visual PDF rendering)
|-- defusedxml (XXE protection on all parse paths)
'-- httpx --> [KoSIT Validator :8081]
KoSIT验证器堆栈
| 组件 | 版本 | 来源 |
|---|---|---|
| KoSIT验证器 | v1.6.2(SHA-256验证) | itplr kosit/验证器 |
| X技术场景 | v2026-01-31(SHA-256验证) | itplr kosit/验证器配置xrechnology |
| Java运行时 | Eclipse Temurin 17 | OpenJDK |
发展
make install # Install dependencies
make test # Run tests with coverage
make lint # Ruff + mypy strict
make fmt # Format code
make docker-up # Start Docker stack
支持的商业条款(EN 16931)
| BT/BG | 字段 | 生成 | 解析 | 合规性 |
|---|---|---|---|---|
| BT-1 | 发票号码 | 是 | 是 | 有 |
| BT-2 | 发布日期 | 是 | 是 | 有 |
| BT-3 | 类型代码(380/381/384) | 是 | 是 | 有 |
| BT-5 | 货币代码 | 是 | 是 | 有 |
| BT-9 | 截止日期 | 是 | 是 | -- |
| BT-10 | 买方参考/Liteweg ID | 是 | 是 | 有 |
| BT-11 | 项目参考 | 是 | 是 | -- |
| BT-12 | 合同参考 | 是 | 是 | -- |
| BT-13 | 采购订单参考 | 是 | 是 | -- |
| BT-14 | 销售订单参考 | 是 | 是 | -- |
| BT-16 | 调度建议参考 | 是 | 是 | -- |
| BT-17 | 投标书或标段参考 | 是 | 是 | -- |
| BT-18 | 发票对象标识符 | 是 | 是 | -- |
| BT-20 | 付款条件文本 | 是 | 是 | -- |
| BT-22 | 发票备注 | 是 | 是 | -- |
| BT-23 | 业务流程类型 | 是 | 是 | -- |
| BT-25 | 前一张发票(贷记单) | 是 | 是 | 有 |
| BT-27..40 | 卖方+地址(包括2/3行,细分) | 是 | 是 | 有 |
| BT-28 | 卖方交易名称 | 是 | 是 | -- |
| BT-29 | 卖家注册ID(GLN) | 是 | 是 | -- |
| BT-31 | 卖方增值税ID(schemeID=VA) | 是 | 是 | 有 |
| BT-32 | 卖方税号(schemeID=FC) | 是 | 是 | 有 |
| BT-34 | 卖方电子地址 | 是 | 是 | 有 |
| BT-41 | 卖家联系人姓名 | 是 | 是 | 有 |
| BT-42 | 卖家联系电话 | 是 | 是 | 有 |
| BT-43 | 卖家联系邮箱 | 是 | 是 | 有 |
| BT-44..55 | 买方+地址(包括2/3行,细分) | 是 | 是 | 有 |
| BT-45 | 买方交易名称 | 是 | 是 | -- |
| BT-46 | 买方注册ID(GLN) | 是 | 是 | -- |
| BT-49 | 买方电子地址 | 是 | 是 | 有 |
| BT-70..80 | 交货地点(姓名+地址) | 是 | 是 | -- |
| BT-71 | 交货日期 | 是 | 是 | 有 |
| BT-73/74 | 服务期限 | 是 | 是 | 有 |
| BT-81 | 付款方式类型代码 | 是 | 是 | -- |
| BT-83 | 汇款信息 | 是 | 是 | -- |
| BT-84 | 卖方IBAN | 是 | 是 | 有 |
| BT-86 | BIC | 是 | 是 | -- |
| BT-89 | SEPA授权参考 | 是 | 是 | 有 |
| BT-91 | 买方IBAN(SEPA直接借记) | 是 | 是 | 有 |
| BT-120 | 增值税免税原因文本 | 是 | 是 | 有 |
| BT-121 | 增值税免税原因代码 | 是 | 是 | -- |
| BT-127 | 行项目注释 | 是 | 是 | -- |
| BT-155 | 卖家商品标识符 | 是 | 是 | -- |
| BT-156 | 买方项目标识符 | 是 | 是 | -- |
| BT-157 | 标准项目ID(GTIN/EAN) | 是 | 是 | -- |
| BT-159 | 项目原产国 | 是 | 是 | -- |
| BT-160/161 | 项目属性(BG-30,名称/值) | 是 | 是 | -- |
| BG-20/21 | 文件级津贴/费用 | 是 | 是 | -- |
| BG-27/28 | 线路级津贴/费用 | 是 | 是 | -- |
| BT-15 | 收到建议参考 | 是 | 是 | -- |
| BT-71 | 交货位置标识符 | 是 | 是 | -- |
| BT-82 | 付款方式为文本 | 是 | 是 | -- |
| BG-24 | 支持文件(BT-122..125) | 是 | 是 | -- |
| BT-133 | 买方会计参考 | 是 | 是 | -- |
| Skonto | 付款折扣条款(百分比,天数) | 是 | 是 | -- |
信用注释(Credit Note)
对于贷记单(类型代码381),服务器:
- 将XML标头名称设置为“GUTSCHRIFT”,并相应地设置PDF标题
- 合规性检查中需要BT-25(前面的发票号码)
- 在PDF标题中显示“参考:[发票号码]”
- 根据EN 16931类型代码白名单(380、381、384、389、875、876、877)进行验证
例子: type_code="381", preceding_invoice_number="RE-2025-099"
配置文件选择指南
| 配置文件 | 用例 | 指南URI |
|---|---|---|
XRECHNUNG |
德国公共部门(B2G),需要Leitweg ID | urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0 |
ZUGFERD_EN16931 |
B2B发票(ZUGFeRD PDF的默认值) | urn:cen.eu:en16931:2017 |
ZUGFERD_BASIC |
简化的B2B发票 | urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic |
ZUGFERD_EXTENDED |
带有附加字段的扩展B2B发票 | urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended |
德国合规指南
看 文档/德国_合作_ GIDE.md 用于:
- 类型代码决策树(380/381/384/875/876/877)
- 税种决策树(S/Z/E/AE/K/G/O/L/M)
- Leitweg ID格式和来源
- 反向收费与社区内部供应
- 工人帐户 §35a EStG
- 必填字段清单 for XInvoice 3.0
局限性
- ZUGFeRD基本/扩展:Generation生成的XML具有正确的指导URI,但解析、验证和合规性检查仅针对XRechnung 3.0和ZUGFeRD EN16931进行了测试。
- 批处理:每次工具调用处理一张发票。对于批量操作,请按顺序调用工具。
故障排除
无法使用 KoSIT Validator
Fehler: KoSIT-Validator nicht erreichbar. Bitte prüfen Sie die Verbindung.
- 启动Docker容器:
make docker-up - 等待健康状态:
docker compose -f docker/docker-compose.yml ps - 手动验证:
curl http://localhost:8081/server/health - 检查端口8081是否被防火墙或其他进程阻止
Docker Container 无法启动
# Check logs
docker compose -f docker/docker-compose.yml logs kosit
# Common issue: port already in use
lsof -i :8081
# Restart clean
docker compose -f docker/docker-compose.yml down
docker compose -f docker/docker-compose.yml up -d
已识别的 UBL 格式
Fehler: UBL-Format erkannt. Dieses Tool unterstützt nur CII.
解析器仅支持CII(跨行业发票)XML,这是XRechnung和ZUGFeRD的标准。如果您有UBL发票,请先使用外部工具将其转换为CII。
Pydantic验证错误
生成发票时,字段错误现在引用BT编号:
Fehler: Ungültige Rechnungsdaten:
- BT-84 (IBAN): String should match pattern ...
- BT-27 (Verkäufername): String should have at least 1 character
检查 德国合规指南 根据现场要求。
测试未运行
# Install dev dependencies
pip install -e ".[dev]"
# Run unit tests only (no Docker needed)
make test
# Run integration tests (requires Docker)
make docker-up
pytest -m integration
监管参考
- EN 16931 --欧洲电子发票标准
- X帐户3.0(场景3.0.2) --德国CIUS(核心发票使用规范)
- ZUGFeRD 2.x / Factor-X 1.08 版本 --PDF/A-3混合发票格式
- BMF 2024-11-15 --德国联邦财政部电子发票授权
- §14美国贸易法委员会 --德国增值税法发票要求
- 第14节 Abs。4号 UStG 税号或税号。需要(BT-31 / BT-32)
- 第14节 Abs。4 第6号 UStG --要求的交货日期或服务期(BT-71/BT-73/74)
- BR-CO-14 --税款总额必须等于每组计算金额的总和
- BR-DE-5 --卖方联系人(XRechnung必须填写)
- BR-DE-7 --卖家联系电子邮件(XRechnung必须提供)
- BR-DE-23 --当PaymentMeansCode=58(SEPA)时,IBAN是强制性的
- §13b美国贸易法委员会 --反向收费:需要卖方+买方增值税ID,0%税率
- §4 第1b UStG --社区内供应:需要买方增值税ID,0%税率
- §19美国贸易法委员会 《小型企业规则:免税备忘录》(exemption note advisory for TaxCategory E)
- BG-19 --SEPA直接借记(PaymentMeansCode=59,买方IBAN,授权参考)
- BR-DE-20 --最多一种付款指令类型(无混合贷记转账+直接借记)
- BR-DE-24 --SEPA直接借记:授权参考+买方IBAN必填
- BR-E-10 --E类税种要求的增值税免税理由(BT-120)
- UStG第4条第1a款 --欧盟以外出口(G类税):要求0%的税率
- §33 UStDV — 小额发票咨询(发票≤250欧元毛额)
- 折扣 --提前付款折扣条款(CII中的付款折扣条款)
- 384 校正 --更正发票必须参考之前的发票(BT-25)
- RC-国家 --反向收费:卖方/买方国家咨询(§13b允许国内)
- IC国家 --社区内部:要求卖方≠买方国家
- BGB第632a条 --建筑/服务合同摘要
- §35 A腹肌。3奥运会 --Handwerkerleistungen税收减免(劳动力的20%,最高1.200欧元/年)
- §271 BGB 按协议付款截止日期(分期付款)
- ISO 13616 --IBAN格式验证(卖方+买方)
- 国际标准化组织9362 --BIC/SWIFT格式验证
许可证
麻省理工学院