Skip to main content
Glama
artisan-at-work

euinvoice-mcp

euinvoice-mcp

An MCP server for European invoicing rules. Query VAT rates, e-invoicing requirements, format specifications, and compliance rules for EU-27 + EEA countries — directly from your AI assistant.

Why

European invoicing is fragmented. Every country has different VAT rates, e-invoicing mandates, accepted formats, and compliance rules. This MCP server puts all of that knowledge at your fingertips.

Related MCP server: einvoice-mcp

What's included

10 tools covering the full EU invoicing landscape:

Tool

Description

get_vat_rates

VAT rates for any country (standard, reduced, super-reduced, parking)

list_vat_rates

Compare standard VAT rates across all countries

get_einvoicing_requirements

E-invoicing mandates, systems, and formats per country

get_invoice_format

Format specs (UBL, CII, Factur-X, XRechnung, FatturaPA, Peppol BIS)

validate_invoice_fields

Required fields per country and transaction type (B2B/B2G/B2C)

get_reverse_charge_rules

When and how to apply reverse charge

get_oss_rules

One-Stop Shop rules for cross-border B2C sales

get_b2b_mandate_status

B2B e-invoicing mandate timeline across all countries

get_en16931_info

EN 16931 standard details and CIUS extensions

compare_countries

Side-by-side comparison of two countries

4 resources for direct data access:

  • euinvoice://data/vat-rates — Complete VAT rates database

  • euinvoice://data/einvoicing-requirements — E-invoicing requirements per country

  • euinvoice://data/invoice-formats — Format specifications

  • euinvoice://data/validation-rules — Validation rules, reverse charge, OSS

Coverage

EU-27 + United Kingdom, Norway, Switzerland, Iceland.

Data current as of January 2025.

Installation

npm install -g euinvoice-mcp

Or run directly:

npx euinvoice-mcp

Configuration

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "euinvoice": {
      "command": "npx",
      "args": ["-y", "euinvoice-mcp"]
    }
  }
}

Cursor / VS Code

Add to your MCP settings:

{
  "euinvoice": {
    "command": "npx",
    "args": ["-y", "euinvoice-mcp"]
  }
}

From source

git clone https://github.com/Artisan-at-Work/euinvoice-mcp.git
cd euinvoice-mcp
npm install
npm run build

Then point your MCP client to:

{
  "euinvoice": {
    "command": "node",
    "args": ["/path/to/euinvoice-mcp/dist/index.js"]
  }
}

Usage examples

Once connected, ask your AI assistant:

"What are the VAT rates in Germany?"

"What e-invoicing format do I need for B2G invoices in Italy?"

"Compare the invoicing requirements between France and Germany"

"When does the B2B e-invoicing mandate start in Poland?"

"What fields are required on a cross-border invoice to Spain?"

"Explain the reverse charge mechanism for intra-EU B2B services"

Data accuracy

The data covers current (2024/2025) rules including:

  • Finland's standard rate increase to 25.5% (Sep 2024)

  • Estonia's standard rate increase to 22% (Jan 2024)

  • Germany's B2B e-invoicing mandate (receiving: Jan 2025, sending: 2027/2028)

  • Slovakia's rate increase to 23% (2025)

  • Czech Republic's merged reduced rate of 12% (2024)

  • Romania's B2B clearance mandate (Jan 2024)

  • France's B2B mandate timeline (Sep 2026 onwards)

  • Poland's KSeF mandate (Feb 2026)

Contributing

Contributions welcome. Areas that would benefit from help:

  • Additional country-specific validation rules

  • SAF-T reporting requirements

  • Withholding tax rules

  • VIES validation integration

  • More detailed sector-specific reduced rates

License

MIT

Available Tools

10 tools
compare_countriesB

Compare e-invoicing requirements and VAT rates between two countries.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryAYesFirst country code
countryBYesSecond country code

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it adds nothing: no statement that this is a read-only lookup, no auth or rate-limit notes, and no indication of whether the result is a side-by-side diff or a merged view.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero filler, and the core action and scope are front-loaded immediately.

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 two-parameter read tool with full schema coverage this is minimally viable, but with no annotations and no output schema the description leaves unanswered what the comparison actually returns and in what shape.

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% and both parameters are documented as 2-character country codes, so the baseline is 3. The description adds no format guidance (e.g. ISO 3166 alpha-2) or ordering semantics beyond what the schema already states.

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 (compare) plus the resources (e-invoicing requirements and VAT rates) and scope (two countries). It implicitly contrasts with the sibling getters, which operate on one country, but never names or explicitly differentiates from them.

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 by the verb 'compare' and the two required country parameters; the description never says when to reach for this over get_vat_rates or get_einvoicing_requirements, nor notes any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_b2b_mandate_statusA

Get the B2B e-invoicing mandate status across all countries. Shows which countries have mandates, planned dates, and systems.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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. 'Get' implies a safe read and the description discloses the returned content, but it says nothing about auth requirements, rate limits, country coverage limits, or whether results are cached or live.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste. The purpose is front-loaded and the second sentence adds concrete content detail rather than padding.

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?

For a parameterless read-only lookup with no output schema, the description gives enough to call it correctly and anticipate the shape of the answer. It could go further by clarifying how results are scoped or updated, but nothing essential is missing.

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 there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly avoids inventing filter semantics that don't exist.

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 ('get the B2B e-invoicing mandate status') plus scope ('across all countries') and enumerates what the result contains (mandates, planned dates, systems). It is clearly distinct from country-specific siblings like get_einvoicing_requirements, though it never names an alternative explicitly.

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 'across all countries' phrasing implicitly signals this is the global-overview tool rather than a per-country lookup, but there is no explicit when-to-use guidance, no conditions, and no named alternatives among the many similar siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_einvoicing_requirementsB

Get e-invoicing requirements for a country: mandates (B2G, B2B, B2C), systems, formats, Peppol readiness, clearance model.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryCodeYesISO 3166-1 alpha-2 country code

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 behavioral burden, but the 'Get' verb strongly implies a read-only lookup and there is no mutation risk to disclose. It adds useful content scope beyond the schema by naming exactly which requirement categories come back, though it says nothing about data freshness, coverage confidence, or behavior for unsupported countries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with a compact, comma-separated enumeration of return scope. Every clause earns its place, and nothing is padded or repeated.

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 one fully documented parameter and no output schema, the description usefully enumerates the shape of the returned data (mandates, systems, formats, Peppol readiness, clearance model), covering the main gap. It falls short only on sibling disambiguation and any note about unsupported or low-coverage countries.

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 coverage is 100% and the single countryCode parameter is already documented in the schema as an ISO 3166-1 alpha-2 code with a 2-character constraint. The description only restates 'for a country' and adds no format or validity details beyond the schema, 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?

The description gives a specific verb ('Get') plus a well-defined resource ('e-invoicing requirements') and enumerates the sub-topics it returns (mandates B2G/B2B/B2C, systems, formats, Peppol readiness, clearance model). It does not, however, distinguish itself from overlapping siblings such as get_b2b_mandate_status, get_invoice_format, or get_en16931_info, which cover adjacent ground.

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 explicit when-to-use guidance and no mention of alternatives, despite heavy overlap with siblings like get_b2b_mandate_status (a specific slice of these requirements) and get_invoice_format. Usage is only loosely inferable from the scope of the returned fields.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_en16931_infoB

Get information about the EN 16931 European e-invoicing standard, its core syntaxes, and CIUS extensions.

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?

With no annotations, the description carries the full behavioral burden. It discloses the content scope of the lookup, which implies a safe, read-only reference call, but never explicitly states that it is non-mutating or describes the shape of what is returned. Adequate for a zero-parameter static lookup, but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence that front-loads the resource and then lists the covered sub-topics. No filler, no redundancy.

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 should ideally indicate what form the returned information takes, and it does not. For a simple zero-parameter reference tool the content scope is probably enough to call it correctly, but the return-value picture is left blank.

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 no parameters, so per the calibration the baseline is 4. There is nothing further for the description to clarify about inputs.

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 names a specific verb and resource — the EN 16931 standard — and enumerates the three content areas (core syntaxes, CIUS extensions) the caller will receive. It is clear what the tool does, though it does not distinguish itself from overlapping siblings such as get_einvoicing_requirements or get_invoice_format.

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 statement of when to call this tool versus the overlapping siblings (get_einvoicing_requirements, get_invoice_format, validate_invoice_fields). Usage is only inferable from the topic name; no context, prerequisites, or alternatives are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_invoice_formatA

Get details about an e-invoicing format/standard (UBL, CII, Factur-X, XRechnung, FatturaPA, Peppol BIS, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYesFormat name (e.g., UBL, CII, Factur-X, XRechnung, FatturaPA, Facturae, Peppol BIS, ebInterface)

TDQS

A3.8/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 full behavioral burden. It is silently a read-only lookup with a single required input, but the description never states this, nor does it describe return shape or whether the format string is case-sensitive. The absence of any mutation language makes read-only behavior reasonably inferable, but a 3 reflects the lack of explicit behavioral cues.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tightly-written sentence with the operation and the example set front-loaded. No filler or redundancy.

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?

For a one-parameter lookup with full schema coverage and no output schema, the description covers purpose and examples adequately. The main gap is absent guidance on how this differs from adjacent format/standard tools in the sibling set, which for a reference-lookup tool is a minor but real omission.

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 coverage is 100%, so the schema already documents the single 'format' parameter with a full example list. The description repeats the format examples but adds no syntax, casing, or matching rules beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (details about an e-invoicing format/standard), and enumerates concrete examples (UBL, CII, Factur-X, XRechnung, FatturaPA, Peppol BIS). This distinguishes it from siblings like get_en16931_info and get_einvoicing_requirements, which cover related but different concerns.

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 description implies usage (look up format reference details) but does not state when to prefer this over get_einvoicing_requirements, get_en16931_info, or other siblings. No explicit alternatives or exclusions are given, so an agent must infer the distinction from the examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_oss_rulesA

Get One-Stop Shop (OSS/IOSS) rules for EU cross-border B2C sales. Covers Union OSS, Non-Union OSS, and Import OSS.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/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 implies a static reference lookup but says nothing about permissions, return shape, caching/staleness, or whether the response is a rule set versus a single rule, leaving an agent with little behavioral grounding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the resource definition front-loaded and the scope enumeration second. No filler, no repetition of the tool name.

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?

For a simple, parameterless reference lookup with no output schema, the description covers what the tool returns at a topical level (the three OSS regimes). It could say more about the form of the returned rules, but nothing critical to invoking it is missing.

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 is 4. There is nothing for the description to clarify beyond the fact that the lookup is unconditional, which the empty schema already conveys.

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 (Get) plus resource (OSS/IOSS rules) and expands the acronym, then names the three sub-domains (Union, Non-Union, Import OSS). It is clearly distinct from the VAT-rate and e-invoicing siblings, though it never names an alternative directly.

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 phrase 'for EU cross-border B2C sales' implies the situation in which this applies, which is useful context, but there is no explicit when-to-use directive, no exclusions, and no routing to or away from siblings such as get_vat_rates or get_reverse_charge_rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_reverse_charge_rulesA

Get reverse charge mechanism rules for EU cross-border transactions. Explains when and how to apply reverse charge.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does hint at the return content by saying it 'explains when and how to apply' reverse charge, which tells the agent this is explanatory reference material rather than a lookup of a specific rate. It still omits scope (all member states? exceptions?), currency/jurisdiction limits, and whether the data is static or dated.

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, purpose first, with no padding or boilerplate. The second sentence ('Explains when and how to apply reverse charge') is only marginally additive over the first, which keeps it just short of a 5.

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 zero-parameter, no-output-schema reference tool this covers the essentials, but it is thin on the details an agent needs to trust the result: geographic coverage, whether the rules are current/versioned, and how it relates to the sibling OSS and VAT-rate tools.

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 there is nothing for the description to clarify; baseline 4 applies. The absence of any filtering arguments is consistent with the description's implication that it returns a general rule set rather than a per-transaction answer.

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 ('Get') and a well-defined resource ('reverse charge mechanism rules') scoped to EU cross-border transactions, plus a note on what the content covers. It is clear against most siblings, though it never explicitly distinguishes itself from the adjacent get_oss_rules or get_vat_rates tools.

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 phrase 'for EU cross-border transactions' implies the scenario in which this tool applies, which is more than nothing. However, there are no when-not conditions, no mention of prerequisites, and no routing to or away from the many sibling rule tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vat_ratesA

Get VAT rates (standard, reduced, super-reduced, parking) for an EU/EEA country. Returns current rates with notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryCodeYesISO 3166-1 alpha-2 country code (e.g., DE, FR, IT)

TDQS

A3.5/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 implies a safe read lookup ('Get') and discloses that results include notes and are 'current' rates, but says nothing about error behavior for non-EU inputs, freshness/source of the rates, or rate limits. Adequate for a trivial lookup, but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the purpose and scope, followed by a brief return-value note. No filler or repetition.

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?

For a single-parameter read-only lookup with no output schema, the description covers purpose, geographic scope, and returned content. Minor gaps remain around behavior for invalid/non-EU country codes, but nothing essential to invoking the tool is missing.

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?

Schema coverage is 100% so the baseline is 3, but the description adds a real constraint absent from the schema: the countryCode must be an EU/EEA country. That scoping nuance materially affects how the agent selects this tool and validates input.

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 (Get) and resource (VAT rates) and enumerates the rate categories returned, so the agent knows exactly what data comes back. It does not, however, differentiate itself from the sibling list_vat_rates, leaving ambiguity about which of the two to pick.

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 the sibling list_vat_rates or any other alternative. The agent must infer usage context entirely from the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_vat_ratesA

List VAT standard rates for all supported countries, sorted by rate. Useful for comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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 disclosure burden. It does reveal useful behavior — the result spans all supported countries and is sorted by rate — but says nothing about read-only safety, auth requirements, or whether the list is exhaustive/cached. Adequate for a trivial zero-param read, but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the scope and ordering constraint front-loaded before the use case. Every clause earns its place.

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?

For a zero-param listing with no output schema, the description covers what is returned (all countries, sorted) and a typical use case. It is nearly complete; only the relationship to get_vat_rates and the return shape remain 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 there is no parameter semantics to explain; baseline 4 applies. The description correctly implies no filtering input is needed since rates are returned across all countries.

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 with scope: 'List VAT standard rates for all supported countries, sorted by rate.' The 'all supported countries' scope implicitly contrasts with the sibling get_vat_rates (singular lookup), but the description never names that alternative, so sibling differentiation is left to inference.

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?

'Useful for comparison' hints at when to reach for this over a single-country lookup, but there is no explicit when-to-use statement, no exclusion, and no named alternative (get_vat_rates) despite it being an obvious sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_invoice_fieldsB

Check which fields are required for an invoice in a specific country. Returns common EU requirements plus country-specific fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryCodeYesISO 3166-1 alpha-2 country code
transactionTypeNoTransaction type (defaults to B2B)

TDQS

B3.3/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 disclosure burden. It conveys that this is a read-only lookup and gives some output scope ('common EU requirements plus country-specific fields'), but says nothing about permissions, whether country coverage is complete, or how results are structured.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and followed by the output scope. Nothing is padded or redundant.

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 2-parameter read-only lookup the description is adequate on inputs and rough output scope, but with no output schema and no sibling differentiation, an agent cannot confidently choose it over the several similar requirement-lookup tools.

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%, with countryCode documented as ISO 3166-1 alpha-2 and transactionType as an enum defaulting to B2B. The description adds no parameter detail beyond the schema, so the baseline of 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 action and resource: checking which invoice fields are required per country, and distinguishes its scope with 'common EU requirements plus country-specific fields.' However, the name 'validate_invoice_fields' implies validating an actual invoice, while the description only describes a requirements lookup, creating a minor naming/behavior mismatch.

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?

No guidance on when to use this versus siblings like get_einvoicing_requirements, get_invoice_format, or get_en16931_info, which all sound related to invoice requirements. The agent must guess which of these to call for a given need.

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. 10 tool updatesv0.1.0
    • First observedcompare_countries
    • First observedget_b2b_mandate_status
    • First observedget_einvoicing_requirements
    • First observedget_en16931_info
    • First observedget_invoice_format
    • First observedget_oss_rules
    • First observedget_reverse_charge_rules
    • First observedget_vat_rates
    • First observedlist_vat_rates
    • First observedvalidate_invoice_fields

TDQS

A3.7/5.0

Scored across 10 tools

Disambiguation4/5

Most tools target clearly distinct aspects (VAT rates, requirements, formats, field validation, reverse charge, OSS, mandates, standard info, comparison). Minor overlap between list_vat_rates and get_vat_rates, and between get_einvoicing_requirements and get_b2b_mandate_status, but descriptions clarify scope.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern with clear prefixes like list_, get_, validate_, and compare_. No mixing of conventions.

Tool Count5/5

10 tools is well-scoped for an EU e-invoicing and VAT reference server; each tool covers a distinct informational need without redundancy or bloat.

Completeness4/5

Covers core reference areas: VAT rates, e-invoicing requirements, formats, field validation, reverse charge, OSS, B2B mandates, EN16931, and comparison. Minor gaps exist, such as no list_invoice_formats or VAT number validation, but agents can work around them.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server for electronic invoicing that enables generating, validating, and parsing Factur-X and ZUGFeRD compliant XML invoices. It supports the French 2026 B2B reform and provides integration with Chorus Pro for automated invoice submission and status tracking.
    9
    50 npm
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for DACH e-invoicing. Create XRechnung (UBL) and ZUGFeRD 2.3 (Factur-X CII) invoices, validate against EN 16931 rules, extract data from XML, and convert between UBL, CII and JSON formats.
    6
    22 npm
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Official MCP server: EU VAT validation via VIES, plus offline rates and format checks.
    5
    26 npm
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for German e-invoice compliance (XRechnung 3.0 & ZUGFeRD 2.x) enabling AI agents to validate, generate, parse, and check compliance of electronic invoices per EN 16931.
    6
    1
    MIT