mcp-facturacion-electronica-es について
mcp-facturacion-electronica-es は、スペインの電子インボイス向け MCP サーバーです。VERI*FACTU、Facturae/FACe、SII など複数の制度に対応し、記録の生成・検証・送信を支援します。
主な機能
- 01VERI*FACTU 記録の生成と検証
- 02記録の送信と状態照会
- 03インボイス QR コードの生成
- 04インボイス取消記録の作成
- 05スペインの電子インボイス制度に対応
活用シーン
- 01VERI*FACTU 記録の準備
- 02インボイス XML 構造の確認
- 03AEAT への送信と状態追跡
MCP 対応
MCP サーバーとして、スペインの電子インボイス記録の生成、検証、送信、照会ツールを対応クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx mcp-facturacion-electronica-esAEAT_ENVTarget environment for AEAT endpoints: 'sandbox' or 'production'.AEAT_CERTIFICATE_PATHFilesystem path to the FNMT-RCM PKCS#12 certificate (.p12 / .pfx) used for MTLS submission to AEAT (VERI*FACTU and SII) and for JWS-signed FACe submission.AEAT_CERTIFICATE_PASSWORDシークレットPassphrase for the PKCS#12 certificate at AEAT_CERTIFICATE_PATH.AEAT_NIFTaxpayer NIF used as the default submitter identity for AEAT submissions.FACE_ENVTarget environment for FACe API: 'sandbox' or 'production'.LOG_LEVELLogging level inherited from mcp-einvoicing-core: DEBUG, INFO (default), WARNING, or ERROR.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
20掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| invoice | object | はい | 請求書データ(date、number、seller、buyer、vat_summary、note)。 |
| impuesto | string | いいえ | 税コード(デフォルトは '01' IVA)。 |
| software_id | string | はい | 認定ソフトウェアの IDSistemaInformatico。 |
| invoice_type | string | いいえ | HAC/1177/2024 Annex I に基づく TipoFactura (F1、F2、F3、R1、R2、R3、R4、R5)。 |
| software_nif | string | はい | ソフトウェア製造元の NIF。 |
| clave_regimen | string | いいえ | ClaveRegimenEspecialOTrascendencia(デフォルトは '01')。 |
| previous_hash | any | いいえ | 直前のレコードの SHA-256 Huella(最初のレコードでは省略)。 |
| previous_fecha | any | いいえ | 前のレコードの FechaExpedicionFactura(DD-MM-YYYY 形式) (previous_hash がある場合は必須)。 |
| previous_num_serie | any | いいえ | 前のレコードの NumSerieFactura(previous_hash がある場合は 必須)。 |
| previous_emisor_nif | any | いいえ | 前のレコードの発行者の NIF(previous_hash がある場合は 必須)。 |
| calificacion_operacion | string | いいえ | CalificacionOperacion(デフォルトは 'S1')。 |
詳細
mcp-facturacion-electronica-es 🇪🇸
はじめに
mcp-facturacion-electronica-es は、スペインの電子請求書に特化した MCP(Model Context Protocol)サーバーです。スペインで併存する6つの制度、すなわち VERI*FACTU、Facturae/FACe、SII、TicketBAI(バスク地方)、NaTicket(ナバラ州)、および Ley 18/2022「Crea y Crece」に基づく B2B 義務に対応した電子請求書の生成、検証、送信ツールを提供します。このサーバーは、mcp-einvoicing-core を基盤として構築されています。この共通基盤ライブラリは、mcp-facture-electronique-fr(フランス、XP Z12-013)と mcp-einvoicing-be(ベルギー、Peppol BIS 3.0)でも使用されており、共通モデル、検証の抽象化、XML ユーティリティ、例外階層を提供します。mcp-einvoicing-core は推移的依存関係として自動的にインストールされるため、追加の手順は必要ありません。
スペインは、納税者の規模、業種、地域に応じて適用される6つの制度が重なる、欧州でも特に複雑な電子請求書制度を運用しています。VERI*FACTU(Royal Decree 1007/2023、Order HAC/1177/2024)は、SII 対象外の納税者に義務付けられる予定のリアルタイム請求書登録制度で、2027年1月と7月に厳格な期限が設けられています(RD-ley 15/2025)。SII(Suministro Inmediato de Informacion、即時情報提供制度)は、すでに大規模納税者(売上高600万 EUR 超)に適用されています。バスク地方では TicketBAI、ナバラ州では NaTicket が運用されており、どちらも国税庁(AEAT)の枠組みとは独立しています。FACe ポータルを介した Facturae XML による B2G 請求書は、2015年以降義務化されています(Ley 25/2013)。
インストール
PyPI から(推奨)
pip install mcp-facturacion-electronica-es
事前にインストールせず、uvx を使用する場合:
uvx mcp-facturacion-electronica-es
ソースから
git clone https://github.com/cmendezs/mcp-facturacion-electronica-es.git
cd mcp-facturacion-electronica-es
uv sync --all-extras
設定
設定はすべて環境変数または .env ファイルで行います。
AEAT / VERI*FACTU / SII
| 変数 | 説明 | 必須 |
|---|---|---|
AEAT_ENV | sandbox または production | はい |
AEAT_CERTIFICATE_PATH | FNMT-RCM PKCS#12 証明書へのパス | 送信時 |
AEAT_CERTIFICATE_PASSWORD | 証明書のパスワード | 送信時 |
AEAT_NIF | 納税者の NIF | 送信時 |
FACe
| 変数 | 説明 | 必須 |
|---|---|---|
FACE_ENV | sandbox または production | はい |
FACe は、VERI*FACTU/SII と同じ AEAT_CERTIFICATE_PATH / AEAT_CERTIFICATE_PASSWORD 証明書を使用した JWS 認証を行います(上記の AEAT セクションを参照)。FACe 用の別個の認証情報は必要ありません。
TicketBAI
| 変数 | 説明 | 必須 |
|---|---|---|
TICKETBAI_ENV | sandbox または production | はい |
TICKETBAI_CERTIFICATE_PATH | 地方の署名証明書へのパス | はい |
TICKETBAI_CERTIFICATE_PASSWORD | 証明書のパスワード | はい |
共通(mcp-einvoicing-core から継承)
| 変数 | 説明 | デフォルト |
|---|---|---|
LOG_LEVEL | DEBUG、INFO、WARNING、ERROR | INFO |
Claude Desktop との連携
このサーバーを Claude で使用するには、claude_desktop_config.json ファイルに次の設定を追加します。
{
"mcpServers": {
"facturacion-es": {
"command": "uvx",
"args": ["mcp-facturacion-electronica-es"],
"env": {
"AEAT_ENV": "sandbox",
"AEAT_CERTIFICATE_PATH": "/path/to/cert.p12",
"AEAT_CERTIFICATE_PASSWORD": "certificate-password"
}
}
}
}
Cursor との連携
Cursor は stdio 経由で MCP サーバーをサポートしています。次の場所に設定を追加します。
- グローバル(すべてのプロジェクト):
~/.cursor/mcp.json - プロジェクト(このリポジトリのみ):
.cursor/mcp.json
{
"mcpServers": {
"facturacion-es": {
"command": "uvx",
"args": ["mcp-facturacion-electronica-es"],
"env": {
"AEAT_ENV": "sandbox",
"AEAT_CERTIFICATE_PATH": "/path/to/cert.p12",
"AEAT_CERTIFICATE_PASSWORD": "certificate-password"
}
}
}
}
変更を適用するには、Cursor のウィンドウを再読み込みします(Ctrl+Shift+P を押してから ウィンドウの再読み込み を選択します)。
Kiro との統合
Kiro は、専用の設定ファイルを使用して MCP サーバーに対応しています。次の 2 つの設定レベルを利用できます。
- グローバル(すべてのプロジェクト):
~/.kiro/settings/mcp.json - ワークスペース(このリポジトリのみ):
.kiro/settings/mcp.json
{
"mcpServers": {
"facturacion-es": {
"command": "uvx",
"args": ["mcp-facturacion-electronica-es"],
"env": {
"AEAT_ENV": "sandbox",
"AEAT_CERTIFICATE_PATH": "/path/to/cert.p12",
"AEAT_CERTIFICATE_PASSWORD": "certificate-password"
},
"disabled": false,
"autoApprove": []
}
}
}
ファイルは保存時に自動的に再読み込みされます。コマンドパレット(Cmd+Shift+P / Ctrl+Shift+P)を開いてから MCP を選択しても、設定を開けます。
Kiro のセキュリティに関するヒント:シークレットを平文で記述する代わりに、
"AEAT_CERTIFICATE_PASSWORD": "${AEAT_CERTIFICATE_PASSWORD}"という構文を使用してください。Kiro は起動時にシェルの環境変数を解決します。
利用可能なツール
VERI*FACTU
es__generate_verifactu_record
改ざん防止請求書レコード(Orden HAC/1177/2024)を生成します。SHA-256 Huella による連鎖で、前のレコードと紐付けます。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
invoice | InvoiceDocument | はい | 請求書の中核モデル(販売者、購入者、明細、VAT) |
previous_hash | string | いいえ | 直前のレコードの SHA-256 Huella(連鎖の最初の場合は null) |
software_id | string | はい | 認証済みソフトウェアの IDSistemaInformatico |
software_nif | string | はい | ソフトウェアメーカーの NIF |
invoice_type | string | はい | F1、F2、R1~R5、または F3 |
{
"tool": "es__generate_verifactu_record",
"arguments": {
"invoice": { "date": "2025-03-15", "number": "2025-0042", "currency": "EUR",
"seller": { "tax_id": { "country_code": "ES", "identifier": "B12345678" }, "name": "Empresa SL" },
"buyer": { "tax_id": { "country_code": "ES", "identifier": "A98765432" }, "name": "Cliente SA" },
"lines": [{ "line_number": 1, "description": "Servicios", "quantity": 10, "unit_price": 100.00, "vat_rate": 21.0 }]
},
"previous_hash": "3C4A9B...", "software_id": "SW-001", "software_nif": "B87654321", "invoice_type": "F1"
}
}
Huellaの連鎖アルゴリズム(キー付きのcampo=valor&形式の正規文字列に対する SHA-256)は、AEAT 独自の huella 仕様および検証用サンプル(specs/verifactu/documentation/Veri-Factu_especificaciones_huella_hash_registros.pdf)とバイト単位で一致することが確認されています。 ⚠️ 未完了:AEAT のテスト環境からの応答を用いた、完全な XSD v1.0 検証。
es__validate_verifactu_record
Orden HAC/1177/2024 とともに公開された公式 XSD(BOE-A-2024-22138)に対して、VERI*FACTU XML レコードを検証します。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
xml | string | はい | VERI*FACTU XML レコードの生データ |
schema_version | string | いいえ | スキーマのバージョン(デフォルト:"1.0") |
{ "tool": "es__validate_verifactu_record", "arguments": { "xml": "<RegistroFacturacion>...</RegistroFacturacion>" } }
構造チェックは、
RegistroAltaとRegistroAnulacionを正しく区別するようになりました(以前のバージョンでは、RegistroAnulacionの有効なドキュメントに対して、RegistroAltaにのみ適用されるTipoFactura/CuotaTotal/ImporteTotalフィールドがないとして誤検出していました)。完全な XSD モードでの検証(resources/verifactu/に同梱されているSuministroLR.xsd)には、実行時のネットワークアクセスが必要です。W3C の xmldsig-core スキーマをリモート URL からインポートするためです。このインポートを解決できない場合は、前述の構造チェックにフォールバックします。
es__submit_verifactu_to_aeat
署名済みの VERI*FACTU レコードを、MTLS(FNMT-RCM Class 1 証明書)経由、または EINVOICING_SIGNER_SOCKET が設定されている場合は署名マイクロサービス経由で、AEAT のリアルタイムエンドポイントに送信します。AEAT_ENV=sandbox|production に従います。送信エンドポイント(.../SistemaFacturacion/VerifactuSOAP)は、AEAT の公式 WSDL で確認されており、alta/anulación の送信と es__query_verifactu_status のクエリ操作の両方で共通です。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
xml | string | はい | 署名済み VERI*FACTU XML |
nif | string | はい | 送信者の NIF |
{ "tool": "es__submit_verifactu_to_aeat", "arguments": { "xml": "<RegistroFacturacion>...</RegistroFacturacion>", "nif": "B12345678" } }
応答には、受理済みレコードのみを対象とする連鎖契約を実装した chain オブジェクトが含まれます。chain.safe_to_chain_from(送信したレコード自身の emisor_nif/num_serie/fecha/huella)が設定されるのは、AEAT の EstadoRegistro が Correcto または AceptadoConErrores の場合のみです。どちらの場合も、レコードがその Huella で実際に保存されたことを示します。それ以外の場合、safe_to_chain_from は null となり、このレコードの Huella を次のレコードの previous_hash として使用しないよう明示的な warning が付与されます。または、結果が deferred の場合は、先に es__query_verifactu_status を呼び出すよう note が付与されます。
es__generate_qr_verifactu
必須の VERI*FACTU QR コード(HAC/1177/2024 Art. 10)を、Base64 エンコードされた PNG として生成します。
「Factura verificable en la sede
electronica de la AEAT」というテキストを含む AEAT 検証 URL をエンコードします。mcp-einvoicing-core(QR 生成)への昇格候補です。URL 形式(ホスト、パス、nif/numserie/fecha/importe クエリパラメーター、およびパラメーターごとの URL エンコード)は、公式 AEAT QR 仕様
(specs/verifactu/documentation/DetalleEspecificacTecnCodigoQRfactura.pdf)に照らして確認済みです。URL は AEAT_ENV に応じて、サンドボックスと本番の ValidarQR ホストを切り替えます。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
nif | string | はい | 発行者の NIF |
invoice_number | string | はい | NumSerieFactura |
invoice_date | string | はい | FechaExpedicionFactura(YYYY-MM-DD) |
total_amount | number | はい | VAT を含む請求書の合計金額 |
size_px | integer | いいえ | QR コードのサイズ(ピクセル単位、デフォルト:200) |
{ "tool": "es__generate_qr_verifactu", "arguments": { "nif": "B12345678", "invoice_number": "2025-0042", "invoice_date": "2025-03-15", "total_amount": 1210.00 } }
es__cancel_verifactu_record
現在のフィンガープリントシーケンスに連鎖する VERI*FACTU 取消記録(RegistroAnulacion、TipoHuella=01)を生成します。取消記録の Huella(IDEmisorFacturaAnulada/NumSerieFacturaAnulada/FechaExpedicionFacturaAnulada/Huella/FechaHoraHusoGenRegistro を対象とする SHA-256。RegistroAlta のものとは異なるフィールドセットであり、縮小コピーではありません)と、最上位の <IDFactura> ブロックの要素名は、公式 AEAT フィンガープリント仕様および SuministroInformacion.xsd に照らして確認済みです。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
original_invoice_number | string | はい | 取消対象の NumSerieFactura |
original_invoice_date | string | はい | FechaExpedicionFactura(YYYY-MM-DD) |
issuer_nif | string | はい | 発行者の NIF |
previous_hash | string | はい | チェーン内の最後の記録の Huella |
{ "tool": "es__cancel_verifactu_record", "arguments": { "original_invoice_number": "2025-0042", "original_invoice_date": "2025-03-15", "issuer_nif": "B12345678", "previous_hash": "3C4A9B..." } }
es__query_verifactu_status
送信済みの VERI*FACTU 記録の EstadoRegistro を照会します(ConsultaFactuSistemaFacturacion/ConsultaLR.xsd)。es__submit_verifactu_to_aeat から deferred の結果が返された場合に使用します。retry_after_seconds 待ってからこのツールを呼び出し、次の記録を連鎖させる前に最終状態(Correcto/AceptadoConErrores/Anulado)を確認してください。es__submit_verifactu_to_aeat と同じく、AEAT_ENV、AEAT_CERTIFICATE_PATH、AEAT_CERTIFICATE_PASSWORD が必要です。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
nif | string | はい | ObligadoEmision の NIF |
name | string | はい | ObligadoEmision の名前/商号 |
invoice_date | string | はい | 照会対象の請求日、YYYY-MM-DD(PeriodoImputacion を決定します) |
num_serie_factura | string | いいえ | NumSerieFactura フィルター(期間全体を照会する場合は省略します) |
{ "tool": "es__query_verifactu_status", "arguments": { "nif": "B12345678", "name": "Empresa SL", "invoice_date": "2025-03-15", "num_serie_factura": "2025-0042" } }
ルート要素名(
ConsultaFactuSistemaFacturacion)とエンドポイント(公式 WSDL に基づき、es__submit_verifactu_to_aeatが使用するものと同じ.../SistemaFacturacion/VerifactuSOAPURL)は、どちらも確認済みです。⚠️ 保留中:ライブの AEAT サンドボックス応答に対するレスポンス解析の検証は、まだ完了していません。
Facturae / FACe
es__generate_facturae_xml
B2G 提出用の Facturae 3.2.2 準拠 XML 請求書を生成します。
mcp-einvoicing-core の InvoiceDocument を使用します。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
invoice | InvoiceDocument | はい | コア請求書モデル |
schema_version | string | いいえ | Facturae スキーマのバージョン(デフォルト:"3.2.2") |
tax_type | string | いいえ | 間接税の種類:IVA(半島部/バレアレス諸島)、IPSI(セウタ/メリリャ)、または IGIC(カナリア諸島)。1 件の請求書で税の種類を混在させることはできません。デフォルト:"IVA" |
recargo_equivalencia_rate | number | いいえ | 該当する場合の Recargo de Equivalencia 税率(%) |
recargo_equivalencia_amount | number | いいえ | Recargo de Equivalencia の明示的な金額。省略した場合は、base_imponible * recargo_equivalencia_rate / 100 として算出されます |
irpf_rate | number | いいえ | IRPF 源泉徴収率(%)。TaxesWithheld に出力されます |
{ "tool": "es__generate_facturae_xml", "arguments": { "invoice": { "date": "2025-03-15", "number": "2025-0042", "seller": { "tax_id": { "country_code": "ES", "identifier": "B12345678" }, "name": "Proveedor SL" }, "buyer": { "tax_id": { "country_code": "ES", "identifier": "S2800000D" }, "name": "Ayuntamiento de Madrid" }, "lines": [{ "line_number": 1, "description": "Suministro", "quantity": 5, "unit_price": 200.00, "vat_rate": 21.0 }] } } }
⚠️ 規制当局による確認待ち
es__sign_facturae_xades
Facturae XML ドキュメントに XAdES-EPES デジタル署名(ETSI EN 319 132-1)を適用します。
mcp-einvoicing-core への昇格候補です(XAdES 署名、スコア 3/3)。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
xml | string | はい | 未署名の Facturae XML |
cert_path | string | はい | PKCS#12 証明書(.p12 / .pfx)へのパス |
signature_policy_id | string | いいえ | 署名ポリシー OID(デフォルト:Facturae 標準) |
証明書のパスワードはツールの引数として受け付けません(ES-SH-6。LLM のコンテキスト/ログへのプレーンテキストの認証情報露出を防ぐため)。代わりに AEAT_CERTIFICATE_PASSWORD を設定してください。
{ "tool": "es__sign_facturae_xades", "arguments": { "xml": "<Facturae>...</Facturae>", "cert_path": "/certs/empresa.p12" } }
⚠️ 規制当局による確認待ち
es__submit_to_face
署名済みの Facturae XML を、FACe インテグレーター REST API 経由で FACe(Punto General de Entrada de Facturas Electronicas)に提出します。FACe-manual-api-integradores.pdf の s2.3 に従い、VERI*FACTU/SII に使用するものと同じ AEAT_CERTIFICATE_PATH/AEAT_CERTIFICATE_PASSWORD 証明書から生成した、JWS 署名付き JWT(RS256、x5c ヘッダー)で認証します。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
xml | string | はい | XAdES 署名付き Facturae XML |
administrative_unit | string | はい | FACe の UnidadTramitadora コード |
accounting_office | string | はい | FACe の OficinasContables コード |
management_body | string | はい | FACe の OrganoGestor コード |
{ "tool": "es__submit_to_face", "arguments": { "xml": "<Facturae>...</Facturae>", "administrative_unit": "U00000038", "accounting_office": "U00000038", "management_body": "U00000038" } }
⚠️ 規制当局による確認待ち
es__get_face_invoice_status
FACe 上の請求書の処理状況を照会します。標準ステータスコードを返します:
1200(登録済み)、2400(受領確認済み)、3100(却下)、4100(支払済み)。FACe の生レスポンスが LLM にそのまま返されることはありません。構造化された機密性のない一部の情報(status_code、codigo、descripcion、numeroRegistro)のみが返されます(ES-SH-7)。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
invoice_id | string | はい | FACe の登録番号 |
{ "tool": "es__get_face_invoice_status", "arguments": { "invoice_id": "FAC-2025-00012345" } }
⚠️ 規制当局による確認待ち
es__validate_facturae_schema
Facturae XML に対して構造フィールドのチェックリストを実行した後、lxml を使用して公式の Facturae 3.2.2 スキーマに対する完全な XSD モードでの検証を試みます。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
xml | string | はい | 検証する Facturae XML |
schema_version | string | いいえ | スキーマのバージョン(デフォルト:"3.2.2") |
{ "tool": "es__validate_facturae_schema", "arguments": { "xml": "<Facturae>...</Facturae>" } }
完全な XSD モードでの検証(
resources/facturae/に同梱されているFacturaev3_2_2.xml)には、実行時のネットワークアクセスが必要です。W3C xmldsig-core スキーマをリモート URL からインポートするためです。そのインポートを解決できない場合は、上記の構造チェックにフォールバックします。
⚠️ 規制当局による確認待ち
SII(Suministro Inmediato de Informacion)
es__build_sii_invoice_record
AEAT SII 技術ガイド v3.0(2024 年 4 月)に準拠した AEAT SII XML レコード(発行 FacturaExpedida または受領 FacturaRecibida)を作成します。TipoComunicacion A0/A1/A4 に対応しています。
| Parameter | Type | Required | Description |
|---|---|---|---|
invoice | InvoiceDocument | Yes | 請求書の基本モデル |
record_type | string | Yes | "issued" または "received" |
communication_type | string | No | "A0" 新規(デフォルト)、"A1" 変更、"A4" 取消 |
{ "tool": "es__build_sii_invoice_record", "arguments": { "invoice": { "date": "2025-03-15", "number": "2025-0042" }, "record_type": "issued", "communication_type": "A0" } }
⚠️ 規制当局の確認待ち
es__submit_sii_batch
請求書のバッチ(最大 10,000 件のレコード)を AEAT SII SOAP エンドポイントに送信します。MTLS が必要です。
| Parameter | Type | Required | Description |
|---|---|---|---|
records | array | Yes | es__build_sii_invoice_record が生成した XML 文字列のリスト |
record_type | string | Yes | "issued" または "received" |
fiscal_year | integer | Yes | 会計年度(YYYY) |
{ "tool": "es__submit_sii_batch", "arguments": { "records": ["<RegistroLRFacturasEmitidas>...</RegistroLRFacturasEmitidas>"], "record_type": "issued", "fiscal_year": 2025 } }
⚠️ 規制当局の確認待ち:
AuthMode.MTLSはまだmcp-einvoicing-coreに実装されていません。
es__query_sii_status
ConsultaFactInformadasEmitidas または ConsultaFactInformadasRecibidas を通じて、送信済み SII バッチのステータスを照会します。
| Parameter | Type | Required | Description |
|---|---|---|---|
nif_titular | string | Yes | SII の titular(納税義務者)の NIF |
nombre_titular | string | Yes | titular の氏名または会社名 |
fiscal_year | integer | Yes | 会計年度(YYYY) |
period | string | Yes | 申告期間:月次の場合は "01"~"12"、年次の場合は "0A" |
record_type | string | No | "issued" または "received"(デフォルト:"issued") |
invoice_number | string | No | 特定の請求書で絞り込む NumSerieFacturaEmisor |
emisor_nif | string | No | 発行者の NIF で絞り込む("received" の場合のみ適用) |
{ "tool": "es__query_sii_status", "arguments": { "nif_titular": "B12345674", "nombre_titular": "Ejemplo SL", "fiscal_year": 2025, "period": "03", "record_type": "issued" } }
⚠️ 規制当局の確認待ち
es__generate_sii_correction
IDFactura を通じて元の請求書を参照する SII の変更(A1)または取消(A4)レコードを生成します。クレジットノートビルダーは mcp-einvoicing-core の候補です(スコア 3/3)。
| Parameter | Type | Required | Description |
|---|---|---|---|
original_invoice | InvoiceDocument | Yes | 訂正対象の請求書 |
corrected_invoice | InvoiceDocument | No | 訂正後のデータ(A4 の場合は null) |
correction_type | string | Yes | "A1" または "A4" |
record_type | string | Yes | "issued" または "received" |
{ "tool": "es__generate_sii_correction", "arguments": { "original_invoice": { "number": "2025-0042" }, "correction_type": "A1", "record_type": "issued" } }
⚠️ 規制当局の確認待ち
TicketBAI
es__generate_ticketbai_xml
XAdES 署名と HuellaTBAI チェーンを含む TicketBAI XML 請求書を生成します。適切な州の XSD(Araba v1.2、Gipuzkoa v1.2、Bizkaia v2.1)を自動的に選択します。
| Parameter | Type | Required | Description |
|---|---|---|---|
invoice | InvoiceDocument | Yes | 請求書の基本モデル |
province | string | Yes | "araba"、"gipuzkoa" または "bizkaia" |
previous_hash | string | No | 直前のレコードの HuellaTBAI |
software_license | string | Yes | TicketBAI ソフトウェアライセンスキー |
cert_path | string | Yes | 署名証明書のパス |
cert_password | string | Yes | 証明書のパスワード |
{ "tool": "es__generate_ticketbai_xml", "arguments": { "invoice": { "date": "2025-03-15", "number": "2025-0042" }, "province": "gipuzkoa", "software_license": "TBAI-GI-12345", "cert_path": "/certs/empresa.p12", "cert_password": "s3cr3t" } }
⚠️ 規制当局の確認待ち:3 つの州別 XSD は個別にパッケージ化する必要があります。州をまたいだ検証は許可されていません。
es__submit_ticketbai
TicketBAI XML レコードを対応するバスク州当局に送信します。エンドポイントは自動的に振り分けられます:Araba(batuz.eus)、Gipuzkoa(tbai.egoitza.gipuzkoa.eus)、Bizkaia(www.bizkaia.eus/ogasun)。
| Parameter | Type | Required | Description |
|---|---|---|---|
xml | string | Yes | 署名済み TicketBAI XML |
province | string | Yes | "araba"、"gipuzkoa" または "bizkaia" |
nif | string | Yes | 送信者の NIF |
{ "tool": "es__submit_ticketbai", "arguments": { "xml": "<T:TicketBai>...</T:TicketBai>", "province": "bizkaia", "nif": "B12345678" } }
⚠️ 規制当局の確認待ち
es__validate_ticketbai_schema
TicketBAI XML ドキュメントを、該当する県の XSD に照らして検証します。スキーマは 県ごとに異なり、相互に置き換えることはできません。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
xml | string | はい | TicketBAI XML |
province | string | はい | "araba"、"gipuzkoa"、または "bizkaia" |
{ "tool": "es__validate_ticketbai_schema", "arguments": { "xml": "<T:TicketBai>...</T:TicketBai>", "province": "gipuzkoa" } }
⚠️ 規制当局による確認待ち
Crea y Crece / B2B
es__generate_b2b_einvoice_es
Ley 18/2022 に準拠する B2B 請求書を生成します。RD 238/2026(BOE-A-2026-7295)により施行され、EN 16931 に準拠した UBL 2.1 または Facturae 3.2.2 形式に対応しています。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
invoice | InvoiceDocument | はい | 請求書の基本モデル |
format | string | いいえ | "ubl"(デフォルト)または "facturae" |
{ "tool": "es__generate_b2b_einvoice_es", "arguments": { "invoice": { "date": "2025-03-15", "number": "2025-0042" }, "format": "ubl" } }
⚠️ RD 238/2026 により、認められる形式(EN 16931:CII/UBL/EDIFACT/Facturae)が確認されています。この ツールは UBL と Facturae を実装しています。公共ソリューションの技術パッケージを定める 省令(財務省、Disp. final tercera)は、まだ公布されていません。
es__check_b2b_mandate_applicability
売上高、県コード、SII 登録状況に基づいて、適用される制度(VERI*FACTU、SII、TicketBAI、NaTicket)を判定します。 Real Decreto 254/2025 の相互排他ロジックを適用します。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
annual_turnover_eur | number | はい | EUR 建ての年間 VAT 対象売上高 |
tax_address_province_code | string | はい | INE 県コード(例:マドリードは "28") |
enrolled_in_sii | boolean | いいえ | SII 登録状況(デフォルト:false) |
entity_type | string | いいえ | "IS"(法人税)または "IRPF" |
{ "tool": "es__check_b2b_mandate_applicability", "arguments": { "annual_turnover_eur": 2500000, "tax_address_province_code": "28", "enrolled_in_sii": false, "entity_type": "IS" } }
⚠️ 規制当局による確認待ち
ユーティリティツール
es__detect_regional_regime
INE 県コードに基づいて、適用される電子請求書制度を検出します。
VERIFACTU、TICKETBAI、NATICKET、または VERIFACTU+SII を返します。
バスク地方の県:01 アラバ、20 ギプスコア、48 ビスカヤ。ナバラ:31。
その他はすべて VERIFACTU を返します。mcp-einvoicing-core への昇格候補です。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
province_code | string | はい | 2 桁の INE 県コード |
enrolled_in_sii | boolean | いいえ | SII 登録状況(デフォルト:false) |
{ "tool": "es__detect_regional_regime", "arguments": { "province_code": "20", "enrolled_in_sii": false } }
⚠️ 規制当局による確認待ち
es__get_compliance_status
事業者プロフィールに適用される現在の義務期限と運用システムを返します。
RD-ley 15/2025 を反映していますが、その後の法令により変更される可能性があります。
mcp-einvoicing-core(汎用の期限レジストリ)への昇格候補です。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
entity_type | string | はい | "IS" または "IRPF" |
province_code | string | はい | INE 県コード |
annual_turnover_eur | number | いいえ | SII の基準額確認用(600 万 EUR) |
enrolled_in_sii | boolean | いいえ | SII 登録状況 |
{ "tool": "es__get_compliance_status", "arguments": { "entity_type": "IS", "province_code": "28", "annual_turnover_eur": 1000000, "enrolled_in_sii": false } }
⚠️ 規制当局による確認待ち
es__parse_aeat_response
AEAT の XML レスポンス(VERI*FACTU または SII)を解析し、構造化 JSON に正規化します。
EstadoEnvio(Correcto/AceptadoConErrores/Incorrecto)、CSV
(安全な検証コード)、およびエラーの詳細を抽出します。mcp-einvoicing-core
(汎用ベンダー XML レスポンスパーサー、スコア 2/3)への昇格候補です。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
xml | string | はい | AEAT の生 XML レスポンス |
response_type | string | いいえ | "verifactu"(デフォルト)または "sii" |
{ "tool": "es__parse_aeat_response", "arguments": { "xml": "<RespuestaRegFactuSistemaFacturacion>...</RespuestaRegFactuSistemaFacturacion>", "response_type": "verifactu" } }
⚠️ 規制当局による確認待ち
アーキテクチャ
mcp-facturacion-electronica-es は、mcp-einvoicing-core を基盤として構築された、
mcp-einvoicing ファミリー内の国別アダプターです。
mcp-einvoicing-core (v0.1.0+)
│ BaseDocumentGenerator, BaseDocumentValidator, BaseLifecycleManager
│ InvoiceDocument, InvoiceParty, InvoiceLineItem, VATSummary, PaymentTerms
│ EInvoicingError, ValidationError, XSDValidationError, PlatformError
│ BaseEInvoicingClient, OAuthConfig, AuthMode (OAUTH2 / BEARER / MTLS)
│ get_logger, format_amount, xml_element, format_error
│
├── mcp-facture-electronique-fr (France — XP Z12-013, Chorus Pro)
├── mcp-einvoicing-be (Belgium — Peppol BIS 3.0, PINT-BE, Mercurius)
├── mcp-facturacion-electronica-es (Spain — this package)
│ ├── verifactu/ record generation, hash chain, QR, cancellation
│ ├── facturae/ Facturae 3.2.2 XML, XAdES-EPES, FACe submission
│ ├── sii/ batch building, AEAT SOAP, corrections
│ ├── ticketbai/ XML generation, provincial routing, validation
│ ├── b2b/ UBL/Facturae Crea y Crece, mandate detector
│ └── utils/ regime detection, AEAT response parser, deadline registry
├── mcp-fattura-elettronica-it (Italy — FatturaPA / SDI)
└── mcp-ksef-pl (Poland — KSeF / FA(2))
ベンダー中立性
このサーバーは標準そのものを実装しています。文書の生成、検証、署名をローカルで行います。商用請求プラットフォームのクライアントではなく、署名鍵や認証情報が自社のインフラストラクチャから外部に出ることはありません。
記録と請求書は、ご自身の証明書を使用して、税務当局(AEAT(SII、VeriFactu)、FACe、または該当する州のTicketBAIプラットフォーム)に直接送信されます。仲介者は介在しません。
対応規格
スペインの電子請求書エコシステムには、適用範囲、形式、導入時期がそれぞれ異なる6つの共存する制度があります。VERI*FACTUでは、改ざん防止のために連鎖させた請求書記録を、AEAT(Agencia Estatal de Administracion Tributaria)にリアルタイムで送信します。2027年から大半の事業者に適用されます(RD-ley 15/2025)。SIIは、大規模納税者に対し、すでに4日以内の通知を義務付けています。XAdES-EPES署名を付与したFacturae XMLは、FACeポータルを通じたすべてのB2G請求を対象とします。バスク地方ではTicketBAIが独立して適用され、3つの州当局がそれぞれ独自のXSDスキーマとエンドポイントを管理しています。ナバラ州ではNaTicketが運用されています。Ley Crea y Creceはすべての事業者にB2B電子請求書を義務付けています。RD 238/2026(BOE-A-2026-7295)では、認められる形式(EN 16931:CII/UBL/EDIFACT/Facturae)が確認されていますが、公共ソリューションの技術パッケージを定めるOrden Ministerialはまだ公布されていません。税務上の住所と売上高に基づく制度の判定は、ほかのすべての操作に先立って必要です。まずes__detect_regional_regimeを使用してください。
規制への対応状況
| 制度 | 適用範囲 | 形式 | 義務化時期 | 状況 |
|---|---|---|---|---|
| VERI*FACTU | SII対象外のすべての事業者 | 独自XML(XSD v1.0 HAC/1177/2024) | 法人税対象者:2027年1月/その他:2027年7月(RD-ley 15/2025) | 実装済み(規制上の確認待ち) |
| Facturae / FACe | B2G(公共部門) | Facturae 3.2.2 + XAdES-EPES | 2015年から義務化(Ley 25/2013) | 実装済み(規制上の確認待ち) |
| SII | 売上高が600万ユーロ超、VATグループ、REDEME | XML SOAP/REST AEAT | すでに義務化(RD 596/2016) | 実装済み(規制上の確認待ち) |
| TicketBAI | アラバ、ギプスコア、ビスカヤ | 州ごとのXML + XAdES + QR | 州ごとに2022~2023年 | 対象範囲から削除(v0.2.0) |
| Crea y Crece(B2B) | すべての事業者(売上高に応じてOM公布から12/24か月後) | UBL 2.1またはFacturae 3.2.2(EN 16931)。CII/EDIFACTも認められるが、未実装 | RD 238/2026公布済み。Orden Ministerial(公共ソリューション)は公布待ち | 実装済み(形式はRD 238/2026で確認済み。公共ソリューションとの接続はOMまで延期) |
| NaTicket | ナバラ州 | 州法に基づくXML + 署名 | 州法上の義務(段階的に導入) | 一部対応(es__detect_regional_regime経由) |
SIIとVERI*FACTUの相互排他(Real Decreto 254/2025): SIIに登録された納税者はVERI*FACTUの適用対象外です。記録を生成する前に
es__check_b2b_mandate_applicabilityを使用してください。
コンプライアンスに関する注意事項
通知: 義務化の日付は RD-ley 15/2025(2025年12月)に基づいていますが、 以降の法令または AEAT の行政指示により変更される場合があります。 このソフトウェアは、法律上または税務上の助言を行うものではありません。
義務化のスケジュール
| システム | 対象 | 期限 |
|---|---|---|
| SII | 売上高 >6M EUR/VAT グループ/REDEME | すでに義務化済み(RD 596/2016) |
| Facturae/FACe | すべての B2G サプライヤー | すでに義務化済み(Ley 25/2013) |
| TicketBAI | バスク地方のすべての事業者 | 業種ごとに段階的に導入(2022-2023) |
| VERI*FACTU | IS(Impuesto sobre Sociedades)の納税者 | 2027年1月(RD-ley 15/2025) |
| VERI*FACTU | IRPF + その他の非 SII 対象者 | 2027年7月(RD-ley 15/2025) |
| Crea y Crece B2B | 売上高 >8M EUR(art. 121 Ley 37/1992) | Orden Ministerial の発効から 12か月 [Unverified date] |
| Crea y Crece B2B | その他すべての事業者 | Orden Ministerial の発効から 24か月 [Unverified date] |
地域ごとの例外
- バスク地方: VERI*FACTU の代わりに TicketBAI が適用されます。 3つの県(Araba、Gipuzkoa、Bizkaia)では、それぞれ異なる XSD、エンドポイント、 ソフトウェア認証プロセスが用いられます。全国向けの AEAT エンドポイントは適用されません。
- ナバーラ: NaTicket が適用されます(Hacienda Foral de Navarra)。VERI*FACTU は適用されません。
- セウタ/メリリャ: IPSI(VAT ではありません)が適用されます。SII/VERI*FACTU の適用範囲は異なるため、AEAT に確認してください。
- SII/VERI*FACTU の相互排他: Real Decreto 254/2025 により、これらのシステムは相互排他的です。 SII に登録している納税者は VERI*FACTU の記録を提出しません。
AEAT のすべての提出エンドポイントでは、FNMT-RCM 証明書または認定 CA が発行した証明書が必要です。
AEAT は無料のテスト環境 prewww2.aeat.es を提供しています。
テスト
# Install development dependencies
uv sync --all-extras
# Run the full test suite
uv run pytest tests/ -v
# With coverage report
uv run pytest --cov=mcp_facturacion_electronica_es --cov-report=term-missing
貢献
大規模な作業を始める前に、issue を作成してください。国別アダプター間で再利用可能なユーティリティロジックについては、実装前に
mcp-einvoicing-core で core-promotion issue を作成してください。
スコアリング基準を使用してください(3 = 必ず昇格、2 = 昇格すべき、1 = ここに残す)。
git clone https://github.com/cmendezs/mcp-facturacion-electronica-es.git
cd mcp-facturacion-electronica-es
uv sync --all-extras
uv run pytest
make audit
規制に関する主張には、具体的な BOE 公報、公式 XSD のバージョン、
または AEAT 技術ガイドのバージョンを必ず示してください。確認済みの出典へのリンクを PR の説明に記載せずに、
⚠️ Pending regulatory confirmation を削除しないでください。
その他の電子請求書 MCP サーバー
| 国 | サーバー |
|---|---|
| 🌍 グローバル | mcp-einvoicing-core |
| 🇧🇪 ベルギー | mcp-einvoicing-be |
| 🇧🇷 ブラジル | mcp-nfe-br |
| 🇫🇷 フランス | mcp-facture-electronique-fr |
| 🇩🇪 ドイツ | mcp-einvoicing-de |
| 🇮🇳 インド | mcp-einvoicing-in |
| 🇮🇹 イタリア | mcp-fattura-elettronica-it |
| 🇲🇽 メキシコ | mcp-cfdi-mx |
| 🇵🇱 ポーランド | mcp-ksef-pl |
| 🇸🇬 シンガポール | mcp-invoicenow-sg |
| 🇪🇸 スペイン | mcp-facturacion-electronica-es |
| 🇦🇪 アラブ首長国連邦 | mcp-einvoicing-ae |
ライセンス
Apache License 2.0 のもとで公開されています。全バージョンの変更履歴については、CHANGELOG.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。