Skip to main content
Glama

VIES VAT Validator MCP 🇪🇺

M8ven Verified M8ven Score

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.

🌐 English · 简体中文 · 繁體中文

It lives at

Link

MCP endpoint

https://neeenja--vies-vat-validator-mcp.apify.actor/mcp

Apify Store

https://apify.com/neeenja/vies-vat-validator-mcp

Source

https://github.com/PanStories/vies-vat-validator-mcp

Featured on

Sartbot Featured


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

validate_vat

free local format check, then optional live VIES verification; structured + bilingual errors

$0.0005 / event

check_vat_format

pure local regex format check — no network, free

free

list_supported_countries

supported countries — native name + local VAT term + 中文/EN

free

get_error_codes

full bilingual error-code table

free

resources

vat://error-codes / vat://supported-countries / vat://spec

free

prompts

vat_compliance_guide / explain_vat_result

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 payloads

Connect 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/mcp

with 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

VAT_FORMAT_INVALID

格式不符

format mismatch

VAT_VIES_INVALID

VIES 判定无效

VIES says invalid

VIES_MS_UNAVAILABLE

成员国系统不可用

member state down

VIES_TIMEOUT

超时

timeout

NETWORK_ERROR

网络错误

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 Store

Pricing 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 接口频繁限流、偶发停机,缓存 + 优雅降级是必选项。

  • 零冷启动成本 —— 免费官方数据源,叠加一层封装 + 可解释的双语输出,按事件计费。

你能拿到什么

能力

说明

计费

validate_vat

先做免费本地格式校验,再按需调用欧盟官方 VIES 接口核验真实性;结构化 + 双语错误

$0.0005 / 次

check_vat_format

纯本地正则格式校验,零网络、零成本

免费

list_supported_countries

返回支持国家(母语名 + 当地 VAT 叫法 + 中/英)

免费

get_error_codes

返回完整中英双语错误码表

免费

resources

vat://error-codes / vat://supported-countries / vat://spec

免费

prompts

vat_compliance_guide / explain_vat_result

免费

覆盖 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

VAT_FORMAT_INVALID

格式不符

format mismatch

VAT_VIES_INVALID

VIES 判定无效

VIES says invalid

VIES_MS_UNAVAILABLE

成员国系统不可用

member state down

VIES_TIMEOUT

超时

timeout

NETWORK_ERROR

网络错误

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 介面頻繁限流、偶發停機,快取 + 優雅降級是必選項。

  • 零冷啟動成本 —— 免費官方資料源,疊加一層封裝 + 可解釋的雙語輸出,按事件計費。

你能拿到什麼

能力

說明

計費

validate_vat

先做免費本地格式校驗,再依需求呼叫歐盟官方 VIES 介面核驗真實性;結構化 + 雙語錯誤

$0.0005 / 次

check_vat_format

純本地正則格式校驗,零網路、零成本

免費

list_supported_countries

回傳支援國家(母語名 + 當地 VAT 叫法 + 中/英)

免費

get_error_codes

回傳完整中英雙語錯誤碼表

免費

resources

vat://error-codes / vat://supported-countries / vat://spec

免費

prompts

vat_compliance_guide / explain_vat_result

免費

涵蓋 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

VAT_FORMAT_INVALID

格式不符

format mismatch

VAT_VIES_INVALID

VIES 判定無效

VIES says invalid

VIES_MS_UNAVAILABLE

成員國系統不可用

member state down

VIES_TIMEOUT

逾時

timeout

NETWORK_ERROR

網路錯誤

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:

简体中文 — 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 tools
check_vat_formatAInspect

纯本地 VAT 号格式校验(零网络、零成本):判断号码形态是否符合该国规则。Free local format-only check (no network).

ParametersJSON Schema
NameRequiredDescriptionDefault
vatNo完整 VAT 号,可含国家前缀 / Full VAT incl. country prefix
vatNumberNo不含前缀的税号 / VAT number without prefix
countryCodeNoISO 国家代码 / 2-letter country code

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
vatNo完整 VAT 号,可含国家前缀,如 FR123456789 / Full VAT incl. country prefix
liveNo是否在格式合规后调用 VIES 实查 / call live VIES after format check
useCacheNo是否使用免费 TTL 缓存(默认 24h)/ use free TTL cache
vatNumberNo不含国家前缀的税号 / VAT number without country prefix
countryCodeNoISO 国家代码,如 FR / 2-letter country code

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updatesv1.0.0
    • First observedcheck_vat_format
    • First observedget_error_codes
    • First observedlist_supported_countries
    • First observedvalidate_vat

TDQS

A3.6/5.0

Scored across 4 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to answer tax compliance questions (VAT, sales tax, GST) and validate EU VAT numbers in real time via the VIES registry.
    2
    7 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    SLA'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
  • A
    license
    A
    quality
    C
    maintenance
    Validates 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.
    2
    3 npm
    MIT