VIES VAT Validator MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@VIES VAT Validator MCPvalidate VAT number FR123456789"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
VIES VAT Validator MCP 🇪🇺
VIES VAT Validator MCP validates EU VAT numbers through the official free VIES SOAP API, wrapped with a local format pre-check + free TTL cache and bilingual (中文 / English) error codes. A "regulatory must-have" compliance tool for cross-border e-commerce and trade sellers.
Current version: 1.0.1 · License: MIT · Trust: built read-only, no secret exfiltration, self-healing bilingual errors.
It lives at | Link |
MCP endpoint |
|
Apify Store | |
Source | |
Featured on |
English
Why this exists
Regulatory must-have — EU B2B transactions require verifying the counterparty's VAT number (reverse charge / compliance proof).
VIES is slow and flaky — the official SOAP endpoint rate-limits and goes down often, so a cache + graceful degradation are mandatory.
Zero cold-start cost — a free official data source wrapped with a thin layer + bilingual, explainable output, sold per-event.
Related MCP server: goodvat
What you get
Capability | Notes | Pricing |
| free local format check, then optional live VIES verification; structured + bilingual errors | $0.0005 / event |
| pure local regex format check — no network, free | free |
| supported countries — native name + local VAT term + 中文/EN | free |
| full bilingual error-code table | free |
resources |
| free |
prompts |
| free |
Covers EU 27 + GB + XI (Northern Ireland). Every country also carries its native name and — far more useful — the local term for the VAT number, which is what people actually search for:
代码 Code | 母语名 Native | 当地 VAT 叫法 Local VAT term | 中文 | English | EU |
AT | Österreich | UID-Nummer | 奥地利 | Austria | ✅ |
BE | België / Belgique | BTW-nummer / numéro de TVA | 比利时 | Belgium | ✅ |
BG | България | ДДС номер | 保加利亚 | Bulgaria | ✅ |
CY | Κύπρος / Kıbrıs | Αριθμός ΦΠΑ | 塞浦路斯 | Cyprus | ✅ |
CZ | Česko | DIČ | 捷克 | Czech Republic | ✅ |
DE | Deutschland | USt-IdNr. | 德国 | Germany | ✅ |
DK | Danmark | CVR-nummer | 丹麦 | Denmark | ✅ |
EE | Eesti | KMKR number | 爱沙尼亚 | Estonia | ✅ |
EL | Ελλάδα | Αριθμός ΦΠΑ | 希腊 | Greece | ✅ |
ES | España | NIF (IVA) | 西班牙 | Spain | ✅ |
FI | Suomi | ALV-numero | 芬兰 | Finland | ✅ |
FR | France | numéro de TVA | 法国 | France | ✅ |
HR | Hrvatska | PDV broj | 克罗地亚 | Croatia | ✅ |
HU | Magyarország | ÁFA-szám | 匈牙利 | Hungary | ✅ |
IE | Ireland / Éire | VAT number | 爱尔兰 | Ireland | ✅ |
IT | Italia | Partita IVA | 意大利 | Italy | ✅ |
LT | Lietuva | PVM kodas | 立陶宛 | Lithuania | ✅ |
LU | Lëtzebuerg / Luxembourg | numéro TVA | 卢森堡 | Luxembourg | ✅ |
LV | Latvija | PVN numurs | 拉脱维亚 | Latvia | ✅ |
MT | Malta | VAT number | 马耳他 | Malta | ✅ |
NL | Nederland | btw-nummer | 荷兰 | Netherlands | ✅ |
PL | Polska | NIP | 波兰 | Poland | ✅ |
PT | Portugal | NIF | 葡萄牙 | Portugal | ✅ |
RO | România | cod de TVA | 罗马尼亚 | Romania | ✅ |
SE | Sverige | momsregistreringsnummer | 瑞典 | Sweden | ✅ |
SI | Slovenija | ID za DDV | 斯洛文尼亚 | Slovenia | ✅ |
SK | Slovensko | IČ DPH | 斯洛伐克 | Slovakia | ✅ |
GB | United Kingdom | VAT registration number | 英国 | United Kingdom | — |
XI | Northern Ireland | VAT registration number (XI) | 北爱尔兰 | Northern Ireland | — |
叫法取当地商务常用写法;部分国家有不止一种官方接受的写法,表中列最主要的那种。 Terms follow common local business usage — some countries accept more than one form; the main one is shown.
Quick start (local)
npm install
npm run build
npm start # stdio transport, connects to any MCP client
npm test # vitest, all green
npm run verify # generate verify-report.html with real payloadsConnect with an MCP client (stdio)
{
"mcpServers": {
"vat-validator": {
"command": "node",
"args": ["/abs/path/vies-vat-validator-mcp/dist/index.js"]
}
}
}Connect over HTTP (remote / Apify)
Point your MCP client at the Streamable HTTP endpoint:
https://neeenja--vies-vat-validator-mcp.apify.actor/mcpwith the header Authorization: Bearer <APIFY_TOKEN>.
Example calls
Format pre-check (free)
{ "name": "check_vat_format", "arguments": { "vat": "FR123456789" } }→ { "formatValid": true, "normalized": "FR123456789", "pattern": "^([A-Z]{2})?\\d{9}$" }
Live verification (paid event)
{ "name": "validate_vat", "arguments": { "vat": "FR123456789", "useCache": true, "live": true } }→ { "valid": true, "formatValid": true, "viesValid": true, "source": "vies", "name": "...", "address": "..." }
Error codes (excerpt)
Code | 中文 | EN |
| 格式不符 | format mismatch |
| VIES 判定无效 | VIES says invalid |
| 成员国系统不可用 | member state down |
| 超时 | timeout |
| 网络错误 | network error |
Full table via get_error_codes or vat://error-codes.
Deploy (Apify Pay-Per-Event)
npm run apify:login # complete KYC yourself first (one-time)
npm run apify:validate # validate actor.json
npm run apify:push # publish to Apify StorePricing lives in .actor/actor.json → pricingEvents: format / error / country queries are free; only mcp-validate-vat is billed.
Design red lines
No
express/soap/fast-xml-parser: the SOAP envelope is hand-built and the response parsed with namespace-agnostic regex.Never crash: VIES faults / network errors map to bilingual error codes.
Free layer (format check + cache) guarantees zero cold-start cost.
See SPEC.md for the full contract.
简体中文
为什么做这个
监管刚需 —— 欧盟 B2B 交易要求核验对方 VAT 税号(逆向征收 / 合规凭证)。
VIES 又慢又抖 —— 官方 SOAP 接口频繁限流、偶发停机,缓存 + 优雅降级是必选项。
零冷启动成本 —— 免费官方数据源,叠加一层封装 + 可解释的双语输出,按事件计费。
你能拿到什么
能力 | 说明 | 计费 |
| 先做免费本地格式校验,再按需调用欧盟官方 VIES 接口核验真实性;结构化 + 双语错误 | $0.0005 / 次 |
| 纯本地正则格式校验,零网络、零成本 | 免费 |
| 返回支持国家(母语名 + 当地 VAT 叫法 + 中/英) | 免费 |
| 返回完整中英双语错误码表 | 免费 |
resources |
| 免费 |
prompts |
| 免费 |
覆盖 EU 27 + GB + XI(北爱尔兰)。每个国家还带母语名,以及更实用的当地对 VAT 号的叫法——这才是当地人真正会搜的词:
代码 Code | 母语名 Native | 当地 VAT 叫法 Local VAT term | 中文 | English | EU |
AT | Österreich | UID-Nummer | 奥地利 | Austria | ✅ |
BE | België / Belgique | BTW-nummer / numéro de TVA | 比利时 | Belgium | ✅ |
BG | България | ДДС номер | 保加利亚 | Bulgaria | ✅ |
CY | Κύπρος / Kıbrıs | Αριθμός ΦΠΑ | 塞浦路斯 | Cyprus | ✅ |
CZ | Česko | DIČ | 捷克 | Czech Republic | ✅ |
DE | Deutschland | USt-IdNr. | 德国 | Germany | ✅ |
DK | Danmark | CVR-nummer | 丹麦 | Denmark | ✅ |
EE | Eesti | KMKR number | 爱沙尼亚 | Estonia | ✅ |
EL | Ελλάδα | Αριθμός ΦΠΑ | 希腊 | Greece | ✅ |
ES | España | NIF (IVA) | 西班牙 | Spain | ✅ |
FI | Suomi | ALV-numero | 芬兰 | Finland | ✅ |
FR | France | numéro de TVA | 法国 | France | ✅ |
HR | Hrvatska | PDV broj | 克罗地亚 | Croatia | ✅ |
HU | Magyarország | ÁFA-szám | 匈牙利 | Hungary | ✅ |
IE | Ireland / Éire | VAT number | 爱尔兰 | Ireland | ✅ |
IT | Italia | Partita IVA | 意大利 | Italy | ✅ |
LT | Lietuva | PVM kodas | 立陶宛 | Lithuania | ✅ |
LU | Lëtzebuerg / Luxembourg | numéro TVA | 卢森堡 | Luxembourg | ✅ |
LV | Latvija | PVN numurs | 拉脱维亚 | Latvia | ✅ |
MT | Malta | VAT number | 马耳他 | Malta | ✅ |
NL | Nederland | btw-nummer | 荷兰 | Netherlands | ✅ |
PL | Polska | NIP | 波兰 | Poland | ✅ |
PT | Portugal | NIF | 葡萄牙 | Portugal | ✅ |
RO | România | cod de TVA | 罗马尼亚 | Romania | ✅ |
SE | Sverige | momsregistreringsnummer | 瑞典 | Sweden | ✅ |
SI | Slovenija | ID za DDV | 斯洛文尼亚 | Slovenia | ✅ |
SK | Slovensko | IČ DPH | 斯洛伐克 | Slovakia | ✅ |
GB | United Kingdom | VAT registration number | 英国 | United Kingdom | — |
XI | Northern Ireland | VAT registration number (XI) | 北爱尔兰 | Northern Ireland | — |
叫法取当地商务常用写法;部分国家有不止一种官方接受的写法,表中列最主要的那种。 Terms follow common local business usage — some countries accept more than one form; the main one is shown.
快速开始(本地)
npm install
npm run build
npm start # stdio 传输,接任意 MCP 客户端
npm test # vitest 全绿
npm run verify # 生成真实 payload 验证报告 verify-report.html与 MCP 客户端对接(stdio)
{
"mcpServers": {
"vat-validator": {
"command": "node",
"args": ["/abs/path/vies-vat-validator-mcp/dist/index.js"]
}
}
}通过 HTTP 对接(远程 / Apify)
把你的 MCP 客户端指向 Streamable HTTP 端点:
https://neeenja--vies-vat-validator-mcp.apify.actor/mcp并带上请求头 Authorization: Bearer <APIFY_TOKEN>。
调用示例
格式预校验(免费)
{ "name": "check_vat_format", "arguments": { "vat": "FR123456789" } }→ { "formatValid": true, "normalized": "FR123456789", "pattern": "^([A-Z]{2})?\\d{9}$" }
实查(付费事件)
{ "name": "validate_vat", "arguments": { "vat": "FR123456789", "useCache": true, "live": true } }→ { "valid": true, "formatValid": true, "viesValid": true, "source": "vies", "name": "...", "address": "..." }
错误码(节选)
代码 | 中文 | EN |
| 格式不符 | format mismatch |
| VIES 判定无效 | VIES says invalid |
| 成员国系统不可用 | member state down |
| 超时 | timeout |
| 网络错误 | network error |
完整表见 get_error_codes 或 vat://error-codes。
部署(Apify Pay-Per-Event)
npm run apify:login # 本人先完成 KYC(一次性)
npm run apify:validate # 校验 actor.json
npm run apify:push # 上架计费见 .actor/actor.json 的 pricingEvents:格式 / 错误 / 国家查询免费,仅 mcp-validate-vat 计费。
设计红线
不引入
express/soap/fast-xml-parser:SOAP 信封手写、响应用命名空间无关的正则提取。永不崩溃:VIES 故障 / 网络错误全部映射为双语错误码。
免费层(格式校验 + 缓存)保证冷启动零成本。
完整契约见 SPEC.md。
繁體中文
為什麼做這個
監管剛需 —— 歐盟 B2B 交易要求核驗對方 VAT 稅號(逆向徵收 / 合規憑證)。
VIES 又慢又抖 —— 官方 SOAP 介面頻繁限流、偶發停機,快取 + 優雅降級是必選項。
零冷啟動成本 —— 免費官方資料源,疊加一層封裝 + 可解釋的雙語輸出,按事件計費。
你能拿到什麼
能力 | 說明 | 計費 |
| 先做免費本地格式校驗,再依需求呼叫歐盟官方 VIES 介面核驗真實性;結構化 + 雙語錯誤 | $0.0005 / 次 |
| 純本地正則格式校驗,零網路、零成本 | 免費 |
| 回傳支援國家(母語名 + 當地 VAT 叫法 + 中/英) | 免費 |
| 回傳完整中英雙語錯誤碼表 | 免費 |
resources |
| 免費 |
prompts |
| 免費 |
涵蓋 EU 27 + GB + XI(北愛爾蘭)。每個國家還帶母語名,以及更實用的當地對 VAT 號的叫法——這才是當地人真正會搜的詞:
代码 Code | 母语名 Native | 当地 VAT 叫法 Local VAT term | 中文 | English | EU |
AT | Österreich | UID-Nummer | 奥地利 | Austria | ✅ |
BE | België / Belgique | BTW-nummer / numéro de TVA | 比利时 | Belgium | ✅ |
BG | България | ДДС номер | 保加利亚 | Bulgaria | ✅ |
CY | Κύπρος / Kıbrıs | Αριθμός ΦΠΑ | 塞浦路斯 | Cyprus | ✅ |
CZ | Česko | DIČ | 捷克 | Czech Republic | ✅ |
DE | Deutschland | USt-IdNr. | 德国 | Germany | ✅ |
DK | Danmark | CVR-nummer | 丹麦 | Denmark | ✅ |
EE | Eesti | KMKR number | 爱沙尼亚 | Estonia | ✅ |
EL | Ελλάδα | Αριθμός ΦΠΑ | 希腊 | Greece | ✅ |
ES | España | NIF (IVA) | 西班牙 | Spain | ✅ |
FI | Suomi | ALV-numero | 芬兰 | Finland | ✅ |
FR | France | numéro de TVA | 法国 | France | ✅ |
HR | Hrvatska | PDV broj | 克罗地亚 | Croatia | ✅ |
HU | Magyarország | ÁFA-szám | 匈牙利 | Hungary | ✅ |
IE | Ireland / Éire | VAT number | 爱尔兰 | Ireland | ✅ |
IT | Italia | Partita IVA | 意大利 | Italy | ✅ |
LT | Lietuva | PVM kodas | 立陶宛 | Lithuania | ✅ |
LU | Lëtzebuerg / Luxembourg | numéro TVA | 卢森堡 | Luxembourg | ✅ |
LV | Latvija | PVN numurs | 拉脱维亚 | Latvia | ✅ |
MT | Malta | VAT number | 马耳他 | Malta | ✅ |
NL | Nederland | btw-nummer | 荷兰 | Netherlands | ✅ |
PL | Polska | NIP | 波兰 | Poland | ✅ |
PT | Portugal | NIF | 葡萄牙 | Portugal | ✅ |
RO | România | cod de TVA | 罗马尼亚 | Romania | ✅ |
SE | Sverige | momsregistreringsnummer | 瑞典 | Sweden | ✅ |
SI | Slovenija | ID za DDV | 斯洛文尼亚 | Slovenia | ✅ |
SK | Slovensko | IČ DPH | 斯洛伐克 | Slovakia | ✅ |
GB | United Kingdom | VAT registration number | 英国 | United Kingdom | — |
XI | Northern Ireland | VAT registration number (XI) | 北爱尔兰 | Northern Ireland | — |
叫法取当地商务常用写法;部分国家有不止一种官方接受的写法,表中列最主要的那种。 Terms follow common local business usage — some countries accept more than one form; the main one is shown.
快速開始(本地)
npm install
npm run build
npm start # stdio 傳輸,接任意 MCP 用戶端
npm test # vitest 全綠
npm run verify # 產生真實 payload 驗證報告 verify-report.html與 MCP 用戶端對接(stdio)
{
"mcpServers": {
"vat-validator": {
"command": "node",
"args": ["/abs/path/vies-vat-validator-mcp/dist/index.js"]
}
}
}透過 HTTP 對接(遠端 / Apify)
將你的 MCP 用戶端指向 Streamable HTTP 端點:
https://neeenja--vies-vat-validator-mcp.apify.actor/mcp並帶上請求標頭 Authorization: Bearer <APIFY_TOKEN>。
呼叫範例
格式預校驗(免費)
{ "name": "check_vat_format", "arguments": { "vat": "FR123456789" } }→ { "formatValid": true, "normalized": "FR123456789", "pattern": "^([A-Z]{2})?\\d{9}$" }
實查(付費事件)
{ "name": "validate_vat", "arguments": { "vat": "FR123456789", "useCache": true, "live": true } }→ { "valid": true, "formatValid": true, "viesValid": true, "source": "vies", "name": "...", "address": "..." }
錯誤碼(節選)
代碼 | 中文 | EN |
| 格式不符 | format mismatch |
| VIES 判定無效 | VIES says invalid |
| 成員國系統不可用 | member state down |
| 逾時 | timeout |
| 網路錯誤 | network error |
完整表見 get_error_codes 或 vat://error-codes。
部署(Apify Pay-Per-Event)
npm run apify:login # 本人先完成 KYC(一次性)
npm run apify:validate # 校驗 actor.json
npm run apify:push # 上架計費見 .actor/actor.json 的 pricingEvents:格式 / 錯誤 / 國家查詢免費,僅 mcp-validate-vat 計費。
設計紅線
不引入
express/soap/fast-xml-parser:SOAP 信封手寫、回應用命名空間無關的正則提取。永不崩潰:VIES 故障 / 網路錯誤全部映射為雙語錯誤碼。
免費層(格式校驗 + 快取)保證冷啟動零成本。
完整契約見 SPEC.md。
License
MIT — see LICENSE.
Privacy
Read-only and stateless — no accounts, no personal data collected. Submitted VAT numbers are forwarded to the official EU VIES service and may be held in a memory-only cache. See PRIVACY.md.
Support · 赞助 · 贊助
EN — VIES VAT Validator MCP is open source (MIT), ad-free. It is funded by the community, not by ads. If it powers your agents or workflow, please support it:
☕ Ko-fi (the Sponsor ❤️ button on this repo routes here): https://ko-fi.com/panstories
简体中文 — VIES VAT Validator MCP 开源(MIT)、无广告,由社区资助而非广告。若它支撑了你的智能体或工作流,欢迎赞助:点本仓库的 Sponsor 按钮(跳转 Ko-fi)或前往 https://ko-fi.com/panstories
繁體中文 — VIES VAT Validator MCP 開源(MIT)、無廣告,由社群資助而非廣告。若它支撐了你的智能體或工作流,歡迎贊助:點本倉庫的 Sponsor 按鈕(導向 Ko-fi)或前往 https://ko-fi.com/panstories
Thank you! · 谢谢 · 謝謝 💙
Available Tools
4 toolscheck_vat_formatAInspect
纯本地 VAT 号格式校验(零网络、零成本):判断号码形态是否符合该国规则。Free local format-only check (no network).
| Name | Required | Description | Default |
|---|---|---|---|
| vat | No | 完整 VAT 号,可含国家前缀 / Full VAT incl. country prefix | |
| vatNumber | No | 不含前缀的税号 / VAT number without prefix | |
| countryCode | No | ISO 国家代码 / 2-letter country code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it does disclose the crucial behavioral trait: the check is purely local and syntactic, so it cannot confirm the number actually exists or is registrable. It does not describe the response shape or behavior on malformed input, which keeps it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded with the key constraint (zero network, zero cost). The bilingual restatement duplicates content, which is defensible for i18n but means every claim appears twice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter check the description covers the essential scope, but with no annotations and no output schema it says nothing about return values or how errors are surfaced — notable given the sibling get_error_codes implies a structured error surface the agent should know about.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (vat, vatNumber, countryCode) are already documented in the schema, including the prefix/no-prefix distinction. The description adds nothing about how these fields interact (e.g. whether countryCode is required when vat includes a prefix), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (VAT number format validation) and pins down the scope with "format-only" and "纯本地". The contrast with the sibling validate_vat is inferable from "format-only / 零网络", but the sibling is never named, so it stops short of a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: "zero network, zero cost, format-only" suggests a cheap syntactic pre-check, but the description never says when to prefer this over validate_vat or when it is insufficient. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_error_codesBInspect
返回完整的中英双语 VAT 校验错误码表。Return the full bilingual error-code table.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the return is a complete (not filtered) bilingual table, which implies a safe, read-only, no-argument lookup, but says nothing about size, format, auth requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded, with no wasted preamble. The bilingual restatement is slightly redundant but appropriate for a bilingual product surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey return content, and it does state that a full bilingual error-code table is returned. It stops short of describing the table's fields or how codes map to messages, but for a trivial zero-argument lookup this is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. The description adds nothing about parameters because there are none to describe.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns the full VAT validation error-code table, and adds the bilingual (Chinese/English) scope. This is clearly distinguishable from siblings like validate_vat and check_vat_format, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The agent must infer from the name alone that this is a reference lookup to call when interpreting error codes returned by validate_vat.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_supported_countriesAInspect
返回支持 VAT 校验的国家列表:代码 + 母语名 + 当地 VAT 叫法(如 USt-IdNr. / Partita IVA / btw-nummer)+ 中英名。List VIES-supported countries with native name and local VAT term.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose the shape of what comes back (country code plus three naming variants). It does not say whether the list is static, cached, or sourced live from VIES, which is the one behavioral fact that would matter for a reference-data tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the resource front-loaded and concrete examples (USt-IdNr., Partita IVA, btw-nummer) that make the output tangible. The English sentence is largely a restatement of the Chinese one, which is mild redundancy but appropriate for a bilingual audience.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, annotations, or parameters, the description is the sole carrier of information, and it does describe the returned fields. Nothing an agent needs in order to invoke this trivial zero-arg tool is missing, though origin/freshness of the list is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. There is nothing for the description to clarify beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('return the list of countries that support VAT validation') and enumerates the returned fields (code, native name, local VAT term, Chinese/English names). It does not explicitly distinguish itself from siblings like validate_vat, but the noun phrase 'list of countries' makes the scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent would infer this is a reference lookup to run before or alongside validate_vat/check_vat_format. There is no explicit when-to-use statement, no mention of the sibling tools, and no guidance on whether this list should gate validation calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_vatBInspect
校验 VAT / 税务识别号:先做免费本地格式校验,再按需调用欧盟官方 VIES 接口核验真实性。Validate a VAT number: free local format check, then optional live VIES verification.
| Name | Required | Description | Default |
|---|---|---|---|
| vat | No | 完整 VAT 号,可含国家前缀,如 FR123456789 / Full VAT incl. country prefix | |
| live | No | 是否在格式合规后调用 VIES 实查 / call live VIES after format check | |
| useCache | No | 是否使用免费 TTL 缓存(默认 24h)/ use free TTL cache | |
| vatNumber | No | 不含国家前缀的税号 / VAT number without country prefix | |
| countryCode | No | ISO 国家代码,如 FR / 2-letter country code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It usefully discloses that the live VIES step is an external EU-official call performed only after the free local check passes, signaling latency/cost, but it omits rate limits, auth requirements, error behavior, and return format — all relevant for a network-backed validation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences that lead with the action name, with the enrichment (local then live) stated first. The bilingual duplication roughly doubles length but the content is efficient and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description must carry more, yet it stops at the two-stage flow. It does not describe what a validation result looks like, how errors surface (despite a get_error_codes sibling existing), or how cache and VIES affect the outcome, leaving real gaps for a 5-param external-API tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents vat, live, useCache, vatNumber, and countryCode. The description adds no format/syntax detail beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validate) and resource (VAT / tax ID number), and describes a concrete two-stage behavior: free local format check followed by optional live VIES verification. It implicitly distinguishes itself from the format-only sibling by mentioning the live verification step, but never names check_vat_format, so the sibling boundary is left for the agent to infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The staged description ('先做免费本地格式校验,再按需调用 VIES') implies when the live call fires versus when the cheap local check is enough, which indirectly guides the `live` flag. However, it never explicitly states when to prefer this tool over check_vat_format or when not to use it, leaving the alternative routing unstated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v1.0.0- First observed
check_vat_format - First observed
get_error_codes - First observed
list_supported_countries - First observed
validate_vat
TDQS
Scored across 4 tools
validate_vat and check_vat_format overlap in that validate_vat includes a local format check, so an agent could wonder which to use. However, the descriptions clearly differentiate them (validate_vat adds live VIES verification, check_vat_format is zero-network/local-only), making the intended split reasonably clear.
All four names follow a snake_case verb_noun pattern (validate_, check_, list_, get_), which is predictable. The only minor deviation is using two near-synonym verbs (validate vs check) for the two closely related validation tools.
Four tools is on the lean side but appropriate for a narrow, single-purpose validator. Each tool maps to a distinct function (validation, format check, country list, error codes), though the count is slightly inflated by the overlapping validate/check pair.
The surface covers the core lifecycle for VAT validation: format checking, live verification, supported-country discovery, and error-code lookup. Minor gaps exist (e.g. no batch/multi-number validation), but agents can work around these.
Maintenance
Related MCP Connectors
SLA'd EU VAT validation on VIES. Honest 3-state result, never guesses. 100 free lookups.
Live EU VAT number checks via VIES with company name/address, VAT formats and EU VAT rates
Validate EU, UK, AU VAT numbers for AI agents. EU ViDA e-invoicing compliance.
Verify an EU VAT number live in VIES before invoicing or paying. $0.02/call via x402.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables real-time validation of EU VAT numbers using the official VIES service. Supports all 27 EU member states with automatic country code detection and provides company information for valid VAT numbers.41MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to answer tax compliance questions (VAT, sales tax, GST) and validate EU VAT numbers in real time via the VIES registry.27 npmMIT
- AlicenseNot gradedqualityDmaintenanceSLA'd EU VAT number validation for AI agents via VIES, with caching and circuit-breaking to handle flaky upstream, returning valid/invalid/unavailable responses.MIT
- AlicenseAqualityCmaintenanceValidates EU VAT IDs using VIES and Germany's BZSt with automatic failover and legally binding qualified confirmations per §18e UStG, ensuring reliability even when VIES is down.23 npmMIT