Skip to main content
Glama

Counterfoil

Server Details

Read stored EU e-invoice rule notes and the invoice field map. Not a validator.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4/5.0

Scored across 4 tools

Disambiguation3/5

check_invoice and search_rules are clearly distinct, but explain_error and get_rule heavily overlap: both take a rule id and return the statement, plain reading, fix, and source URL. The only real difference is that explain_error also accepts a validator message, so an agent can easily misselect between the two.

Naming Consistency5/5

All four tools follow a consistent verb_noun snake_case pattern (check_invoice, explain_error, get_rule, search_rules). No mixed conventions or vague verbs.

Tool Count4/5

Four tools is a reasonable, well-scoped set for a rule-lookup/explanation server. It is on the lean side, and the explain/get overlap slightly inflates the count relative to distinct capabilities.

Completeness3/5

Lookup and explanation are covered (get, search, explain), but there is no true validation operation—check_invoice explicitly runs no Schematron and cannot report a pass—and no way to list rules or groups directly. These gaps limit end-to-end rule-checking workflows.

Available Tools

4 tools
check_invoiceCheck invoice sliceA
Read-onlyIdempotent
Inspect

Read a UBL Invoice XML slice of at most 60000 characters. Returns the business terms that slice writes, the field-map gaps, and one stored note when BR-DE-15 finds no non-empty buyer reference (BT-10). evaluation is false: no Schematron runs. The result does not say the invoice passed. The XML is not stored. A larger file is the raw body of POST /v1/invoices/check, up to 1048576 bytes.

ParametersJSON Schema
NameRequiredDescriptionDefault
xmlYesUBL Invoice XML. At most 60000 characters.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds substantial context beyond them: no Schematron runs, the result does not assert the invoice passed, and the XML is not stored. These are exactly the caveats an agent needs to avoid misreading a successful call as a validation verdict, and nothing contradicts the annotations.

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?

Six short sentences, front-loaded with purpose and return content, and each sentence carries distinct information (returns, evaluation caveat, storage policy, size boundary). The fragment 'evaluation is false: no Schematron runs' is slightly cryptic in isolation, but no sentence is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/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 takes on the burden of describing the response and does so ('business terms that slice writes, the field-map gaps, and one stored note'), plus it clarifies storage and validation semantics. For a one-parameter read tool with full annotation coverage, nothing an agent needs to call it correctly is missing.

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% for the single 'xml' parameter, and the description merely restates the 60000-character limit already encoded as maxLength in the schema. It adds no syntax, encoding, or format detail beyond the schema, so the baseline 3 for a fully documented single parameter 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?

The description opens with a specific verb and resource ('Read a UBL Invoice XML slice') and immediately bounds it ('at most 60000 characters'), which is far more than a restatement of the name. It also names the concrete return content (business terms written, field-map gaps, a stored note keyed to BR-DE-15/BT-10), so an agent can distinguish it from the rule-oriented siblings (get_rule, search_rules, explain_error) at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear operational boundary: this tool handles slices up to 60000 characters, while a larger file goes to the raw body of POST /v1/invoices/check (up to 1048576 bytes). That routes the agent on size, but there is no explicit guidance about when to choose this tool versus the sibling rule/error tools, so it stops short of a full when/when-not/alternatives statement.

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

explain_errorExplain errorA
Read-onlyIdempotent
Inspect

Read a stored rule named in a rule id or a validator message. Returns the stored statement, plain reading, fix, and source URL when a stored rule matches. Does not check an invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesA rule id such as BR-01, or a validator message that quotes one.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description still adds real behavior: the exact return payload and the conditional 'when a stored rule matches', which signals that a non-matching input yields no rule content. It does not describe the shape of that no-match case, but the conditional is a meaningful disclosure.

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?

Three short sentences, zero filler: purpose first, return payload second, the check_invoice exclusion last. Every sentence carries distinct information and nothing is 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 no output schema, the description carries the return-value burden and does so adequately by naming the four returned fields. For a single-parameter read tool with strong annotations this is nearly complete; the only real omission is how it differs from get_rule.

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 parameter already documents both accepted forms (rule id like BR-01, or a validator message quoting one). The description restates that same duality without adding syntax, format, or matching rules, so it sits at the baseline for schema-complete tools.

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 concrete verb and resource: 'Read a stored rule named in a rule id or a validator message', and enumerates what comes back (statement, plain reading, fix, source URL). It cleanly excludes check_invoice, but never distinguishes itself from the very similar get_rule, so the sibling separation is only partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Does not check an invoice' is an explicit when-not that routes the agent away from check_invoice, and the accepted input forms (rule id or validator message quoting one) clarify the intended context. It stops short of exclusions or comparisons against get_rule/search_rules, which a reader would plausibly be choosing between.

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

get_ruleGet ruleA
Read-onlyIdempotent
Inspect

Read one stored EU e-invoice rule by id. Returns the stored statement, context, test, plain reading, fix, and source URL. Does not check an invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesA stored rule id, such as BR-01 or BR-IC-05.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds real value beyond that by enumerating what comes back (statement, context, test, plain reading, fix, source URL) and clarifying this is pure lookup, not validation.

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?

Three short sentences, front-loaded with the verb and resource, then return contents, then the exclusion. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/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 compensates by listing the returned fields, and with only one fully-documented parameter there is nothing else an agent needs. Complete for a simple by-id lookup.

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 parameter's pattern, max length, and id format are fully documented in the schema. The description's 'by id' adds nothing beyond it, so baseline 3 applies.

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?

Specific verb+resource ('Read one stored EU e-invoice rule by id') plus an explicit boundary statement ('Does not check an invoice') that separates it from the check_invoice sibling. An agent knows exactly what this retrieves without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The negative guidance ('Does not check an invoice') is a genuine when-not that routes the agent away from the wrong sibling. However, it never names search_rules as the alternative for when the id is unknown, leaving discovery-vs-lookup selection to inference.

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

search_rulesSearch rulesA
Read-onlyIdempotent
Inspect

Find stored rules by words, a BT code, or a group. Each hit returns the stored statement, plain reading, fix, and source URL. At most 100 hits. Does not check an invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
btNoA business term code such as BT-24, matched as a whole token.
groupNoOne stored group.
queryNoWords matched against the id, statement, reading, fix, context, and test. Every word must match. Case-insensitive.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real behavioral context beyond them: the fields each hit contains and a hard cap of 100 results, which is the kind of constraint an agent needs to plan pagination or narrow its query.

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?

Four short sentences, zero filler, with the core purpose front-loaded and the limit and the sibling exclusion trailing. Every sentence carries information.

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 usefully enumerates the returned fields (statement, plain reading, fix, source URL) and the 100-hit cap, which is enough to call it correctly. It omits any hint about preferring get_rule for a single known rule, leaving a small gap for a four-tool family.

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 bt, group, and query in detail (pattern, enum list, matching rules). The description only restates the three axes in prose and adds no syntax or interaction detail, so the baseline 3 applies.

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 ('Find') plus the resource ('stored rules') and the three lookup axes (words, BT code, group). The closing clause 'Does not check an invoice' draws a hard boundary against the check_invoice sibling, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when this is the right call (lookup of stored rules by text/code/group) and one explicit exclusion ('Does not check an invoice'). It stops short of routing to get_rule for single-rule retrieval or stating that all three filters are optional and combinable.

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 updates
    • First observedcheck_invoice
    • First observedexplain_error
    • First observedget_rule
    • First observedsearch_rules

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Read and check European e-invoices (Factur-X, ZUGFeRD, XRechnung, UBL, CII) from an AI assistant: contents in plain text plus an EN 16931 consistency check.
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Validates EU electronic invoices (Peppol, XRechnung, FatturaPA, etc.) and explains validation error codes, enabling AI coding agents to check invoice validity and get fixes before rejection.
    3
    17 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to read, validate against the official KoSIT rules (no Java), create, and display XRechnung and ZUGFeRD e-invoices, and export incoming invoices as DATEV posting batches. Running it with a cloud language model sends invoice contents to that provider's service.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Reads and validates any European e-invoice a business receives — XRechnung, UBL, CII, ZUGFeRD/Factur-X PDF, Peppol BIS 3, FatturaPA, KSeF FA(3) — into canonical EN 16931 JSON with plain-language fix hints in EN/DE/PL/IT/FR, plus PDF, CSV and DATEV export. Nothing is stored; works without a key on a small daily quota.
    5
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources