EU e-invoicing and business checks (EN 16931, Peppol, VAT, sanctions)

io.github.wsystemdev由 GitHub 帳號 wsystemdev 發布v1.0.4更新於 Oct 30, 2026

EN 16931/XRechnung e-invoice validate+create, Peppol routing, EU VAT/EORI, sanctions, KYB. Free tier

已驗證Streamable HTTP可網頁執行金融安全與監控商業與電商

概覽

AI 產生的概覽

遠端 MCP 伺服器,提供歐盟企業資料查核:增值稅號與 EORI 驗證、公司登記查詢、制裁篩查、KYB,以及 EN 16931 電子發票的驗證、產生與路由。

可以做什麼
  • 透過 VIES 驗證歐盟增值稅號,可單筆或最多 100 筆批次,回傳名稱、地址與查詢編號
  • 驗證歐盟 EORI 海關編號,可單筆或批次
  • 在官方歐洲公司登記庫查詢公司,並將姓名與歐盟、聯合國、OFAC 及英國制裁名單比對
  • 把增值稅、登記與制裁結果整合為 KYB 結論或附風險分數的盡職調查報告
  • 驗證、解析並產生 EN 16931、XRechnung 與 Peppol BIS 3 電子發票,並判斷買方能否接收電子發票
  • 在沙箱中演練完整電子發票傳送流程,並查詢法國官方認可的電子發票平台名單
適用情境
適合需要查核供應商或客戶的增值稅號、EORI 或登記資料,篩查交易對象的制裁風險,或在入駐、開立發票與法遵流程中處理 XRechnung、Factur-X、Peppol BIS 3 等歐盟電子發票的情境。
執行需求
使用遠端 streamable HTTP 端點,無需本機安裝。免費額度為每個 MCP 工作階段每天 20 次工具呼叫,不需 API 金鑰,另有依 IP 及共用的額外限制。選用 API 金鑰透過 X-API-Key 標頭或 Authorization Bearer 權杖傳送,以取得更高用量。
安裝前請注意
免費額度偏低且為共用,超出後需付費 API 金鑰,或按次以 USDC on Base 透過 x402 付費。制裁比對僅為篩查輔助,需人工複核,結果不構成法律或稅務建議。來自各國登記庫的備援增值稅結果不能作為 VIES 稽核證明。沙箱傳送工具不會觸及真實買方,且尚未支援真實 Peppol 傳輸。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 EU e-invoicing and business checks (EN 16931, Peppol, VAT, sanctions),將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.wsystemdev%2Feu-business-data-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "eu-e-invoicing-and-business-checks-en-16": {
      "type": "http",
      "url": "https://api.wsystem.dev/mcp/"
    }
  }
}

README

EU Business Data MCP – VAT, EORI, company registry, sanctions, KYB & e-invoicing

A remote MCP server and x402 pay-per-call API for European business data checks, aimed at AI agents and KYB/onboarding/invoicing workflows.

Maker disclosure: built and operated by W System. This is our own commercial product. The code is MIT-licensed.

Remote MCP endpoint (streamable HTTP)

https://api.wsystem.dev/mcp/

Free tier, no signup: 20 tool calls per day per MCP session. Direct clients (Claude Code, Cursor, mcp-remote and others connecting from your own machine) also get at most 20 per IP, so opening more sessions doesn't add calls. Claude.ai / Claude Desktop custom connectors call from Anthropic's cloud (outbound range 160.79.104.0/21), so those calls are counted per session, not per IP; all keyless traffic from that range shares 2,000 lookups per day (verify_batch / verify_eori_batch count one per number). New keyless sessions: 1,500 per IP per day (3,000 per Anthropic address). Limits reset at 00:00 UTC; live values: https://api.wsystem.dev/mcp/limits

Optional API key for volume: send X-API-Key: <key> (or Authorization: Bearer <key>) with every MCP request. Keyed calls use the key's monthly units (same weights as the REST API) instead of the free tier. Keys: https://wsystem.dev/pricing (Starter EUR 19/month, 5,000 units; Pro EUR 49/month, 25,000 units; there is no free key). Keys in the URL are not accepted. How to add one in Claude: docs/mcp-claude-cursor.md.

Server card: https://api.wsystem.dev/server-card · Website: https://wsystem.dev · LLM summary: https://wsystem.dev/llms.txt

Example client config:

json
{ "mcpServers": { "eu-business-data": { "type": "http", "url": "https://api.wsystem.dev/mcp/" } } }

Tools (14)

ToolWhat it does
verify_vatValidate an EU VAT number live against VIES (27 EU states + XI), with name/address and optional consultation number
verify_batchValidate several VAT numbers at once
lookup_companyLook up a company in European business registries
screen_sanctionsFuzzy-match a name against EU / UN / UK / US sanctions lists
kyb_checkCombined KYB: VAT validity + registry + sanctions screening
verify_eoriValidate an EU EORI number (customs)
verify_eori_batchValidate several EORI numbers at once
validate_einvoiceValidate a UBL or CII e-invoice against the official EN 16931 and XRechnung rules: errors with rule IDs, plain-English messages and fix hints
parse_einvoiceRead an incoming e-invoice (UBL Invoice/CreditNote, CII, or the XML inside a ZUGFeRD / Factur-X PDF as base64) into one JSON shape: seller, buyer, dates, references, totals, VAT breakdown, payment/IBAN, lines, attachments. Values as written, no validation (use validate_einvoice). Guide: read XRechnung / ZUGFeRD as JSON
create_einvoiceTurn simple JSON into a validated UBL 2.1 invoice (EN 16931, XRechnung or Peppol BIS 3 structure)
einvoice_route"Can I e-invoice this company?": VIES + Peppol Directory + country B2B mandate + recommended format
send_einvoice_sandboxSANDBOX: verify buyer VAT + sanctions → create/validate EN 16931 → route → mock transport (nothing transmitted) → Ed25519-signed evidence receipt
due_diligence_reportVAT, register, sanctions, EORI, GLEIF LEI and Peppol in one report with risk flags and a timestamp
check_fr_pa_registryFrance: is this e-invoicing platform on the official DGFiP list of Plateformes Agréées (PA)? Name or website in; approved / awaiting interop tests / not found, registration date and official source out (also free as REST: GET https://api.wsystem.dev/fr/pa-registry?name=Pennylane)

Quick answers

When VIES is down (fallback) and UK numbers

  • VIES is retried with backoff. If a member state is still MS_UNAVAILABLE/timing out, the result comes from that country's free official source: PL Biała lista (Ministry of Finance), CZ ARES (VAT register status), FI YTJ open data (VAT register), FR Recherche d'entreprises / SIRENE (company active + VAT key; no free French VAT-registration API exists).
  • Otherwise the last successful VIES answer for that number is returned, labelled with its date. Otherwise member_state_unavailable.
  • Fallback results have fallback: true, fallback_type (national_source | last_vies_result), source, legal_status, vies_error, and no consultation number. National registers show domestic status, which is not VIES audit proof. Turn off with fallback=false.
  • No free automated source for DE (BZSt eVatR requires a German requester VAT ID), ES (certificate), IT (captcha), NL, BE, HU (NAV technical user), DK.
  • GET /vies/status: EC VIES per-country availability, cached 5 min, free.
  • GB: accepted and HMRC check-digit validated, but the live HMRC lookup is not switched on yet (HMRC production access pending). GB numbers return status: member_state_unavailable, valid: null, error: HMRC_LIVE_ACCESS_PENDING: not a validity result, not cached and not billed. XI (Northern Ireland) is checked in VIES.

Integration guides

Step-by-step guides (every snippet tested against the live API): docs/

Website with a free VAT and EORI checker: https://wsystem.dev REST API docs and a free API key (no card): https://api.wsystem.dev/docs?ref=mcp-github

Pricing

  • MCP endpoint: free, 20 tool calls per day per MCP session (details and the shared limit for Claude connector traffic above). With an API key in X-API-Key: Starter EUR 19/month (5,000 units) or Pro EUR 49/month (25,000 units). When a free limit is reached, the tool returns an error that names the limit and explains how to add a key.
  • REST API with x402 on the same host (https://api.wsystem.dev, e.g. GET /verify?vat=..., POST /verify/batch, GET /company?q=..., sanctions, KYB and EORI routes): after the free allowance, calls are paid per request with x402 in USDC on Base: about $0.01 per single check, $0.10 per batch, $0.045 per KYB check. Unpaid calls get HTTP 402 with the payment requirements.
  • Apify Actors (pay per event), see below.

Also on Apify

The same checks are available as Apify Actors (pay per event), and through Apify's hosted MCP server:

Blog: https://wsystem.hashnode.dev

Ready-made examples (run in one click on Apify)

Each example opens a pre-filled run with real sample output, so you can see the result format before you pay for anything:

Run it yourself

bash
pip install -r requirements.txtuvicorn vatcheck.server:app --port 8000     # REST at /, MCP at /mcp/# or stdio MCP:python -m vatcheck.mcp_server stdio

x402 is off unless X402_ENABLED=1 and X402_PAY_TO are set (see vatcheck/x402.py).

Data sources & disclaimer

Data comes live from public sources such as the European Commission VIES and EORI services, public business registries and official sanctions lists. Not affiliated with the European Commission or any authority. Results are not legal or tax advice.

License

MIT. See LICENSE.

來源:README.md,提交 c33d398

工具

14

verify_vat

Validate an EU VAT number against the official European Commission VIES service (27 EU states + XI Northern Ireland). Use when asked whether a VAT ID is valid/active, before zero-rated reverse-charge B2B invoices, or to get a company's registered name/address from its VAT number. Input: VAT with country prefix, e.g. 'IE6388047V', 'DE811193231' (spaces/dots ok). Returns status: valid | invalid | invalid_format | member_state_unavailable (VIES/member state down - retry later, valid=null) | error, plus name, address (if the member state discloses them; DE/ES often don't) and consultation_number (audit proof) when requester is set. UK (GB) VAT checks are coming soon: until HMRC live access is granted, GB numbers return status member_state_unavailable, valid=null, error HMRC_LIVE_ACCESS_PENDING (not charged). For >1 number use verify_batch.

輸入參數vat必填requester

verify_batch

Validate up to 100 EU VAT numbers in one call via VIES (supplier/customer list cleanup, onboarding, invoice runs). Same per-item result as verify_vat; items with member_state_unavailable should be retried later (GB items stay member_state_unavailable until HMRC live access is granted; they are not charged).

輸入參數vats必填requester

lookup_company

Look up a company in official European business registers by name or registry number. country: FR (SIREN), NO (org.nr), FI (Y-tunnus), CZ (ICO), PL (KRS number), EE, or any other ISO code / 'LEI' (GLEIF). Returns legal name, ID, status/active, address, VAT ID, activity code and official source link. Use to confirm a company exists and is active, find its registry number, or map a name to a VAT ID.

輸入參數limitquery必填country

screen_sanctions

Screen a person or company name against official EU, UN, OFAC SDN and UK sanctions lists. Fuzzy matching with transliteration; returns candidate matches with 0-100 scores, list, programme, DOB. A potential match needs human review; this is a screening aid, not legal advice.

輸入參數name必填countrythresholdbirth_year

kyb_check

One-call KYB check of a supplier/customer: EU VAT validation (VIES) + official business register + EU/UN/OFAC/UK sanctions screening, returning a pass / review / fail verdict with reasons. company: a VAT ID ('FR40303265045'), a company name, or a registry id; country: optional ISO code (e.g. 'NO').

輸入參數company必填countryrequester

verify_eori

Validate an EU EORI (customs Economic Operators Registration and Identification) number, e.g. 'SE5560360793', 'DE1234567890123', against the official European Commission EOS service. Use for import/export, customs declarations and freight-forwarder onboarding. Returns valid/invalid and trader name/address only when the trader consented to publication. UK (GB) EORIs are not in EOS (HMRC checks those); XI EORIs are.

輸入參數eori必填

verify_eori_batch

Validate up to 100 EU EORI numbers in one call via the official EC EOS service (customs / import-export KYB).

輸入參數eoris必填

validate_einvoice

Validate an EU e-invoice XML (UBL 2.1 Invoice/CreditNote or UN/CEFACT CII, e.g. XRechnung, Factur-X/ZUGFeRD XML) against the official CEN EN 16931 rules and, for XRechnung, the KoSIT XRechnung 3.0 rules. Returns valid, and every error with its rule ID (e.g. BR-CO-10), a plain-English message, XPath and a fix hint. rules: auto | en16931 | xrechnung. Slovak sellers also get eFaktúra field checks (FR SR transposition v1.12, warnings with ruleset SK-FS); Norwegian sellers get NO-LAW field checks. Peppol-specific rules are not checked yet. For PDFs use the REST endpoint POST /einvoice/validate.

輸入參數xml必填rules

parse_einvoice

Read an incoming EU e-invoice into one JSON shape: seller, buyer, dates, references, totals, VAT breakdown, payment/IBAN, lines and attachments. Accepts UBL 2.1 Invoice/CreditNote or UN/CEFACT CII XML (XRechnung, Peppol BIS 3, Factur-X XML) in xml, or a ZUGFeRD/Factur-X PDF as base64 in pdf_base64. Use when asked to read, extract or book a received e-invoice. Values are returned as written in the invoice; this does NOT validate it (use validate_einvoice for that).

輸入參數xmlpdf_base64

create_einvoice

Create a validated EU e-invoice (UBL 2.1) from simple JSON. invoice = {format: en16931|xrechnung|peppol-bis3, invoice_number, issue_date (YYYY-MM-DD), due_date?, tax_point_date?, delivery_date?, currency (EUR), buyer_reference?, seller: {name, vat_id, street, city, postal_code, country, email, phone, contact_name, company_id?, company_id_scheme?, legal_form?}, buyer: {...}, lines: [{description, quantity, unit_price, unit?, vat_category (S|Z|E|AE|K|G|O), vat_rate}], payment: {iban, bic?, terms?}}. Totals and VAT breakdown are computed; returns {valid, xml, totals, errors}.

輸入參數invoice必填

einvoice_route

'Can I e-invoice this company?' id = EU VAT number (e.g. 'BE0403170701') or Peppol id ('0208:0403170701'). Returns VIES VAT status, Peppol registration (Peppol Directory, then SML/SMP; BIS 3 invoice support), the country's B2B e-invoice mandate (dates, format, source) and the recommended format for create_einvoice. France's PPF directory is not included yet.

輸入參數id必填

send_einvoice_sandbox

SANDBOX ONLY - never reaches a real buyer. Runs the full send flow on an invoice (same JSON as create_einvoice): VIES check of the buyer VAT, sanctions screen of the buyer name, EN 16931 create + validate, route lookup (Peppol/mandate), transport hand-off and an Ed25519-signed evidence receipt (JWS). transport: "mock" (simulated, default), "recommand" or "e-invoice-be" (the UBL is really submitted to that Peppol access point's sandbox, addressed to W System's own sandbox company; the partner document id is returned). Use it to build and test an integration before live sending exists.

輸入參數invoice必填transport

due_diligence_report

Counterparty due-diligence report in one call: VIES VAT, official business register, EU/UN/OFAC/UK sanctions, EC EORI, GLEIF LEI and Peppol e-invoice route, with deterministic risk flags, 0-100 risk score, pass/review/fail verdict, sources and UTC timestamp. company: VAT ID (best), registry number or name; country: ISO code for names.

輸入參數company必填country

check_fr_pa_registry

Is this e-invoicing platform on France's official list of Plateformes Agréées (PA)? name = platform or company name (e.g. 'Pennylane'), website = its site (e.g. 'https://www.acubeapi.com/'); give at least one. Checks the DGFiP lists on impots.gouv.fr: registered PAs (with registration date) and operators awaiting interoperability tests. Returns on_official_list, status (approved | awaiting_interop_tests | possible_match | not_found), scored matches, list date and the official source. Use for supplier due diligence before the French reform (receive from 1 Sep 2026, SMEs issue from 1 Sep 2027). A 'solution compatible' is not a PA itself. Unofficial copy; the official lists prevail.

輸入參數namelimitwebsite

版本歷史

1
  1. v1.0.4最新Oct 29, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分