mcpField
M
mcp-facturacion-electronica-es

mcp-facturacion-electronica-es

ローカル
github.com/cmendezs金融データ27 週間前に更新

mcp-facturacion-electronica-es について

mcp-facturacion-electronica-es は、スペインの電子インボイス向け MCP サーバーです。VERI*FACTU、Facturae/FACe、SII など複数の制度に対応し、記録の生成・検証・送信を支援します。

主な機能

  1. 01VERI*FACTU 記録の生成と検証
  2. 02記録の送信と状態照会
  3. 03インボイス QR コードの生成
  4. 04インボイス取消記録の作成
  5. 05スペインの電子インボイス制度に対応

活用シーン

  1. 01VERI*FACTU 記録の準備
  2. 02インボイス XML 構造の確認
  3. 03AEAT への送信と状態追跡

MCP 対応

MCP サーバーとして、スペインの電子インボイス記録の生成、検証、送信、照会ツールを対応クライアントに提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"cmendezs-mcp-facturacion-electronica-es": {
"command": "uvx",
"args": [
"mcp-facturacion-electronica-es"
],
"env": {
"AEAT_ENV": "<AEAT_ENV>",
"AEAT_CERTIFICATE_PATH": "<AEAT_CERTIFICATE_PATH>",
"AEAT_CERTIFICATE_PASSWORD": "<AEAT_CERTIFICATE_PASSWORD>",
"AEAT_NIF": "<AEAT_NIF>",
"FACE_ENV": "<FACE_ENV>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
起動コマンドuvx mcp-facturacion-electronica-es
設定が必要な環境変数
AEAT_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimcp-facturacion-electronica-es0.10.1

ツール

20

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
invoiceobjectはい請求書データ(date、number、seller、buyer、vat_summary、note)。
impuestostringいいえ税コード(デフォルトは '01' IVA)。
software_idstringはい認定ソフトウェアの IDSistemaInformatico。
invoice_typestringいいえHAC/1177/2024 Annex I に基づく TipoFactura (F1、F2、F3、R1、R2、R3、R4、R5)。
software_nifstringはいソフトウェア製造元の NIF。
clave_regimenstringいいえClaveRegimenEspecialOTrascendencia(デフォルトは '01')。
previous_hashanyいいえ直前のレコードの SHA-256 Huella(最初のレコードでは省略)。
previous_fechaanyいいえ前のレコードの FechaExpedicionFactura(DD-MM-YYYY 形式) (previous_hash がある場合は必須)。
previous_num_serieanyいいえ前のレコードの NumSerieFactura(previous_hash がある場合は 必須)。
previous_emisor_nifanyいいえ前のレコードの発行者の NIF(previous_hash がある場合は 必須)。
calificacion_operacionstringいいえCalificacionOperacion(デフォルトは 'S1')。

詳細

mcp-facturacion-electronica-es 🇪🇸

英語 | スペイン語

ライセンス PyPI バージョン Python mcp-facturacion-electronica-es MCP サーバー


はじめに

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_ENVsandbox または productionはい
AEAT_CERTIFICATE_PATHFNMT-RCM PKCS#12 証明書へのパス送信時
AEAT_CERTIFICATE_PASSWORD証明書のパスワード送信時
AEAT_NIF納税者の NIF送信時
FACe
変数説明必須
FACE_ENVsandbox または productionはい

FACe は、VERI*FACTU/SII と同じ AEAT_CERTIFICATE_PATH / AEAT_CERTIFICATE_PASSWORD 証明書を使用した JWS 認証を行います(上記の AEAT セクションを参照)。FACe 用の別個の認証情報は必要ありません。

TicketBAI
変数説明必須
TICKETBAI_ENVsandbox または productionはい
TICKETBAI_CERTIFICATE_PATH地方の署名証明書へのパスはい
TICKETBAI_CERTIFICATE_PASSWORD証明書のパスワードはい
共通(mcp-einvoicing-core から継承)
変数説明デフォルト
LOG_LEVELDEBUG、INFO、WARNING、ERRORINFO

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 による連鎖で、前のレコードと紐付けます。

パラメーター型必須説明
invoiceInvoiceDocumentはい請求書の中核モデル(販売者、購入者、明細、VAT)
previous_hashstringいいえ直前のレコードの SHA-256 Huella(連鎖の最初の場合は null)
software_idstringはい認証済みソフトウェアの IDSistemaInformatico
software_nifstringはいソフトウェアメーカーの NIF
invoice_typestringはい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 レコードを検証します。

パラメーター型必須説明
xmlstringはいVERI*FACTU XML レコードの生データ
schema_versionstringいいえスキーマのバージョン(デフォルト:"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 のクエリ操作の両方で共通です。

パラメーター型必須説明
xmlstringはい署名済み VERI*FACTU XML
nifstringはい送信者の 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 ホストを切り替えます。

パラメーター型必須説明
nifstringはい発行者の NIF
invoice_numberstringはいNumSerieFactura
invoice_datestringはいFechaExpedicionFactura(YYYY-MM-DD)
total_amountnumberはいVAT を含む請求書の合計金額
size_pxintegerいいえ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_numberstringはい取消対象の NumSerieFactura
original_invoice_datestringはいFechaExpedicionFactura(YYYY-MM-DD)
issuer_nifstringはい発行者の NIF
previous_hashstringはいチェーン内の最後の記録の 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 が必要です。

パラメーター型必須説明
nifstringはいObligadoEmision の NIF
namestringはいObligadoEmision の名前/商号
invoice_datestringはい照会対象の請求日、YYYY-MM-DD(PeriodoImputacion を決定します)
num_serie_facturastringいいえ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/VerifactuSOAP URL)は、どちらも確認済みです。⚠️ 保留中:ライブの AEAT サンドボックス応答に対するレスポンス解析の検証は、まだ完了していません。


Facturae / FACe
es__generate_facturae_xml

B2G 提出用の Facturae 3.2.2 準拠 XML 請求書を生成します。 mcp-einvoicing-core の InvoiceDocument を使用します。

パラメーター型必須説明
invoiceInvoiceDocumentはいコア請求書モデル
schema_versionstringいいえFacturae スキーマのバージョン(デフォルト:"3.2.2")
tax_typestringいいえ間接税の種類:IVA(半島部/バレアレス諸島)、IPSI(セウタ/メリリャ)、または IGIC(カナリア諸島)。1 件の請求書で税の種類を混在させることはできません。デフォルト:"IVA"
recargo_equivalencia_ratenumberいいえ該当する場合の Recargo de Equivalencia 税率(%)
recargo_equivalencia_amountnumberいいえRecargo de Equivalencia の明示的な金額。省略した場合は、base_imponible * recargo_equivalencia_rate / 100 として算出されます
irpf_ratenumberいいえ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)。

パラメーター型必須説明
xmlstringはい未署名の Facturae XML
cert_pathstringはいPKCS#12 証明書(.p12 / .pfx)へのパス
signature_policy_idstringいいえ署名ポリシー 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 ヘッダー)で認証します。

パラメーター型必須説明
xmlstringはいXAdES 署名付き Facturae XML
administrative_unitstringはいFACe の UnidadTramitadora コード
accounting_officestringはいFACe の OficinasContables コード
management_bodystringはい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_idstringはい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 モードでの検証を試みます。

パラメーター型必須説明
xmlstringはい検証する Facturae XML
schema_versionstringいいえスキーマのバージョン(デフォルト:"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 に対応しています。

ParameterTypeRequiredDescription
invoiceInvoiceDocumentYes請求書の基本モデル
record_typestringYes"issued" または "received"
communication_typestringNo"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 が必要です。

ParameterTypeRequiredDescription
recordsarrayYeses__build_sii_invoice_record が生成した XML 文字列のリスト
record_typestringYes"issued" または "received"
fiscal_yearintegerYes会計年度(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 バッチのステータスを照会します。

ParameterTypeRequiredDescription
nif_titularstringYesSII の titular(納税義務者)の NIF
nombre_titularstringYestitular の氏名または会社名
fiscal_yearintegerYes会計年度(YYYY)
periodstringYes申告期間:月次の場合は "01"~"12"、年次の場合は "0A"
record_typestringNo"issued" または "received"(デフォルト:"issued")
invoice_numberstringNo特定の請求書で絞り込む NumSerieFacturaEmisor
emisor_nifstringNo発行者の 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)。

ParameterTypeRequiredDescription
original_invoiceInvoiceDocumentYes訂正対象の請求書
corrected_invoiceInvoiceDocumentNo訂正後のデータ(A4 の場合は null)
correction_typestringYes"A1" または "A4"
record_typestringYes"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)を自動的に選択します。

ParameterTypeRequiredDescription
invoiceInvoiceDocumentYes請求書の基本モデル
provincestringYes"araba"、"gipuzkoa" または "bizkaia"
previous_hashstringNo直前のレコードの HuellaTBAI
software_licensestringYesTicketBAI ソフトウェアライセンスキー
cert_pathstringYes署名証明書のパス
cert_passwordstringYes証明書のパスワード
{ "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)。

ParameterTypeRequiredDescription
xmlstringYes署名済み TicketBAI XML
provincestringYes"araba"、"gipuzkoa" または "bizkaia"
nifstringYes送信者の NIF
{ "tool": "es__submit_ticketbai", "arguments": { "xml": "<T:TicketBai>...</T:TicketBai>", "province": "bizkaia", "nif": "B12345678" } }

⚠️ 規制当局の確認待ち


es__validate_ticketbai_schema

TicketBAI XML ドキュメントを、該当する県の XSD に照らして検証します。スキーマは 県ごとに異なり、相互に置き換えることはできません。

パラメーター型必須説明
xmlstringはいTicketBAI XML
provincestringはい"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 形式に対応しています。

パラメーター型必須説明
invoiceInvoiceDocumentはい請求書の基本モデル
formatstringいいえ"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_eurnumberはいEUR 建ての年間 VAT 対象売上高
tax_address_province_codestringはいINE 県コード(例:マドリードは "28")
enrolled_in_siibooleanいいえSII 登録状況(デフォルト:false)
entity_typestringいいえ"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_codestringはい2 桁の INE 県コード
enrolled_in_siibooleanいいえ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_typestringはい"IS" または "IRPF"
province_codestringはいINE 県コード
annual_turnover_eurnumberいいえSII の基準額確認用(600 万 EUR)
enrolled_in_siibooleanいいえ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)への昇格候補です。

パラメーター型必須説明
xmlstringはいAEAT の生 XML レスポンス
response_typestringいいえ"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*FACTUSII対象外のすべての事業者独自XML(XSD v1.0 HAC/1177/2024)法人税対象者:2027年1月/その他:2027年7月(RD-ley 15/2025)実装済み(規制上の確認待ち)
Facturae / FACeB2G(公共部門)Facturae 3.2.2 + XAdES-EPES2015年から義務化(Ley 25/2013)実装済み(規制上の確認待ち)
SII売上高が600万ユーロ超、VATグループ、REDEMEXML 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*FACTUIS(Impuesto sobre Sociedades)の納税者2027年1月(RD-ley 15/2025)
VERI*FACTUIRPF + その他の非 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 を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。